о программировании

Feb 11, 2011 15:30

Читаю исходные коды, написаные другими программистами, и понимаю, что в образовательных целях и для привития хорошего стиля в программировании надо просто заставлять людей какое-то время писать на функциональных языках.

Иначе они даже в OO модели пишут классический спагетти код - с сайд эффектами, с использованием переменных класса в качестве ( Read more... )

it

Leave a comment

Comments 28

smbatgogyan February 11 2011, 11:47:49 UTC
Urish lezu petq chi, menak C++ heriq e

Reply

nm_work February 11 2011, 17:07:41 UTC
C++ редчайшее уродство :))))

городить огромный и сложный огород, только из-за того, что язык не поддерживает динамическую типизацию и еще много вкусностей языков более высокого уровня? неее. нафиг-нафиг такие оладушки :)

Reply

smbatgogyan February 11 2011, 21:20:50 UTC
esim, achqis sirum es fast food :-D

Reply

ex_norayr February 14 2011, 09:47:49 UTC
ապ, եթե դու չես սիրում, ապա ինչու C++ օրինակ բերեցիր, ու ոչ C-ն։ կամ ոչ ասմը։

Reply


narjan February 11 2011, 12:15:49 UTC
// во-первых от того, что пишущий никогда не задается вопросом - а как я могу красиво вернуть сразу _несколько_ результатов из функции //

ne sip' mne sol' na rani
ya vot javu nenavizhu, za to chto v ney netu daje tuple-ov. Prichem netu ne potomuchto nedodelali, a potomu chto chey to krivoy mozg reshil, chto eto protivorechit idee OOP

ksta, v matlab e ochen' krasivo

[ a b c ] = foo()

gde a, b, c kakie ugodno lhs statementi

Reply

nm_work February 11 2011, 17:10:39 UTC
я не был бы рад, если бы lhs были бы именно statements :) а вот просто переменные - да, отлично :)

мозг правильно решил - tuples противоречат идеет OOP :))))) и язык начинает походить на что-то функциональное сразу.

насчет офигительно мощной типизации, наследовании и полиморфизме - можно посмотреть haskell, там очень красивая и на порядок более мощная система :) которая еще ко всему плюс ложится в функциональную модель нормально :)

Reply


gasparian February 11 2011, 14:32:53 UTC
> не задается вопросом - а как я могу красиво вернуть сразу _несколько_

а $result = $this->validate( $data );

где $data передается по ссылке, не вариант?

Reply

nm_work February 11 2011, 17:05:16 UTC
я бы постарался этого бы не делать - потому что ты тоже создаешь side effect - меняешь данные, которые тебе передали.

т.е. 3 раза подряд вызвать эту функцию и получить одинаковые результаты - не получится.

для упрощения структуры программы лучше никогда не рассматривать возможность менять входные аргументы функции.

Reply

nm_work February 11 2011, 17:16:50 UTC
т.е. я считаю передачу данных в функцию по reference костылем, который вынужденно используют, так как VM не может минимизировать копирование данных при возврате их в отдельном аргументе. т.е. это вопрос, который лечится внутри VM и не должен контролироваться программистом :)

Reply

gasparian February 11 2011, 20:45:24 UTC
> так как VM не может минимизировать копирование данных при возврате их в отдельном аргументе

на самом деле я довольно долго и нудно отстаивал свою точку зрения на счет НЕ реализации "передачи по ссылке" аргументов при удаленном вызове (подобие RPC для собственного маршалинга), но всегда наталкивался на непонимание со стороны C++ -истов.

а на счет минимизации при копировании, то задача, по крайней мере для C++, решается упаковкой tuple-объекта в оболочку из смарт-поинтера с референс-каунтером.

Reply


levgem February 15 2011, 17:01:09 UTC
У тебя не очень хороший пример по той причине, что ты немного спутал уровни на которых используется validate

Поясню (с некоторыми отхождениями от действительности) на примере того, откуда эти валидации появились в PHP: на рельсах.

В модуле ActiveModel::Validation есть функция get_validation_errors Она то вполне себе немодифицирующая, возвращает список ошибок.

А вот метод validate на объекте очень даже должен быть модифицирующим, потому что это посылка командного слова уровня бизнес-логики: поменяй своё состояние. Это нужно, потому что именно так устроена концепция MVC: контроллер посылает командные слова объектам уровня модели, что бы потом их рендерить во view.

Ты же предлагаешь порождать отдельный объект, который не существует в исходной доменной области, тем самым наводняя уровень M служебным кодом. Т.е. как раз спагетти-код.

Reply

nm_work February 15 2011, 18:04:15 UTC
эээээээ. опять таки. такой подход наверно имеет право на жизнь ( ... )

Reply

ext_344899 February 16 2011, 15:41:39 UTC
Ну, если запретим сайд эффекты, сделаем переменные иммутабельными, потом будем со всякими монадами маяться и заново учиться имплементить стандартные структуры данных. Мне кажется, эти меры слишком радикальны только и мешают программисту. Код отлаживать легче, не спорю, ведь о purely functional программе гораздо легче делать логические умозаключения. Но в процессе написания чувствуешь себя закованным в кандалы.

Наверное, надо просто найти золотую середину и придерживаться ее. Ну и, конечно, читать маны отладчика :)

Reply

nm_work February 16 2011, 18:32:23 UTC
:)))))

понятно :) я смотрю с точки зрения целесообразности бизнеса и получения конечного продукта -- и пофиг на чем писать, лишь бы получать работающий код _быстро_. и скорость реализации здесь существенно важнее производительности программы или аппаратхынх требований :)

ты смотришь с точки зрения программиста - 'как бы так красиво разойтись и сделать Архитектуру' :))))

поэтому и разные точки зрения :)

Reply


Leave a comment

Up