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

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

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

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

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

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

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

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2013-01-09 08:21 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2013-01-09 08:23 pm (UTC) - Expand

(no subject)

From: [identity profile] sergiej.livejournal.com - Date: 2013-01-09 08:28 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2013-01-09 09:24 pm (UTC) - Expand

(no subject)

From: [identity profile] sergiej.livejournal.com - Date: 2013-01-09 09:39 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2013-01-09 09:41 pm (UTC) - Expand

(no subject)

From: [identity profile] sergiej.livejournal.com - Date: 2013-01-09 09:43 pm (UTC) - Expand

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

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2013-01-10 05:35 am (UTC) - Expand

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


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

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2013-01-09 09:26 pm (UTC) - Expand

(no subject)

From: [identity profile] volodymir-k.livejournal.com - Date: 2013-01-09 09:29 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2013-01-09 09:32 pm (UTC) - Expand

(no subject)

From: [identity profile] volodymir-k.livejournal.com - Date: 2013-01-09 09:35 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2013-01-09 09:40 pm (UTC) - Expand

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

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

(no subject)

From: [identity profile] volodymir-k.livejournal.com - Date: 2013-01-09 09:28 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2013-01-09 09:33 pm (UTC) - Expand

(no subject)

From: [identity profile] veter-r-r.livejournal.com - Date: 2013-01-09 09:32 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2013-01-09 09:32 pm (UTC) - Expand

(no subject)

From: [identity profile] veter-r-r.livejournal.com - Date: 2013-01-09 09:35 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2013-01-09 09:39 pm (UTC) - Expand

(no subject)

From: [identity profile] veter-r-r.livejournal.com - Date: 2013-01-09 09:42 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2013-01-09 09:44 pm (UTC) - Expand

(no subject)

From: [identity profile] veter-r-r.livejournal.com - Date: 2013-01-09 09:46 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2013-01-10 05:59 am (UTC) - Expand

(no subject)

From: [identity profile] veter-r-r.livejournal.com - Date: 2013-01-10 06:38 am (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2013-01-10 06:39 am (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2013-01-10 07:07 am (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2013-01-10 07:11 am (UTC) - Expand

(no subject)

From: [identity profile] berezovsky.livejournal.com - Date: 2013-01-09 09:42 pm (UTC) - Expand

(no subject)

From: [identity profile] veter-r-r.livejournal.com - Date: 2013-01-09 09:43 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2013-01-10 07:05 am (UTC) - Expand

(no subject)

From: [identity profile] veter-r-r.livejournal.com - Date: 2013-01-10 07:19 am (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2013-01-10 07:28 am (UTC) - Expand

(no subject)

From: [identity profile] veter-r-r.livejournal.com - Date: 2013-01-10 07:40 am (UTC) - Expand

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

(no subject)

From: [identity profile] veter-r-r.livejournal.com - Date: 2013-01-09 09:36 pm (UTC) - Expand

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

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

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

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2013-01-09 08:43 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2013-01-09 08:44 pm (UTC) - Expand

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2013-01-10 05:39 am (UTC) - Expand

(no subject)

From: [identity profile] nivanych.livejournal.com - Date: 2013-01-10 05:59 pm (UTC) - Expand

(no subject)

From: [identity profile] nivanych.livejournal.com - Date: 2013-01-10 06:06 pm (UTC) - Expand

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

Date: 2013-01-09 10:35 pm (UTC)
From: [identity profile] jdevelop.livejournal.com
да похуй же, все эти ваши страчи несут выхлоп, стремящийся к нулю
ортурега не переубедишь, что надо типы, вас не переубедишь что они не надо, зачем вы пытаетесь натягивать сов на глобусы?

Date: 2013-01-10 04:58 am (UTC)
From: [identity profile] sdfgh153.livejournal.com
Отказ использовать статическую типизацию хотя бы как способ рассуждения о коде

Ох, ребе, как давно я не слышал этой замечательной фразы «рассуждение о» в отношении кода. Дайте я вас полюбаю!
Это же имено то, что нужно было написать.

Date: 2013-01-10 05:41 am (UTC)
From: [identity profile] thedeemon.livejournal.com
>Отказ использовать статическую типизацию хотя бы как способ рассуждения о коде (если язык не поддерживает ее явно в нужном объеме или это язык с динамической типизацией) мне не понятен в принципе, это примерно как добровольно отказатся от электричества, компьютеров, лекарств и пойти жить в землянки и жрать грязные корни.

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


+14521
В рамочку и на стенку.

Date: 2013-01-10 06:00 am (UTC)
From: [identity profile] artureg.livejournal.com
а своего мнения у вас нет, только с рамочек?

Date: 2013-01-10 06:05 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Есть и даже записано:
http://thedeemon.livejournal.com/54732.html

Но вы ж читать вряд ли умеете...

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2013-01-10 06:07 am (UTC) - Expand

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2013-01-10 06:29 am (UTC) - Expand

Date: 2013-01-10 11:06 am (UTC)
From: [identity profile] norian.livejournal.com
статическая позволяет отловить многие ошибки при компиляции, плюс меньше оверхед на проверки совместимости типов в рантайме

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

Date: 2013-01-10 11:22 am (UTC)
From: [identity profile] metaclass.livejournal.com
Да. Но вот товарищи в лице артурега и айседа не желают с этим соглашаться :)

Date: 2013-01-10 11:23 am (UTC)
From: [identity profile] vp.livejournal.com
Вот когда у тебя приложения будут состоять из трех формочек ввода фамилии, имении с общим числом строк кода в 200, тогда ты их поймешь !

Date: 2013-01-10 11:51 am (UTC)
From: [identity profile] vit-r.livejournal.com
либо устанавливать некое "значение-по-умолчанию", которое потом не отличишь от такого же значения, но введенного явно.

Эта техника называется "заметём ошибки под ковёр". Очень эффективна для создания кривого софта, когда пользователь, разделив пирог на три части, получает одну из долей в 140%. Главное, что он не знает, отчего так происходит, и проникается к программистам мистическим благоговением.

Date: 2013-01-10 02:09 pm (UTC)
From: [identity profile] thinker8086.livejournal.com
>> Я пытаюсь особо не айседствовать

>> это примерно как добровольно отказатся от электричества, компьютеров, лекарств и пойти жить в землянки и жрать грязные корни.

Ребе не айседствует, ребе культурный, да.

Date: 2013-01-10 03:23 pm (UTC)
From: [identity profile] r-yankovsky.livejournal.com
Повышению полезности программного компонента, такого как библиотечная процедура или структура данных, способствует его разработка не в терминах конкретных типов, а в терминах требований к типам, выраженных как синтаксические и семантические свойства. ("Начала программирования". Степанов, Мак-Джоунс)

Date: 2013-01-10 03:39 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Требования к типам (а иногда и частично реализацию) можно оформить в виде трейтов/тайпклассов/интерфейсов), некоторые - в виде пре- и пост-условий.
Но для любителей отсутствия типов это вообще будет высший пилотаж и академическая наука.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 6th, 2025 10:39 am
Powered by Dreamwidth Studios