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] 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] volodymir-k.livejournal.com 2013-01-09 09:28 pm (UTC)(link)
ну 6, сильно другой ответ?

[identity profile] artureg.livejournal.com 2013-01-09 09:33 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] veter-r-r.livejournal.com 2013-01-09 09:35 pm (UTC)(link)
строка, число, массив, булеан, объект, собственно нулл и ундефайнед.
При этом считать нулл и ундефайнед полноценными типами мне лично странно.

[identity profile] artureg.livejournal.com 2013-01-09 09:39 pm (UTC)(link)
а объект это тип? а
var s = "asdsa"; var s = new String("asdsa") в чём разница?

так сколько в граммах? 4 - 5 - 6? а infinity это что?

[identity profile] veter-r-r.livejournal.com 2013-01-09 09:42 pm (UTC)(link)
Объект это тип. Прикинь.

Разница в том, что у первой s тип будет строка, а у второй s будет объект. Прикинь.
Кстати, в курсе, какой тип будет у null? хотя null это тип!

А инфинити как и нан это ЗНАЧЕНИЯ типа number.
Ты еще спроси что такое 0 1 2 и 3

[identity profile] artureg.livejournal.com 2013-01-09 09:44 pm (UTC)(link)
итого сколько в жс типов?)

[identity profile] veter-r-r.livejournal.com 2013-01-09 09:46 pm (UTC)(link)
Семь.

А зачем тебе это нужно знать?
Edited 2013-01-10 04:51 (UTC)

[identity profile] artureg.livejournal.com 2013-01-10 05:59 am (UTC)(link)
так сколько, ветер, ты определись?) И заменить в самом начале разговора я тебе предостерегал)

[identity profile] artureg.livejournal.com 2013-01-10 06:39 am (UTC)(link)
чота ржу)

[identity profile] metaclass.livejournal.com 2013-01-10 07:07 am (UTC)(link)
В вашем жабоскрипте ужас :)
В обычных языках строка является субтипом объекта, а в js?

[identity profile] artureg.livejournal.com 2013-01-10 07:11 am (UTC)(link)
ветер правильно ответил, в первом случае тайпоф вернйт стринг во втором обжект

[identity profile] berezovsky.livejournal.com 2013-01-09 09:42 pm (UTC)(link)
а наны всякие - это что?

[identity profile] veter-r-r.livejournal.com 2013-01-09 09:43 pm (UTC)(link)
Просто значения. Как 1, 2, 3

[identity profile] metaclass.livejournal.com 2013-01-10 07:05 am (UTC)(link)
Кстати, в скале подобного рода значения имеют свои типы - http://www.scala-lang.org/api/current/scala/Null.html
Это не странно, вместе с наследованием и совместимостью null с любыми ссылками - система типов получается весьма красивой.

[identity profile] veter-r-r.livejournal.com 2013-01-10 07:19 am (UTC)(link)
Значит в джаваскрипте красивая система типов? :)

[identity profile] metaclass.livejournal.com 2013-01-10 07:28 am (UTC)(link)
См. выше про строки и объекты. Зачем так жить?

[identity profile] veter-r-r.livejournal.com 2013-01-10 07:40 am (UTC)(link)
Ребе, я вам больше скажу, если взять typeof от того, что в джаваскрипте называется null, он вернет... "object"!

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

[identity profile] veter-r-r.livejournal.com 2013-01-09 09:36 pm (UTC)(link)
Ну там вообще поток сознания ребе М. пополам с пауками и жабами, вырванный из какого-то контекста, о котором знают только участники спора. Но суть в целом такая, что ребе А. тупой и не лечится, а ребе М. в белом пальто стоит красивый. А рядом стоит ребе айсед и ржет над обоими.
А тема в принципе не важна :)))