Тяжелый ООПшный майндфак
В .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
Если есть список строк: a=['a', 'b', 'c'] и хочется их обеденъить в одну строку 'abc' то нужно писать "".join(a)
"" - создаст пустую строку для которой уже будет вызываться join
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
no subject
Тогда бы код ребе превратился бы в вот такой:
string ext = Path.GetExtension(fn);
if (".wav".equalsIgnoringCase(ext)) {
//foobar!
}
(no subject)
no subject
(no subject)
(no subject)
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
irb(main):004:0> nil.to_s.downcase
=> ""
:)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
интересно, выражение "садит на коня"/"подсел на коня" употребляют только мои Минские знакомые :)
Знакомые к примеру из Курска, Москвы, Питера, Новосибирска такое выражение не употребляют.
Когда я первый раз столкнулся, не понял о чем речь и пришлось спрашивать :)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
Для нефинальных классов можно завести потомка, все методы которого будут возвращать ошибку, и использовать его экземпляр в качестве null.
(no subject)
no subject
(no subject)
no subject
Там можно и на null this проверять, вроде.
Кроме того, никто ж не мешает написать свои строки, если совсем туго станет :)
(no subject)
(no subject)
no subject
Я-то уж собирался раз и навсегда
вернуться обратно в объектно-ориентированному,
даже уже думал, как бы терминальные F,G-диалгебры
приспособить для моделирования интерфейсов.
А тут! Это попытка расжигания меж...межжж какой...
В общем, розни!
;-) ;-)
(no subject)
(no subject)
(no subject)
no subject
ЗЫ Вообще, посидев несколько лет на мультипарадигмальных языках типа SQL, я сейчас с трудом понимаю, зачем нужны все остальные :)
no subject
no subject