Тяжелый ООПшный майндфак
Jul. 12th, 2009 02:00 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
В .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"){
}
Вот этот ООПшный фетишизм "все - объект" и отсутствие глобальных или хотя бы статических функций для простейших вещей просто бесит.
А вот хрен. С добавлением того факта, что строка это объект, и она может быть 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"){
}
Вот этот ООПшный фетишизм "все - объект" и отсутствие глобальных или хотя бы статических функций для простейших вещей просто бесит.
no subject
Date: 2009-07-12 11:16 am (UTC)Если есть список строк: a=['a', 'b', 'c'] и хочется их обеденъить в одну строку 'abc' то нужно писать "".join(a)
"" - создаст пустую строку для которой уже будет вызываться join
no subject
Date: 2009-07-12 02:48 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-07-12 11:32 am (UTC)no subject
Date: 2009-07-12 11:33 am (UTC)Тогда бы код ребе превратился бы в вот такой:
string ext = Path.GetExtension(fn);
if (".wav".equalsIgnoringCase(ext)) {
//foobar!
}
no subject
Date: 2009-07-12 11:37 am (UTC)no subject
Date: 2009-07-12 12:57 pm (UTC)no subject
Date: 2009-07-12 01:12 pm (UTC)no subject
Date: 2009-07-12 01:32 pm (UTC)string.ToUpper(string.Trim(s))
s.Trim().ToUpper()
второй несколько короче.
no subject
Date: 2009-07-12 01:26 pm (UTC)no subject
Date: 2009-07-12 01:29 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-07-19 04:01 pm (UTC)no subject
Date: 2009-07-12 01:27 pm (UTC)irb(main):004:0> nil.to_s.downcase
=> ""
:)
no subject
Date: 2009-07-12 01:30 pm (UTC)nil, to_s и downcase какого типа?
(no subject)
From:no subject
Date: 2009-07-12 02:13 pm (UTC)(no subject)
From:no subject
Date: 2009-07-12 02:33 pm (UTC)интересно, выражение "садит на коня"/"подсел на коня" употребляют только мои Минские знакомые :)
Знакомые к примеру из Курска, Москвы, Питера, Новосибирска такое выражение не употребляют.
Когда я первый раз столкнулся, не понял о чем речь и пришлось спрашивать :)
no subject
Date: 2009-07-12 02:54 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-07-12 06:17 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-07-12 07:37 pm (UTC)Для нефинальных классов можно завести потомка, все методы которого будут возвращать ошибку, и использовать его экземпляр в качестве null.
no subject
Date: 2009-07-12 07:42 pm (UTC)no subject
Date: 2009-07-12 09:46 pm (UTC)no subject
Date: 2009-07-19 03:55 pm (UTC)no subject
Date: 2009-07-12 10:07 pm (UTC)Там можно и на null this проверять, вроде.
Кроме того, никто ж не мешает написать свои строки, если совсем туго станет :)
no subject
Date: 2009-07-19 03:49 pm (UTC)(no subject)
From:no subject
Date: 2009-07-13 06:28 am (UTC)Я-то уж собирался раз и навсегда
вернуться обратно в объектно-ориентированному,
даже уже думал, как бы терминальные F,G-диалгебры
приспособить для моделирования интерфейсов.
А тут! Это попытка расжигания меж...межжж какой...
В общем, розни!
;-) ;-)
no subject
Date: 2009-07-13 07:01 am (UTC)блекджеком и шлюхамиэлементами ФП, то и лучше получится :)(no subject)
From:(no subject)
From:no subject
Date: 2009-07-13 07:34 pm (UTC)ЗЫ Вообще, посидев несколько лет на мультипарадигмальных языках типа SQL, я сейчас с трудом понимаю, зачем нужны все остальные :)
no subject
Date: 2009-07-19 02:16 pm (UTC)no subject
Date: 2009-07-19 03:47 pm (UTC)