metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2009-07-12 02:00 pm

Тяжелый ООПшный майндфак

В .NET, во всяком случае в 2.0 и раньше есть одна вещь, которая садит на коня просто нечеловечески. Это то, что куча функций обработки строк является методами экземпляра класса String. А не статическими методами класса. Вроде бы мелочь, подумаешь, какая разница - писать s=s.ToLower(); или s=string.ToLower(s);
А вот хрен. С добавлением того факта, что строка это объект, и она может быть null, и использованием этого null как маркера "функция вернула хрень" в куче мест фреймфорка мы получаем тот геморрой, что перед каждым вызовом s.ToLower() приходится впихивать if(!string.IsNullOrEmpty(s)) или как минимум if(s!=null).

Т.е. вместо такого:
if(String.ToLower(Path.GetExtension(fn))==".wav") {
}

приходится писать такое:
string ext = Path.GetExtension(fn);
if(!string.IsNullOrEmpty(ext))
ext = ext.ToLower();
if(ext==".wav"){
}


Вот этот ООПшный фетишизм "все - объект" и отсутствие глобальных или хотя бы статических функций для простейших вещей просто бесит.

[identity profile] kkirsanov.livejournal.com 2009-07-12 11:16 am (UTC)(link)
В питоне встречается похожее:

Если есть список строк: a=['a', 'b', 'c'] и хочется их обеденъить в одну строку 'abc' то нужно писать "".join(a)

"" - создаст пустую строку для которой уже будет вызываться join

[identity profile] 184467440737095.livejournal.com 2009-07-12 02:48 pm (UTC)(link)
а если хочется объединить 'a', 'b', 'c'] в строку 'a,b,c', то нужно писать ','.join(a), что выглядит вполне логично.

[identity profile] metaclass.livejournal.com 2009-07-12 03:04 pm (UTC)(link)
Выглядит странновато, ссылка на объект считается как бы первым парамером метода, а разделитель в подобном методе я бы лично ставил вторым. И соответственно метод join должен быть методом списка а не строки.

[identity profile] 184467440737095.livejournal.com 2009-07-12 03:08 pm (UTC)(link)
заодно сделать аргумент опциональным, а значением по умолчанию поставить пустую строку.

[identity profile] kkirsanov.livejournal.com 2009-07-12 03:28 pm (UTC)(link)
---И соответственно метод join должен быть методом списка а не строки.
Не пойдет.

Как осуществлять конкатенацию строк известно, а вот разнотипных элементов списка - нет.

[identity profile] kkirsanov.livejournal.com 2009-07-12 03:31 pm (UTC)(link)
PS: Это конечно питон и ему все типы побоку, но хотя бы иллюзию кошерности надо поддерживать.