Тяжелый ООПшный майндфак
В .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
string.ToUpper(string.Trim(s))
s.Trim().ToUpper()
второй несколько короче.
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
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
Для нефинальных классов можно завести потомка, все методы которого будут возвращать ошибку, и использовать его экземпляр в качестве 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