dz (dz) wrote,
dz
dz

функции, рождающие классы

Здравствуй, мой необъектный друг. Я, наверное, уже тебя задолбал своими письмами программистам. Извини. Следующее - под катом, чтобы не смущать нормальных людей странными текстами. :)


Мне тут, опять же, в комментах выкатили, что определение "каждая функция порождает класс" неконструктивно, абстрактно, и не радует глаз функционального программиста. Ну, радовать глаз я не нанимался, а в остальном отвечу. Ни фи га. Очень конструктивно и конкретно. Давайте посмотрим, какой же ИМЕННО класс порождает функция. (Смотрите - я даже методом её не называю, вот как я бережно к вам отношусь!:)

Давайте рассмотрим функцию, которая передвигает свой аргумент 1 в позицию аргумента 2:

void f(w, x) { w.x = x; }
ну или для фп это будет функция, которая вернёт новый инстанс w такой, что в нём какая-то хрень, хранящая функцию для вычисления x, будет заменена на новую, которую передали в параметре x. это, в данном случае, монофигственно.

какой же такой класс она вводит? Ох, какой-то странный абстрактный непонятный, да? Чёрт, ни фига не вкуриваю, что ж за такой класс. Глупый какой-то. Никому не нужный вредный странный класс. Э. Или нет? Ой. Да это же класс "объекты, имеющие координату x". Типа, любые, какие спозиционированы в некотором, по крайней мере, одномерном пространстве. Странно, да? Неожиданно как-то. И куда ж такие годятся? Ох, чёрт - да это ж всякие окна, кнопки, виджеты... Или типа объекты на игровом поле - ну, то есть, вроде, вполне понятные вещи.

Если добавить y и z, то получается и вообще понятный класс - совершенно осмысленный класс "объекты, имеющие координаты в трёхмерном пространстве".

Это потому, что функция вводит класс не абы как - вот тут я такая родилась, и какой-то класс ввела, а какой - неясно. Она вводит класс в силу факта взаимодействия со свойствами своих аргументов. Функция требует аргументов x, y и z, и ТРАКТУЕТ их как координаты объекта. Тем самым фактом она вводит - требует от нас - наличия класса объектов "объекты с координатами в трёхмерном пространстве", коий совершенно конкретен и осмыслен.

Требует в силу СМЫСЛА производимого ей действия. Не абстрактно, а совершенно конкретно. Если вы хотите иметь функцию "двигать шкафы", то уже помыслив (!) это желание вы определили класс "шкафы" и уточнили, что они обладают свойством "быть двигаемыми", к коему ваша функция и будет аппелировать в процессе работы.

А реализовать его можно и функционально тоже, это да. И даже к-мерно. О, тема: к-мерный конь в вакууме.
 
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 17 comments