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] jek-hor.livejournal.com 2009-07-12 01:27 pm (UTC)(link)
А в руби можно сказать так:

irb(main):004:0> nil.to_s.downcase
=> ""


:)

[identity profile] metaclass.livejournal.com 2009-07-12 01:30 pm (UTC)(link)
Языки без строгой типизации это еще один ад.

nil, to_s и downcase какого типа?

[identity profile] jek-hor.livejournal.com 2009-07-12 01:38 pm (UTC)(link)
irb(main):001:0> nil.class
=> NilClass
irb(main):002:0> nil.to_s.class
=> String
irb(main):003:0> nil.to_s.downcase.class
=> String

[identity profile] dizel-by.livejournal.com 2009-07-12 02:13 pm (UTC)(link)
Ты бы ещё перл вспомнил :)

[identity profile] lupus-lupusum.livejournal.com 2009-07-12 06:32 pm (UTC)(link)
$s=lc;