- 1
- 2
- 3
- 4
- 5
- 6
- 7
public static class StringExtensions
{
public static bool IsNulldOrEmpty(this string str)
{
return string.IsNullOrEmpty(str);
}
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+8
public static class StringExtensions
{
public static bool IsNulldOrEmpty(this string str)
{
return string.IsNullOrEmpty(str);
}
}
why
guest 12.12.2015 20:58 # −2
guest 12.12.2015 21:05 # −2
absolut 13.12.2015 16:37 # +1
nihau 13.12.2015 23:16 # +2
guest 15.12.2015 12:22 # +3
bormand 15.12.2015 17:36 # 0
imihajlov 15.12.2015 18:10 # 0
3_14dar 15.12.2015 18:28 # −2
Что это?
bormand 15.12.2015 18:47 # 0
3_14dar 15.12.2015 19:15 # −2
bormand 15.12.2015 19:35 # 0
3_14dar 15.12.2015 19:43 # −2
bormand 15.12.2015 19:44 # +1
3_14dar 15.12.2015 19:56 # −1
Што?
Чем плохо наследование?
bormand 15.12.2015 20:01 # +2
> Што?
Ты же питонист вроде, должен знать с чем их едят. Функции вне классов. Free function, non-member function.
3_14dar 15.12.2015 20:03 # −1
>Тем, что всё подряд ты в класс не втащишь. Это именно способ "добавить" метод в класс, не меняя его.
Что конкретно туда не "втащишь"?
bormand 15.12.2015 20:04 # +1
> Но они там вроде и так есть.
Нету их там, как и в жабе. Статиками эмулируют.
3_14dar 15.12.2015 20:51 # −1
bormand 15.12.2015 20:06 # +3
Но для fluent-говна в духе LINQ в общем-то удобно. И ничего больше.
3_14dar 15.12.2015 20:52 # 0
bormand 15.12.2015 21:15 # 0
Остаётся запилить пачку свободных функций (ну или статиков, раз у нас шарп) и писать SomeClass.sort(SomeClass.filter(x => x.name == 'hui', SomeClass.select(x => x.user, some))). Тоже какой-то пиздец.
И тут M$ придумывает экстеншн методы, которые по сути статики, но с синтаксисом от методов. И овцы сыты и волки целы.
Как-то так.
3_14dar 15.12.2015 21:38 # 0
1024-- 15.12.2015 21:53 # 0
И вот, скажем, в библиотеке Ивана Денисова объекты типа DenisoffLoader возвращают String при загрузке данных. Придётся написать обёртку для его библиотеки только для того, чтобы подменить String на MyString только для того, чтобы написать s.trimLeft() вместо MyStringUtils.trimLeft(s). А можно запилить экстеншнпитух для String и жить счастливо.
3_14dar 17.12.2015 17:11 # 0
bormand 15.12.2015 22:03 # +1
Профит в читаемости и только в ней. Сравни:
3_14dar 17.12.2015 17:12 # 0
Удобство есть, но не придется ли за него где-то платить какими-нибудь конфликтами?
TarasB 17.12.2015 12:41 # 0
bormand 17.12.2015 15:40 # +1
1024-- 17.12.2015 17:44 # 0
-скажите мне отроки, кОкое тело самое лёгкое?
один из учеников тянет руку.
-ну говори отрок Иохим.
-хуй, Батюшка.
-поясни!
-ну бывает хватает одной мысли чтобы он поднялся.
-хм, озорно, но верно. Скажите отроки, кОкое тело самое тяжёлое?
тот же ученик снова тянет руку.
-ну говори отрок Иохим.
-хуй, Батюшка.
-поясни!
-ну бывает никакой силой его поднять не удаётся.
-хм, озорно, но верно. А скажите мне отроки, кОкое тело самое.....
тот же ученик снова тянет руку.
-да помолчи ты отрок Иохим, а то ты мне так всю физику к хуям сведёшь!
TarasB 25.12.2015 15:08 # 0
dxd 25.12.2015 15:32 # 0
roman-kashitsyn 25.12.2015 15:36 # 0
Ну вот не надо, крестокомпилятор ругается, когда не может выбрать единственно-правильную функцию.
Yuuri 16.12.2015 15:13 # 0
roman-kashitsyn 16.12.2015 15:23 # 0
Soul_re@ver 16.12.2015 23:28 # +1
bormand 17.12.2015 12:28 # 0
Soul_re@ver 17.12.2015 14:01 # +3
Ещё есть "всегда предпочитать члены/свободные функции" (очень много веселья с случайным рекурсивным вызовом при сборке старого кода новым стандартом)
И "Рассматривать члены и свободные функции равнозначно, выбирать лучшую разрешением перегрузки".
Главная проблема, это код в стиле:
3_14dar 17.12.2015 20:50 # 0
Lure Of Chaos 15.12.2015 22:07 # 0
а тут, может, имя не понравилось )
adoconnection 25.12.2015 13:33 # 0
Это супер удобно, особенно в небольших проектах.
esromhaz 28.12.2015 17:41 # 0
Имхо это код ради кода. Масло масляное. Никакого толку от подобного кода нет, а программистам, которые его пишут, руки надо рубить по самые локти.
adoconnection 11.01.2016 12:28 # 0
Но очень скоро окажется, что если в одном месте нужно прибавлять к текущей дате несколько рабочих дней, то и в других местах это сделать нужно. Такой код, на прямую не относящийся к конкретной бизнес логике либо будет задублирован, либо в итоге всплывет в какой-то сквозной DateHelper, которым много кто будет хотеть пользоваться. Более хорошим примером, пожалуй, будет склонение слова в падежах – с легкостью может оказаться полезным в любом месте.
adoconnection 11.01.2016 12:28 # 0
в то время, как если мы хотим прибавить 3 обычных дня мы напишем просто
Ну как бы в целом то похуй, но AddDays удобно и oldDate.AddWorkDays(3) удобнее и чище.
Мы не могли добавить нужный метод в DateTime, но экстеншен метод нам помог.
Теперь возвращаемся class StringExtensions и IsNullOrEmpty.
Во первых автар скопипастил только 1 метод, а на самом деле в StringExtensions к бабушке не ходи их там дохуя.
мы же проверяем строку на пустоту не просто так, а как правило хотим еще что-то сделать. Например для имени мы хотим сделать Trim, потом все буквы слов сделать малкенькими, а первые буквы большими (мы знаем что имена русские) чтобы из "КОЗЛОВА " получилось "Козлова".
вот такую хуйню и заебись складывать в экстеншен метод.
если input нулл - то нуллРеференс не будет т.к. код внутри экстеншена это почистит, получим или имя или нулл.
или например input.Trim() заменяет
Теперь, когда в c# 6.0 есть нулл пропагейшен (null propagation)
такое можно записать как input?.Trim()
и вытворять такие вещи: product?.Price?.ToString("#.00")
но экстеншен методы всеравно остаются удобными.
kegdan 11.01.2016 13:02 # 0
esromhaz в http://govnokod.ru/19174#comment310155 написал:
>> Приведи плз пример где это прям супер удобно?
А тут словоблудие, словоблудие, еще словоблудие.
Данный экстеншен в данный момент не несет никакой пользы кроме эстетической
ибо пока 6 шарп начнут повсеместно юзать... Большинство контор дальше 3 так и не зашли
adoconnection 14.01.2016 12:26 # 0
читаешь не с string.IsNullOrEmpty а потом otherStuff.NestedStuff,
а сразу с предмета выражения: otherStuff.NestedStuff....
я хотел сказать, что это просто обычный код.
kegdan 14.01.2016 14:18 # 0
покорми собаку
и
собаку покорми
adoconnection 28.01.2016 14:35 # +1
Покорми соседний дом, дядя Ваня, собака
И
Соседний дом, дядя Ваня, собака, покормить
Настаиваю, что разница есть, хоть и незначительная.