Обсуждаем недостатки текущих языков программирования.
Неявное использование GOTO Классическая процедурная парадигма базируется на принципе: сверху-вниз.
GOTO - оператор, позволяющий передать управление в любой участок кода. Например так 10: Написать Привет 20: Goto 10
Несмотря на практически устоявшееся мнение того, что goto усложняет код (особенно, если его пишут криворукие программисты), goto до сих пор (а быть может всегда) остаётся ключевым оператором многих языков.
Роль GOTO выполняют такие операторы как switch, break, continue, различные лупы и даже элементарный вызов функции это GOTO > NameFunction.
Таким образом, мы получаем макаронный код якобы без единого GOTO.
Низкоуровневый IF Все мы помним развилки, которые довольно наглядно демонстрируют на всех кафедрах, связанных с программированием. Знаменитая вилка является ключевым элементом всех языков. Без условия нет управления и не может быть принятие решений, по крайней мере понятных обычному человеку.
Но есть одно НО. Шли годы, а if оставался ifом. Что в нём не так, а то, что это до сих пор низкоуровневый костыль.
Уже давно появились устоявшиеся схемы А. Одно условие - один вариант действий Б. Одно условие - множество вариантов действий В. Несколько условий - один вариант действий Г. Несколько условий - множество вариантов действий
Минимум 4 абсолютно разных if, хотя на деле встречается гораздо больше вариантов, при этом каждый из них собирается из кучи разных кусков и в итоге получается сложноперевариваемый код с огромными блоками кода, после которых всегда может идти всё что угодно, условие иначе, либо дополнительные исключающие ифы или же просто безусловный код.
Это даже сложно описать, ещё сложнее использовать if в современной жизни, потому что он устарел. Даже простая связка с goto делает его более удобным switch, более приспособленным к современности.
Самый же простой вариант if это просто вызов goto из одной функции в другую. Например func1() => func2()
>>534169 (OP) >Роль GOTO выполняют такие операторы как switch, break, continue, различные лупы и даже элементарный вызов функции это GOTO > NameFunction. Ну не совсем. «switch» это безымянная функция, например. «break» это возврат из безымянной функции, например. >Но есть одно НО. Шли годы, а if оставался ifом. У кого как. «if» это безымянная функция, например.
>>534169 (OP) Ты забыл еще упомянуть очень распространенный случай неявного GOTO когда по умолчанию (точнее если в строке отсутсвуют специальные операторы) после (к примеру) 7 строки всегда выполняется 8 строка, после 12 выполняется 13 и так дальше.
>>534459 Делаешь пандорический захват, лифтишь в монаду, потом строишь рекурсивную схему (здесь подойдёт зигохистоморфный препроморфизм) как монадический трансформер из категории эндофункторов, и метациклически вычисляешь результат. Любой второкурсник справится. А если делать на анафорических лямбдах — так задачка вообще на пять минут.
>>534912 Ни одного. Но если твой вопрос подразумевает "много ли программистов используют этот паттерн", то дохуища. Те же жабаблядки полным составом, например.
>>534459 Я думаю, он имел ввиду полиморфизм скорее. Например есть ситуация: Zalupa, Hooy, Dick extends Penis Object something; if (something instanceof Zalupa) {...} else if (something instanceof Hooy) {...} else if (something instance of Dick) {...} Т.е. для разных типов выполняются разные ветви исполнения. А можно так: void doSome(Zalupa arg){...} void doSome(Hooy arg) {...} void doSome(Dick arg) {...} и в нужно месте просто вызываешь метод для своего объекта: Object something; ... doSomething(something);
Давно ждал такого треда. Жалко только что ОП ебанашка. С++ Никак не завезут модули, нахуй так жить Javascript Новый стандарт - 2nd system effect как он есть; жаль еще до рефайментов как в руби не додумались Go блевок в сторону PLT сообщества; доказательство того что быдлокодеры любое говно прожуют может еще допишу попозже
> Что не так в текущих языках программирования Разработка удобного, достаточно общего способа выражать отношения между различными типами сущностей (то, что философы называют «онтологией»), оказывается невероятно сложным делом. Основная разница между той путаницей, которая была десять лет назад, и той, которая есть сейчас, состоит в том, что теперь множество неадекватных онтологических теорий оказалось воплощено в массе соответственно неадекватных языков программирования. Например, львиная доля сложности объектноориентированных языков программирования — и мелких невразумительных различий между современными объектно-ориентированными языками, — сосредоточена в том, как рассматриваются обобщенные операции над взаимосвязанными типами.
1. Старые языки - старые. В них нет многих хороших фич, а ввод этих фич довольно стремен из-за обратной совместимости. 2. Новые языки - фичи есть, нет кода, все пользуются старыми. При этом победит обязательно какое-нибудь говно.
>>534169 (OP) Анон с ебучими вложенными коллбэками, это ты?
Вызов функции это не goto. Почему? Потому что можно использовать функции без побочных эффектов. Халявное распараллеливание и кэширование. Вдобавок код намного удобнее проверять.
>не нравится if Используй cond как в моем любимом лишпе! cond (условия) (действия) (условия) (действия)
>>534169 (OP) >return - оператор, позволяющий передать управление в любой участок кода. Вызываемая функция может делать совсем не то, что мы ожидаем. Функции не нужны. >int, char, float, double - минимум 4 абсолютно разных оператора "+", хотя на деле встречается гораздо больше вариантов, при этом каждый из них суммирует кучу байт, и в итоге получается сложноперевариваемый ассемблерный код. Сложение не нужно. Ну ты понел.
Неявное использование GOTO
Классическая процедурная парадигма базируется на принципе: сверху-вниз.
GOTO - оператор, позволяющий передать управление в любой участок кода. Например так
10: Написать Привет
20: Goto 10
Несмотря на практически устоявшееся мнение того, что goto усложняет код (особенно, если его пишут криворукие программисты), goto до сих пор (а быть может всегда) остаётся ключевым оператором многих языков.
Роль GOTO выполняют такие операторы как switch, break, continue, различные лупы и даже элементарный вызов функции это GOTO > NameFunction.
Таким образом, мы получаем макаронный код якобы без единого GOTO.
Низкоуровневый IF
Все мы помним развилки, которые довольно наглядно демонстрируют на всех кафедрах, связанных с программированием. Знаменитая вилка является ключевым элементом всех языков. Без условия нет управления и не может быть принятие решений, по крайней мере понятных обычному человеку.
Но есть одно НО. Шли годы, а if оставался ifом. Что в нём не так, а то, что это до сих пор низкоуровневый костыль.
Уже давно появились устоявшиеся схемы
А. Одно условие - один вариант действий
Б. Одно условие - множество вариантов действий
В. Несколько условий - один вариант действий
Г. Несколько условий - множество вариантов действий
Минимум 4 абсолютно разных if, хотя на деле встречается гораздо больше вариантов, при этом каждый из них собирается из кучи разных кусков и в итоге получается сложноперевариваемый код с огромными блоками кода, после которых всегда может идти всё что угодно, условие иначе, либо дополнительные исключающие ифы или же просто безусловный код.
Это даже сложно описать, ещё сложнее использовать if в современной жизни, потому что он устарел. Даже простая связка с goto делает его более удобным switch, более приспособленным к современности.
Самый же простой вариант if это просто вызов goto из одной функции в другую. Например func1() => func2()