metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2013-01-09 10:14 pm
Entry tags:

reference types vs value types

Очередной раз посрались с артурегом за типизацию. Его огорчает существование value-types (или примитивных типов в жабе) из-за того, что они накладывают более жесткие ограничения на получение значений этих типов извне.
Например при загрузке из БД с полем, разрешающим null - придется либо сдыхать с исключением, либо устанавливать некое "значение-по-умолчанию", которое потом не отличишь от такого же значения, но введенного явно.
По моему - это какие-то проблемы, не то уровня начинающих, а вообще детсадовские, т.е. проблемы реально не существует.
Либо предметная область разрешает "отсутствие данных" и мы таскаем всюду Option[T] или жабьи объектные врапперы или C# Nullable<T>, либо предметная область разрешает использовать некое значение по умолчанию и нам его отличать от отсутствия данных не нужно, либо данные обязаны присутствовать и мы таскаем value-type, в базе делаем поле not null и в прочих протоколах делаем поле обязательным и дохнем с исключением (возвращаем код ошибки) при его отсутствии.
Если требования не зафиксированы заранее - пользуемся логикой и выбираем один из трех вышеописанных вариантов. Если требования в процессе разработки меняются - рефакторим. Если требования противоречивы - доводим до заинтересованных лиц и дальше либо делаем требования непротиворечивыми, либо ослабляем строгость ограничений (убираем not null и рефакторим все из value-types в reference-types или Option[T]/Nullable<T>)

Артурег же упорно пытается превратить нормальную типизацию в ад жабаскрипта, минимизируя ограничения на хранимые значения. Но даже в этом случае можно оставить часть ограничений и гарантировать, что код не сломается и не будет вести себя непредсказуемо. Достаточно просто иметь представление о областях определения функций и ввести некие вменяемые правила поведения в случае, если значение выходит за область определения.

Я пытаюсь особо не айседствовать и прислушиваться к мнению людей, но в последнее время это разведение проблем на пустом месте от незнания простейших вещей начинает чрезвычайно раздражать.
Отказ использовать статическую типизацию хотя бы как способ рассуждения о коде (если язык не поддерживает ее явно в нужном объеме или это язык с динамической типизацией) мне не понятен в принципе, это примерно как добровольно отказатся от электричества, компьютеров, лекарств и пойти жить в землянки и жрать грязные корни.

Причем даже использование языков с динамической типизацией ничего не меняет - оно всего лишь перекладывает рассуждения о коде с компилятора-тайп-чекера на программиста и дает возможность описывать более сложные типы меньшим количеством кода.

[identity profile] sergiej.livejournal.com 2013-01-09 07:35 pm (UTC)(link)
Полнотью согласен. Детсадовские проблемы или лень.
Если не хватает типов - создавай свои. В конце концов создай себе объектные типы для каждого примитива и работай с ними, ну или создай тип, который будет мегауниверсальный само-де-нуллующийся само-нормальзующийся итп как тебе нужно и его таскай куда хочешь.
Печаль в жабе скорее в том, что разный подход к типам и быдлокодеры херачат чего хотят ели их вовремя по рукам не лупасить.

[identity profile] artureg.livejournal.com 2013-01-09 07:53 pm (UTC)(link)
страна эльфов, вас бы за жабры да носом в говно, писаное 50 рылами на протяжении десяти лет. Вы бы там конечно написали переписали и свои типы, и свою архитектуру и свою структуру БД с констреинтами и индексами

[identity profile] sergiej.livejournal.com 2013-01-09 08:08 pm (UTC)(link)
Молодой человек, я какбе работаю с системами, которым уже десятки лет, и писаны они тысячами рыл со всего мира. И основные проблемы там не в наличии/отсутствии чего-то в жабе, а в кривых руках и тупых головах при использовании данных обезьянкам инструментов.
A fool with a too is still a fool. Жаба тут ни при чём. Хотя нет, немного виновата тем, что она настолько проста, что выловленный на улице рандомный индус может творить на ней говнокод через неделю подсматривания за коллегой.

[identity profile] theiced.livejournal.com 2013-01-09 08:20 pm (UTC)(link)
типизация тут не причём же!

[identity profile] theiced.livejournal.com 2013-01-09 08:21 pm (UTC)(link)
s/индус/ортурег/

