Дваче-программаче. Я вот тут катаюсь в си-шарпе и услышал, что некоторые ребята программируют не используя оператор if. Слушал в пол уха, речь шла о логике классов и вызовов. Вот хотел бы найти русско-язычные источники по if-less programming. Кто знает
>>1157597 (OP)(палец соскользнул) Кто знает источники, мб кто умеет это делать?
>>1157597 (OP)Всё, что у тебя в теле if-else блоков выносишь в разные классы, эти классы реализуют один интерфейс, конкретно один метод. Этот метод ты и вызываешь вместо if-else, а в исходный метод передаешь объект типа тот-интерфейс.
>>1157604на каждый if-else свой класс?
>>1157614Ну, смотри. Вот есть у тебя код:if ("Doge".Equals(name)) { / gav gav / }else if ("Pepe".Equals(name)) { / qua qua / }ты делаешь классыinterface IAnimalclass Doge : IAnimalclass Pepe : IAnimalУ них реализуешь метод Say(), у каждого свой и свой if заменяешь на animal.Say()А в исходный метод передаешь IAnimal animal
>>1157617и я даже это смогу сделать if-less? if (booki.similary(booki.shings, shelfi.booksample.shings) == true) { shelfi.bookList.Add(booki); booki.placed = true; break; } else continue;
>>1157644>буки>шельфи
>>1157649все верно, делаю проверку достаточно ли книга похожа над другую книгу
>>1157644>== trueЭто зачем это так делать?
>>1157667звучит так, как будто знаешь альтернативу, я угадал?
>>1157669Знаю. Просто убрать процитированное мной часть. Если функция уже и так true/false вернула, нахера ещё раз с чем-то сравнивать для получения, опять же, true или false'а?
Чем if-ы так плохи, что от них надо избавляться?
>>1157707Как ты во все ифы сразу (ну или ифы которые проверяют вещи одной категории) добавишь например логгирование, или трейсинг. Тем же плохи, чем goto вместо функций. Или структуры вместо объектов. Или инклюды вместо модулей.
>>1157667Может у него similary возвращает bool?
>>1157863Ну так она у него булеан и возвращает, да. Иначе бы он не с true сравнивал.
>>1157742чем goto плох) критика goto - признак конченного дебича. За 10 лет работы с унаследованным кодом ни разу не видел гоуту, хотя сам иногда использую. Все это каргокульт, люди просто слышат звон, но не в состоянии уяснить что в этом плохого. Постоянно коллег про гоуту спрашиваю и ни один (даже с гуглом) ничего вменяемого ответить не может. В основном гоуту-маркер, умный программист будет долго думать и скажет что где-то слышал про то что лучше не использовать, но почему не знает. Тот кто прыгает по верхам и не имеет глубины ума тот яростно доказывает вред гоуту.
>>1159158Вот и выросло поколение жертв егэ, не нюхавших всяких кувасиков.
> мелкобуквенный дебил доказывает, что goto заебисьВообще не удивлен, что этот пост написан в сисярп-треде. Здесь ему самое место.>>1159158> За 10 лет работы с унаследованным кодом> 10 лет жрал говно и так и не нашел ультраговно, поэтому приходится подсирать самому
>>1157667Там может быть "bool?"
>>1157597 (OP)Не слышал, но подозреваю, что очередной максималистский культ. Погромисты любят культы, ведь всегда проще орать с плакатом, чем включать голову. Тот же злополучный goto - отличный пример: 80% тупо орут про его вредность, еще 19% могут объяснить, почему он вреден (да, он превращает поток управления в неструктурированные макароны) и лишь 1% укажет, что есть ситуации, когда он весьма эффективен (конечные автоматы, например). Так же и здесь. Ноги культа явно растут из простого факта: ветвление логики часто указывает на целесообразность перехода к инверсии контроля через полиморфизм, как в примере у этого >>1157617 анона. Ясен хуй, что из этой самой целесообразности не проистекает демоничности if, и в примере >>1157644 его использование вполне оправдано. Любые приемы должны хорошо ложиться на практику. Например, одно время бытовала такая установка: функция должна иметь единственную точку выхода. И действительно, при теле функции в два экрана это упрощало жизнь. Однако со временем человечество смекнуло, что функции нужно делать максимально короткими, и внезапно оказалось, что теперь удобнее делать много точек выхода, чем плодить влоденные блоки else - и else стал антипаттерном, даже линтеры некоторые подсвечивают как говнокод. Но это не означает, что его категорически нельзя использовать или что тернарный оператор под запретом. Надо всякий раз думать, почему стоит или не стоит использовать любой прием.
>>1157669if (booki.similary(booki.shings, shelfi.booksample.shings))
>>1159181типичный даунич, ясный хуй, что всякий отличный от твоего опыт - ультраговно
>>1159164я сразу в си и ассемблер в катился, на хуй мне этот кубасик
>>1159580> даунич> безграмотная мелкобукваНассал в рот возомнившему о себе школьничку.
>>1159772соси хуй, пидор, у меня уже свой ай ти стартап
fg
>>1159421>Тот же злополучный goto - отличный пример: 80% тупо орут про его вредность, еще 19% могут объяснить, почему он вреден (да, он превращает поток управления в неструктурированные макароны) и лишь 1% укажет, что есть ситуации, когда он весьма эффективен (конечные автоматы, например). Ты наверное только недавно прочитал в книге "что такое программирование". За goto в C# надо отрывать руки в любых проявлениях. Когда вы уже тупые животные уясните, что программы пишутся в первую очередь для человека, который потом будет его сопровождать? Твои ебанные потуги "оптимизировать" код нахуй никому не нужны, когда фича из-за таких ебланов-оптимизаторов просирает все сроки.
>>1161732если звезды зажигают - это кому-нибудь нужно
>>1157597 (OP)Это не относится непосредственно к шарпу, а ноги растут из функционального программирования. В идеале функциональная программа - это функция от функций от функций и так далее, и ничего больше. У ФП-адептов отношение к этому, как к ебле: переебать всех баб на свете невозможно, но стремиться к этому нужно. Так как мы живем в реальном мире, мутабельность, ось t и прочие нежелательные артефакты типа if-else и циклов устранить нельзя, но функциональщики придумали засовывать их в ящики, реализующие какие-то стандартные алгоритмы, так что вся эта хуйня внутри, а снаружи только функции и пара рельсовых путей. Монады, ептыть. И строить программу уже из этих ящиков. Примеры: если у тебя есть потенциально отсутствующее значение, ты можешь пердолиться с проверками на null, а можешь засунуть его в Nullable, она же монада Maybe, и вызывать цепочкой ее методы, реализуя все, что надо, в виде функций от функций и так далее, как функциональщики любят. В качестве бонуса система типов может полностью защитить тебя от обращения к null объекту. Или вот еще:if (booki.similary(booki.shings, shelfi.booksample.shings) == true){shelfi.bookList.Add(booki);booki.placed = true;break;}else continue; Очевидно, это происходит в внутри цикла по книгам, так что тут вполне можно применить Map/Reduce/Filter/что_там_еще_в_шарпе_есть операции по спискам, после чего там не будет брейков, continue, ifов и, кстати, booki.placed флага, скорее всего. Где-то так.
>>1161804А если четыре — то это дважды два.
>>1157597 (OP)Ну например ты можешь создать словарь, где ключ будет bool или Enum, а значение делегат и пихать в него выражение, в зависимости от которого будет вызываться тот или иной метод
>>1162141Что ты несешь, поехавший? В чем тогда вообще смысл этого?
>>1157597 (OP)Хуита без задач.Функциональщина признак дегенерата.Раньше иммутабельность форсили. С null воевали. Теперь видимо будут с if'ами воевать.
Jakob Jenkov пишет:From now on, the usage of "if" statement is considered as anti-pattern and must be avoided at all costs. Period.
>>1157597 (OP)http://www.yegor256.com/2016/08/10/if-then-else-code-smell.html
>>1163157Егорыч пиздеть не будет. Что же, пора отказываться от if, посоны.
>>1163199Я уже начал все переписывать.
>>1163322молодца, не забудь удалить пустые строчки.http://www.yegor256.com/2014/11/03/empty-line-code-smell.html
>>1163323Давно уже удалил все пустые строки. Вместе с комментариями.
>>1163323Скажите, у него ООП головного мозга или все-таки дело говорит?
>>1163742Он порет настолько незамутненную чушь, что многие принимают ее за откровение. В принципе любая религия так работает, не только секта свидетелей Егория.
>>1161732А вот и типичные представители 80% пожаловали, конечного автомата не нюхавшие.
>>1164441В отличие от большинства сидящих здесь кукаретиков, Егорка пишет реальный код и зарабатывает этим. Он говорит о том, что в его практике реально облегчило работу.Я бы прислушался к его мнению на твоем месте.
>некоторые ребята программируют не используя оператор if.Ну есть такая поговорка "заставь дурака Богу молится, он лоб расшибёт". Есть такой антипаттерн: лесенка из if-ов и в каждом условие типа "if (user.type == a) then do huinyaA else if (user.type == b) then do huinyaB else if (user.type == c) do huinyaC". В этом случае очевидно надо к user добавить метод doHuinya(), сделать подклассы и заменить весь этот код user = userFactory.makeUser(type);user.doHuinya(). Ну и есть дауны, которые думают, что так надо делать вообще везде, где есть if.
>>1163156>Period.ЯСКОЗАЛ
>>1164468Он зарабатывает на сектантах, а не на написании кода. Я не возьмусь сказать, искренне он верит в свой бред или просто смекнул, что практичнее стричь капусту на дурачках, чем корпеть над кодом. Больше похоже на второе, хотя не исключаю и первого.
>>1164494А вообще давно не было егоросрача, давайте здесь раздуем, тред подходящий.
>>1164494>зарабатывает Ты правда думаешь о зарабатывает на своем блоге и на книже?
>>1164498Хайпа он ловит много, на конференциях светится. Это, конечно, не единственный источник дохода, но какую-то копеечку он с этого рубит. Невооруженным взглядом видно, что чел значительно лучше пиздоболит, нежели программирует. Я, есличо, мимо старый пердун, руководитель группы разработки в топ-конторке и немножко знаю, о чем говорю.
>C# if-less>услышал, что некоторые ребята программируют не используя оператор ifОни пользуются switch?