Жизнь внутри метода

Oct 24, 2008 20:32

Весьма мудрое на RSDNОсновная мысль: большая часть новых парадигм и веяний в программировании -- изменяют структуру программы на "высоком" уровне (вводятся новые единицы структурирования и новые взаимодействия между ними), в то время как на уровне отдельных методов все те же "операторы цикла"/"операторы ветвления" (ррррр, да, я школьный учитель ( Read more... )

тезисы, мелочи, программистское

Leave a comment

Comments 10

orangyk October 24 2008, 19:40:15 UTC
"ровно 1 expression, выполняющий заданное действие"

Expression - это выражение. А теперь помотай головой, и отвлекись от привычного понимания слово "выражение" :)

По-моему так будет еще идеальнее:
"ровно 1 конструкция, выражающая заданное действие"

Reply

zverok_kha October 24 2008, 20:02:39 UTC
Не совсем понимаю о чем ты. Expression - это все же термин, и в этом смысле я и применил это слово.

А вот "ровно 1 конструкция" - формулировка спорная. something.sort_by{blah}.reject{blah}.map{blah}.first - это сколько конструкций? (учитывая, что в каждом blah может быть еще несколько "точек" - вызовов методов). А expression вроде как один (если я не путаю значение термина).

Reply

orangyk October 24 2008, 20:19:37 UTC
Да нет, я не о терминологии и её точности, я об изначальном смысле того, что теперь все привычно называют "expression" в смысле EBNF.

Reply

zverok_kha October 24 2008, 20:25:44 UTC
Ну, может быть. Хотя не могу твердо заявить, что я тебя понял.

Reply


kurilka October 25 2008, 16:11:41 UTC
Ммм, тогда в хаскеле чот многовато идеальных методов получается :)

Reply


kodt_rsdn October 27 2008, 20:39:52 UTC
Насчёт того, что switch плохо пахнет...
Тут дело в том, что каждое ветвление относится к некоторому подмножеству входных данных, то есть, к субтипу. А поскольку количество субтипов прибито количеством веток в свитче, получаем хреновое масштабирование.

Путь ООП - в том, чтобы протащить выбор в таком свитче как свойство субтипа. Которое реализуется как виртуальный метод. Путь ФП - там, где это свойство используется многократно, протащить функцию рядом с данными. (Оно же - паттерн Посетитель ( ... )

Reply

zverok_kha October 28 2008, 09:12:39 UTC
Да, это вполне точный анализ. Мой пойнт был не в "switch > полиморфизм" (знак "больше" - в смысле "лучше, правильнее, полезнее"), а в "switch > if" - поскольку является более регулярной структурой; и самое смешное, чисто визуально он мне приятнее - в смысле группировки условие-действие. И в этом смысле Руби, хотя и не имеет полноценного ПМ, своим switch'ем выгодно отличается от C++ - как "всеядностью условий", так и, будешь смеяться, отсутсвием break (что мне до сих пор кажется одним из самых больших идиотизмов дизайна C).

Но, кстати говоря, насколько я понимаю, ПМ бывает не только "switch'ем на стероидах", но и средством организации полиморфизма (напр., в Эрланге, где условия на аргументы метода накладываются именно средствами ПМ).

Reply

kodt_rsdn October 28 2008, 09:18:39 UTC
Ну, break внутри сишного свитча - это тяжёлое наследие макроассемблера для PDP :)
Вся польза от его (отсутствия) - вариации на тему Duff's device. Спагетти по-итальянски, с мясом индусских священных коров.

Reply

zverok_kha October 28 2008, 10:00:04 UTC
Да, откуда он взялся - я вполне понимаю. Просто недавно заново переосмыслял эти вопросы (результат - этот пост, но мысли про "што такое switch" бродили и до сообщения IT). И подумал, что в большой степени "switch=плохо", закрепленное в мейнстриме - следствие "плохого" switch'а в С/С++ (кстати, а в Java/C# break бережно сохранили? а по каким типам/условиям там можно swithc'иться?). Собственно, про это и написано: "за глобальные принципы часто принимают нечто, исходящее из свойств конкретного языка"

Reply


Leave a comment

Up