[identity profile] artureg.livejournal.com 2013-01-09 08:23 pm (UTC)(link)
вы б сперва читать научились, молодой человек.

[identity profile] artureg.livejournal.com 2013-01-09 08:23 pm (UTC)(link)
даже айседы понимают

[identity profile] sergiej.livejournal.com 2013-01-09 08:28 pm (UTC)(link)
Что я не так прочитал?

[identity profile] metaclass.livejournal.com 2013-01-09 08:30 pm (UTC)(link)
Как раз причем. Она является способом мышления :)

[identity profile] theiced.livejournal.com 2013-01-09 08:34 pm (UTC)(link)
хуёвым

[identity profile] metaclass.livejournal.com 2013-01-09 08:43 pm (UTC)(link)
Почему?

[identity profile] theiced.livejournal.com 2013-01-09 08:44 pm (UTC)(link)
потому что не надо думать о типизации

[identity profile] victor bolshakov (from livejournal.com) 2013-01-09 09:14 pm (UTC)(link)
Ну свобода выбора работы гарантирована конституцией :)

[identity profile] veter-r-r.livejournal.com 2013-01-09 09:21 pm (UTC)(link)
Я наверное глупость скажу, но по-моему ребе М. наоборот жалуется на то, что ребе А. не не хватает типов, а наоборот типов слишком много, ему бы как в жабаскрипте пять типов и undefined и то многовато уже будет..

[identity profile] artureg.livejournal.com 2013-01-09 09:23 pm (UTC)(link)
в жс пять типов?) не позорься ну

[identity profile] artureg.livejournal.com 2013-01-09 09:24 pm (UTC)(link)
видимо мой ответ, так как ваш с ним никак не коррелирует.

[identity profile] volodymir-k.livejournal.com 2013-01-09 09:25 pm (UTC)(link)
эльф -- это существо, которое верит, будто 50 рыл за 10 лет написали плохой код ТОЛЬКО из-за наличии в языке одной фичи. "А вот не было бы этой фичи..." -- так использовалась бы другая.


Я например как-то сел и 2 дня потратил на тупейшее убирание ~80 копипаст кусков. Да, неприятно, да я постоянно матерился вполголоса, но мне за это и платят деньги. Не нравится проект -- так и скажите своему менеджеру, ищите другой. Если вы не раб, прикованный цепями к стене, найти обычно удаётся.

[identity profile] artureg.livejournal.com 2013-01-09 09:26 pm (UTC)(link)
ой, ещё эльф

[identity profile] volodymir-k.livejournal.com 2013-01-09 09:28 pm (UTC)(link)
ну 6, сильно другой ответ?

[identity profile] volodymir-k.livejournal.com 2013-01-09 09:29 pm (UTC)(link)
вы не способны вести предметный разговор -- ок, его не будет

никогда

[identity profile] veter-r-r.livejournal.com 2013-01-09 09:32 pm (UTC)(link)
Ну нулл не посчитал, ну да и хер с ним.

[identity profile] artureg.livejournal.com 2013-01-09 09:32 pm (UTC)(link)
ну научитесь сперва читать не между строк.

[identity profile] artureg.livejournal.com 2013-01-09 09:32 pm (UTC)(link)
ой вэй, перечисли)

[identity profile] vaddimka.livejournal.com 2013-01-09 09:33 pm (UTC)(link)
по-моему, это проблема модели, из каких там POD'ов (или не POD'ов) оно там состоит, как сериализуется и т.п.
типы - это суть контракты и важны они уже на стыке модели с другими объектами
соответственно, типы по-настоящему важны только во время взаимодействия модели с другим объектом и зависят от конкретного алгоритма взаимодействия
на мой взгляд, мыслить удобнее именно взаимодействиями объектов, а не их составных частей

[identity profile] sergiej.livejournal.com 2013-01-09 09:33 pm (UTC)(link)
Ну тогда я это совсем не так понял.
Но и на этот случай - ничто не мешает настоящему самураю сделать свои пять типов, все в них завернуть и юзать до потери пульса. Правда тогда начнётся настоящий ад, все начнут рожать мегаконстукции чтобы тягать метаданные о типах вместе с переменными итп.

Page 1 of 3