- 1
- 2
if (optional != null && optional.isPresent()) {
...
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+78
if (optional != null && optional.isPresent()) {
...
pushistayapodmyshka 08.06.2015 07:46 # 0
kegdan 08.06.2015 08:06 # 0
pushistayapodmyshka 08.06.2015 08:15 # +1
Ну и чё не так с этим кодом, если жаба всё-таки не проверяет второе условие в случае фейла первого?
kegdan 08.06.2015 08:17 # +1
dreamer 08.06.2015 08:49 # 0
на C#
kegdan 08.06.2015 09:10 # 0
soundwave-1337 15.07.2015 04:36 # 0
bormand 08.06.2015 09:17 # +2
3_14dar 08.06.2015 09:49 # −1
bormand 08.06.2015 10:30 # +3
1) нулл
2) флажок в объекте
Имхо, надо что-то одно оставить.
3_14dar 08.06.2015 11:21 # −1
kegdan 08.06.2015 09:51 # 0
stasmarkin 08.06.2015 11:15 # +1
Тут ГК на тему "пофантазируйте, каким надо быть уебаном, чтобы в переменную Optional<?> optional поставить null". Например, выше по коду что-то вроде
Optional<?> optional = someShit();
...
@Nullable
private Optional<?> someShit() { ... }
Или такое, например:
Optional<?> optional = rndBoolean() ? null : Optional.empty();
3_14dar 08.06.2015 11:22 # 0
kegdan 08.06.2015 11:32 # 0
По сути - патерн special case для valueType
3_14dar 08.06.2015 13:10 # +1
как и в null
kegdan 08.06.2015 14:32 # 0
3_14dar 08.06.2015 14:46 # 0
kegdan 08.06.2015 14:56 # 0
valueType -> значение -> содержать -> всегда. Всегда.
Ты наверное переутомился, хочешь банан?
3_14dar 08.06.2015 16:05 # 0
Throws:
NoSuchElementException - if there is no value present
kegdan 08.06.2015 16:12 # 0
Class OptionalInt
а класс не вельютайп ну ни как
3_14dar 08.06.2015 16:18 # 0
kegdan 08.06.2015 16:24 # 0
>> вельютайп
>> По русски говорить научись, блядина.value type.
Чет я не помню таких русских букв.
>> Примитивный тип?
Еще на хохлятский переведи устоявшийся термин
Можно еще с греческого перевести
Хроника - временица
Ипподром - конебежка
Библия - книга
Хотя у вас такой бред практиковался после оранжевой революции.
3_14dar 08.06.2015 16:29 # 0
>Хотя у вас такой бред практиковался после оранжевой революции.
Откуда ты знаешь, ты тогда не в детсад ходил случайно?
kegdan 08.06.2015 16:32 # 0
Страшен не ты, Сема, страшно то, что тебя породило
3_14dar 08.06.2015 16:33 # 0
greenx 08.06.2015 16:33 # −1
3_14dar 08.06.2015 17:05 # 0
roman-kashitsyn 08.06.2015 15:07 # 0
kegdan 08.06.2015 15:09 # 0
roman-kashitsyn 08.06.2015 14:22 # 0
Если чего-то может и не быть, Optional<T> в типе скажет всё без аннотаций и излишней документации. И компилятор заставит тебя делать дополнительный шаг (get()), прежде чем ты обратишься к значению.
bormand 08.06.2015 14:36 # 0
roman-kashitsyn 08.06.2015 14:47 # 0
3_14dar 08.06.2015 14:46 # −1
roman-kashitsyn 08.06.2015 14:52 # +2
При правильном использовании в Optional не будет пустых ссылок. Например, в Optional есть метод-конструктор fromNullable, который автоматом конвертирует null в nothing.
Если ты дереференсишь Optional без проверки - ССЗБ, тебя предупреждали.
kegdan 08.06.2015 15:01 # 0
3_14dar 08.06.2015 16:07 # 0
roman-kashitsyn 08.06.2015 16:36 # 0
Например, у Map есть метод ValueType get(KeyType). Если ключа нет, что будет? Надо читать доку. Пистон в похожей ситуации кидает KeyError (если рассматривать его оператор [] а не метод get()), жаба возвращает null. Если бы сигнатура была Optional<ValueType> get(KeyType), то подобных вопросов не возникло бы. Особенно это приятно при ревью кода. Сразу видно, что может пойти не так, и где автор кода схалтурил на проверках.
В функциональных языках есть удобные функции, позволяющие вместо унылых проверок isPresent() использовать более компактные варианты с map/flatMap, ориентируясь на положительный кейс, но для жабы версии <8, где нет нормальных лямбд, это не аргумент.
3_14dar 08.06.2015 16:39 # 0
Или навести указатель на имя функции?
Так это единственный плюс? "Сразу видно"?
roman-kashitsyn 08.06.2015 16:40 # +1
В вебе? Ты в код-ревью хоть раз участвовал?
Когда уже вы, идеёбы, вылезете из своего уютного мирка и поймёте, что код нужно уметь нормально писать и читать без IDE?
3_14dar 08.06.2015 16:43 # −1
А он тоьлко в вебе?
>Когда уже вы, идеёбы, вылезете из своего уютного мирка и поймёте, что код нужно уметь нормально писать и читать без IDE?
Но для этого надо выкинуть жаву нахуй. Что ж ты, жаваеб, тогда делать будешь?
roman-kashitsyn 08.06.2015 16:48 # 0
Так участвовал или нет? Какой инструмент ты использовал? Все более-менее вменяемые и популярные инструменты веб-ориентированы. Crucible, GitHub, Gerrit, Differential, ReviewBoard.
> Но для этого надо выкинуть жаву нахуй.
Ты удивишься, но я могу неплохо писать на жабе и не только на жабе без IDE.
3_14dar 08.06.2015 16:50 # −1
>Ты удивишься, но я могу неплохо писать на жабе и не только на жабе без IDE.
Я тоже хелловерд могу сбацать, но без ide жава сосет у динамических языков, а с иде - они сосут на среднекрупных проектах. Своим умением писать на жаве без ide ты в лучшем случае на проезд заработаешь.
bormand 08.06.2015 16:57 # +5
А динамические языки сосут хоть с иде хоть без иде. Доказано весёлой отладкой чужого серверного кода на пистоне.
3_14dar 08.06.2015 16:58 # −1
bormand 08.06.2015 17:00 # 0
За 5 секунд пишешь проги?
roman-kashitsyn 08.06.2015 17:00 # +1
Рабочая ровно до той ветки, в которой опечатка.
3_14dar 08.06.2015 17:04 # −1
kegdan 08.06.2015 18:38 # +1
3_14dar 08.06.2015 17:01 # −1
bormand 08.06.2015 17:11 # +5
А я только что написал в голове операционную систему, компилятор, социальную сеть и 3d игру.
3_14dar 08.06.2015 17:50 # 0
kegdan 08.06.2015 18:41 # 0
Динамически языки - для мелкой питушни - типа юзерскриптов - навалил и забыл
3_14dar 10.06.2015 11:31 # −1
Еще один. Кто тебе сука сказал что я больше ничего не осилил? Просто падсибя он удобнее языков со статической типизацией. О, да ты сам это и написал.
kegdan 08.06.2015 18:39 # 0
roman-kashitsyn 08.06.2015 16:57 # +1
Я уже всё написал, если непонятно, перечитай ещё раз.
Придумали для того, чтобы снизить вероятность случайно натолкнуться на NPE. Чтобы код, который может ничего не вернуть, декларировал эту возможность явно. Т.к. явное лучше неявного, import this. Проверку на null легко забыть. Проверка содержимого Optional естественна, её необходимость видна без всякого null-анализа.
3_14dar 08.06.2015 17:02 # −1
roman-kashitsyn 08.06.2015 17:08 # −1
Optional не может предотвратить обращение к несуществующим элементам, он просто делает вероятность случайной ошибки меньше за счёт введения дополнительного типа-контейнера.
bormand 08.06.2015 17:10 # +1
1024-- 08.06.2015 17:44 # 0
bormand 08.06.2015 17:46 # 0
А NPE в жабе стараются избегать, по возможности, не юзая null. Т.е. если возвращаешь массив - просто верни пустой массив. Если значение или null - можешь вернуть optional. и т.п.
3_14dar 08.06.2015 18:01 # −1
Так никто мне не ответил чем лучше optional, кроме того, что не надо лезть в доки без ide.
1024-- 08.06.2015 18:06 # 0
> Причём сразу известно, какое именно. А не null/undefined/false/0.
Что значит "какое именно"? Там можно задавать своё значение по умолчанию? Вроде бы не я такого видел, если только не наследоваться от этого. Или это про orElse?
> да и забыть не получится, ибо оно в x без get()'а не кастанётся
Подождём появления на ГК отрывков кода, где будут использовать get без проверок.
В общем, из-за orElse и подобных методов фича полезна, а в остальных случаях только усложнит код всякими Optional<pitux> и теми же проверками на null внутри Optional и становится чем-то похожим на принципиально разные undefined и null в жс. Только до двух пустых значений в жс додумались за неделю, а в жабе - за несколько лет.
3_14dar 08.06.2015 18:07 # −1
Ну, бля, а я о чем? Пока что это тот же null вид сбоку. Кстати а зачем в js джва типа null?
1024-- 08.06.2015 18:13 # 0
3_14dar 08.06.2015 18:17 # −1
1024-- 08.06.2015 18:27 # 0
Но если null выпилить, будет только лучше.
roman-kashitsyn 08.06.2015 18:30 # 0
Вот два куска кода: Где проще разглядеть потенциальную ошибку? Где проще её допустить при первом написании?
1024-- 08.06.2015 18:41 # 0
В примере, что в первой части, что во второй так же просто/сложно разглядеть/допустить ошибку.
Сначала программисты тренировались писать != null, теперь придётся чуть изменить написание. Но суть не изменилась, разве что IDE стала что-то подсказывать.
roman-kashitsyn 08.06.2015 18:52 # 0
Пока всё же складывается 2 лагеря - статическая типизация vs динамика.
Приверженцы динамики не понимают усложения, т.к. они не привыкли, что есть компилятор, который проверяет типы, что можно проектировать код так, что структура программы сама мешает тебе допускать ошибки. А запомнить один универсальный == null проще, чем париться с какими-то дополнительными проверками.
Рекомендую смотреть видео Yaron Minsky, квинтэссенция неплохой книжки Real World Ocaml, полезной даже тем, кто не собирается писать на Ocaml Сёме разрешается не смотреть - видео на английском.
1024-- 08.06.2015 19:10 # 0
Мы привыкли, что если вместо объекта типа X поставить Y, то это обнаружится на этапе запуска. Любители статической типизации узнают это на этапе компиляции.
Но тут два механизма позволяют делать одно и то же: хранить либо пустоту, либо значение. В обоих случаях нельзя подставить X вместо Y, в обоих случаях можно положить null вместо значения, оба механизма ведут себя как Maybe.
Пока что мне удалось услышать про намеренный возврат null. То есть это типизация в головах поддерживаемая компилятором? Как говорил Борманд, программисты избегают null, из-за чего у них X - значение, никогда не null (потому, что программист так решил; как константы в питоне), а Optional<X> - значение, иногда null, что проверяется на этапе компиляции.
roman-kashitsyn 08.06.2015 19:20 # 0
Optional - дополнительное напоминание. Мне лично нравится, когда код сам напоминает мне об ошибках. До тех пор, пока это не Checked Exceptions.
guest 09.06.2015 01:45 # 0
3_14dar 09.06.2015 02:29 # −1
3_14dar 09.06.2015 02:28 # −1
3_14dar 09.06.2015 02:26 # −1
3_14dar 09.06.2015 02:27 # −1
Если это какая-то то банальность разжеванная 100 раз на русском в письменном виде - действительно, нах?
wvxvw 10.06.2015 00:51 # 0
Например, Шен, язык в котором проверку типов можно включить или выключить во время выполнения програмы. Каким языком его считать? Система типов в Шене примерно такая же по выразительности / количеству инструментов как и в МЛ-подобных языках.
От того, что в Си типы проверяются на этапе компиляции никто не даст никаких гарантий по поводу правильности типов. При желании указатель одного типа можно привести к какому угодно другому типу, и получить ошибку типизации.
Что интересно, при этом, в языках без типов, например в Форте, получить ошибку типизации нет возможности.
В языках логического програмирования, как правило от системы типов в том понимании в котором она присутствует в МЛ-подобных языках нет толку, т.как сами языки как правило могут лучше выразить то, что должна выразить традиционная система типов. И там аргументы "динамический" против "статический" вообще как на корове седло.
Stertor 10.06.2015 02:42 # −3
Дорогой поциент! Мы все как-бы в курсе что правила того, что во что кастится не имеют никакого отношения ко тому, когда именно эта проверка выполняется: в рантайме или в моменте компиляции/трансляции.
Можете смело возвращаться в свои пинаты, пить опипромол и ложиться спать.
3_14dar 10.06.2015 04:20 # −1
wvxvw 10.06.2015 09:10 # +1
Она так же не может быть статической или динамической. Это просто не применимо к вопросу о качествах системы типов.
3_14dar 10.06.2015 09:53 # −1
А википедия не знает.
kegdan 10.06.2015 10:47 # 0
Динамическим или статическим может быть ее представление(?) в языке, так?
wvxvw 10.06.2015 11:15 # 0
В конце девятнадцатого - начале двадцатого века математики старались найти формализм обобщающий всю математику. Их было несколько идеологических груп: платонисты, типа Геделя, логики, типа Фреге, Хилберта, Рассела и т.д., идеалисты типа Брувера. Самая привычная картина мира, по крайней мере для обывателя - это платонизм, т.е. ситуация при которой математические идеи существуют в своего рода "параллельной реальности" не зависимо от людей которые о них знают. Для этой же системы мировосприятия очень подходит описание математики базирующееся на теории множеств. Т.е. то, как в современных вузах обычно преподают введение в математику - это как раз наследие платонистов.
У этой системы есть проблемы. Одна из главных проблем это необходимость принятия аксиомы выбора, или, перефразирую, необходимость принятия правила исключенного третьего. Не вдаваясь в подробности, это создает очень много проблем, хотя и позволяет просто решать другие проблемы.
Теория типов - это попытка избежать зависимости от аксиомы выбора в фундаментальном описании математики. Другая такая попытка, например, - лямбда исчисление.
Как это относится к нашей дискуссии: типы и системы типов, это один из основополагающих математических формализмов. Мы можем с уверенностью говорить о том какими свойствами обладают типы / их системы, и какими нет. С точки зрения програмиста, система типов - это инструмент для описания правильности и выразительности програм. То, что обычно подразумевается под "статической" или "динамической" типизацией имеет столько же общего с системой типов, как качество бумаги на которой напечатана книга к содержанию книги.
kegdan 10.06.2015 11:22 # 0
То есть динамическая система, например, подразумевает доработку на этапе компиляции, а статическая - на лексического анализа.
Я правильно понимаю?
wvxvw 10.06.2015 11:35 # 0
Где, на мой взгляд есть настоящие различия (при том, что типы вообще имеют место быть):
- язык может позволять формально указывать типы: иногда, всегда, никогда.
- язык может гарантировать, что информация касающаяся типов будет присутствовать во время выполненя програмы: вся, частично, никакая.
В зависимости от выбраной системы типов (выразительность и правильность) у языка могут быть другие качества. Например, если выбрана неправильная (unsound) система типов, то у языка появляется плюс в выразительности, но меньше гарантий в отношении правильности (пример: Си, Ява). Пример обратного: Хаскел, Окамл. Для языков, которые стараются сохранить правильность характерно стараться компенсировать потерю выразительности за счет ограниченого принятия дополнительных правил из логики более высокого порядка (полиморфизм, мета-логические предикаты типов).
kegdan 10.06.2015 11:41 # 0
Интересно, но увы, мне не понятно
3_14dar 10.06.2015 12:46 # 0
wvxvw 10.06.2015 12:58 # 0
http://www.amazon.com/dp/0262162288/?tag=stackoverfl08-20 - нужно читать после какого-нибудь подготовительного материала. Я сдался после нескольких абзацев :)
Можно еще вот это почитать: http://math.boisestate.edu/~holmes/holmes/nf.html - это напрямую не связано с програмированием, но очень даже связано с теорией типов.
kegdan 10.06.2015 13:17 # 0
Что уж обо мне говорить)
Я как то хотел почитать серьезную книжку о лямбда исчислении, но концентрация непонятных слов на сантиметр текста вынудили меня отказаться от этой идеи. Поэтому познаю сквозь призму ФП
1024-- 10.06.2015 13:51 # 0
А вот Шерлок Холмс не изучал всякую ненужную фигню и был крайне эффективен. Не засоряйте свой чердак, Ватсон, ненужным хламом.
Это аналогично знанию "в байте может быть не восемь бит". Справедливое утверждение, но вероятность того, что оно потребуется, крайне мала. Обладая этим знанием, человек лишь сможет разочароваться в жизни и писать длинные посты на форумах, о том, какие все тупые и забыли, сколько бит в байте.
Уж лучше пойти в практическое русло: погрузиться в область алгоритмов или изучать доказывающую питушню вроде языка Idris.
kegdan 10.06.2015 13:55 # 0
Мир - огромен и загадочен. Мне интересно прикасаться к его тайнам.
1024-- 10.06.2015 14:13 # 0
> интересно прикасаться к его тайнам
Системы типов, придуманные математиками - это тайна мира? Тайна мира? Тайна? Мира? Какого мира?
Это искусственная придуманная ненужная фигня. Паразит, который не может жить без подпитки мозговой энергией жертвы.
Это всё равно, что устанавливать игру за игрой и утверждать, что так познаётся мир, утверждать, что умеешь водить машину, стрелять и прыгать на два метра, утверждать, что видел леса, поля и реки.
Это всё равно, что жрать полиэтиленовый пакет и утверждать, что ты - гурман.
Уж лучше тогда изучать геологию и химию. В отличие от "типов", они связаны с реальным миром.
kegdan 10.06.2015 14:25 # −1
Самообман. Человек может стать кем угодно. Я сейчас я больше занят религией чем математикой, и преобладает религиозный взгляд. Когда я начну читать книгу, которую мне посоветовали, я переключусь
>>Это искусственная придуманная ненужная фигня
Потому что любая вещь за пределами твоего мира - ненужная тебе нафиг фигня. Окукливание.
И за игрой познается. И в музыке познается. Ничего не бывает просто так. Ты просто привык думать, что знаешь причины и следствия.
1024-- 10.06.2015 15:08 # 0
Но времени мало. Сорокапятилетний семейный человек не сможет измениться. Вероятность крайне мала.
> Потому что любая вещь за пределами твоего мира - ненужная тебе нафиг фигня. Окукливание.
И это правильно.
> любая вещь за пределами твоего мира
Разные вещи стоят на разном расстоянии. Но некоторые всегда будут за пределами.
1. Биология, химия, медицина, физика - всегда актуальны, всегда в нашем реальном мире. Работают над тем, чтобы помочь и улучшить мир.
2. История, информатика, педагогика - стоят на стыке реального и виртуального миров, из-за чего могут давать сбои. Например, изучение древних времён без соотнесения с действительностью и учёта опыта, преподавание ненужной фигни и написание ненужных факториалов на хаскеле. Но при правильном использовании служат реальному миру.
3. Математика, философия, религия - вне нашего мира. Иногда могут давать удобные модели, которые можно использовать в реальном мире.
> И за игрой познается. И в музыке познается.
Ладно, договорились, они не бесполезны. Они вспомогательны дают аналогическую ступеньку, по которой можно подняться, изучая реальные объекты.
> Ты просто привык думать, что знаешь причины и следствия.
Не привык, я же не тот мужик из матрицы.
Stertor 10.06.2015 15:17 # −1
Но времени мало. Сорокапятилетний семейный человек не сможет измениться. Вероятность крайне мала.
> Потому что любая вещь за пределами твоего мира - ненужная тебе нафиг фигня. Окукливание.
И это правильно.
> любая вещь за пределами твоего мира
Разные вещи стоят на разном расстоянии. Но некоторые всегда будут за пределами.
1. Биология, химия, медицина, физика - всегда актуальны, всегда в нашем реальном мире. Работают над тем, чтобы помочь и улучшить мир.
2. История, информатика, педагогика - стоят на стыке реального и виртуального миров, из-за чего могут давать сбои. Например, изучение древних времён без соотнесения с действительностью и учёта опыта, преподавание ненужной фигни и написание ненужных факториалов на хаскеле. Но при правильном использовании служат реальному миру.
3. Математика, философия, религия - вне нашего мира. Иногда могут давать удобные модели, которые можно использовать в реальном мире.
> И за игрой познается. И в музыке познается.
Ладно, договорились, они не бесполезны. Они вспомогательны дают аналогическую ступеньку, по которой можно подняться, изучая реальные объекты.
> Ты просто привык думать, что знаешь причины и следствия.
Не привык, я же не тот мужик из матрицы.
Я только что прикоснулся к твоей тайне.
3_14dar 10.06.2015 16:03 # −1
Скорее, мотивация не та, слишком сильная потеря комфорта.
kegdan 10.06.2015 17:09 # 0
Стоит только захотеть. Но захотеть сложно. Проще думать что ты не можешь. Мир тебя наебывает
>>И это правильно.
В твоем мире - да. Но это даже не жизнь
13 Входите тесными вратами, потому что широки врата и пространен путь, ведущие в погибель, и многие идут ими;
14 потому что тесны врата и узок путь, ведущие в жизнь, и немногие находят их.
Ты не ищешь - ты идешь где идется
>> Работают над тем, чтобы помочь и улучшить мир.
Над этим, но не по этому. Работают - потому что нравится
Ты видишь мир из одной точки и тебе так удобнее. Для тебя все - во имя пользы и выгоды. Но в мире нет пользы и выгоды. Это все придумал человек. Миру параллельно на суждения. И человек волен делать все, что угодно
>> Не привык, я же не тот мужик из матрицы.
Не поверишь, но твой мир очень на нее похож.
ибо истинно говорю вам, что многие пророки и праведники желали видеть, что вы видите, и не видели, и слышать, что вы слышите, и не слышали.
Ты не хочешь ни видеть ни слышать
1024-- 10.06.2015 18:06 # 0
Старость, сэр. Не надо думать, что в любой момент жизни можно захотеть, измениться и совершить чудо.
> Ты не ищешь - ты идешь где идется
Итеративный подход. Там, где идётся - и есть дорога. Легче идётся - твоя дорога. Повернул и стало сложнее? Это чужая дорога, поверни в обратную сторону.
> Для тебя все - во имя пользы и выгоды.
Не всё, не всегда.
> Ты не хочешь ни видеть ни слышать
Пойду почитаю надписи на заборах и посты пи_дара. Может, мне откроется высшее знание. Может, я начну думать по-новому!
Фильтрация крайне важна, иначе потоки данных и наши решения будут подобны белому шуму. Это единственная наша задача здесь - создавать и поддерживать порядок, а значит фокусироваться на своей цели и следовать её, не размазываясь, не тратя себя на генерацию белого шума.
kegdan 10.06.2015 18:16 # 0
>> Не надо думать
Вот ты и не думаешь. Надо - не надо - установки. Установки разрушают волю
>> Итеративный подход. Там, где идётся - и есть дорога. Легче идётся - твоя дорога. Повернул и стало сложнее? Это чужая дорога, поверни в обратную сторону.
Ты отнимаешь у себя выбор. Впрочем это тоже выбор
>> Это единственная наша задача здесь - создавать и поддерживать порядок
И кому нужен твой порядок?
Человек придумывает свои задачи САМ. Почему ты решил, что твоя задача поддержания порядка нужна еще хоть кому то кроме тебя?
Ты всегда будешь находить то, что ищешь. Ты ищешь подтверждение собственной правоты. Попробуй наоборот
1024-- 11.06.2015 12:32 # 0
Думаю
> Ты отнимаешь у себя выбор. Впрочем это тоже выбор
Идти по своему пути - лучше, чем бросаться в крайности. Зачем мне метаться, распыляться на мелочи и стараться найти неоптимальный путь? Призрачное счастье в будущем? Зачем мне готовиться к будущему, которого не настанет и выбирать чужой путь, когда можно всю жизнь идти по своему?
> Почему ты решил, что твоя задача поддержания порядка нужна еще хоть кому то кроме тебя?
Потому. Либо порядок, либо смерть. Даже если убить всех человеков, это правило останется.
> Ты ищешь подтверждение собственной правоты. Попробуй наоборот
Интересный ход, симметричный.
Наоборот я пробую, но мне это часто мешает. Всё начинает казаться чистой правдой, так можно и с ума сойти.
kegdan 11.06.2015 12:41 # 0
1024-- в http://govnokod.ru/18291#comment289628 написал:
>> Не надо думать, что в любой момент жизни можно захотеть, измениться и совершить чудо.
Так зачем думаешь, если не надо?
>> Идти по своему пути - лучше, чем бросаться в крайности. Зачем мне метаться, распыляться на мелочи и стараться найти неоптимальный путь? Призрачное счастье в будущем? Зачем мне готовиться к будущему, которого не настанет и выбирать чужой путь, когда можно всю жизнь идти по своему?
Тут уже - как хочешь. Но ты рискуешь в один день понять, что упустил что то важное. Делать нужно все, что нравится делать.
Будущее - иллюзия. Как говорил Воланд - человек смертен внезапно. Все что у тебя есть - это сейчас. Поэтому если тебе что о хочется - то для этого есть только один момент - сейчас.
>> Либо порядок, либо смерть.
И в этом твой мир
Но не живу в нем. А значит можешь и ты. Но ты не веришь, что можешь, и думаешь, что все такие же)
>> Всё начинает казаться чистой правдой, так можно и с ума сойти.
Так и есть. А когда ты остановишь мир - поймешь что нет ни правды - ни лжи, ни добра - ни зла
1024-- 11.06.2015 12:46 # 0
Молоток - не философский камень. Молоток не может превратить хрень в золото, но молоток продолжает забивать гвозди. Так зачем забивает, если не надо?
> Делать нужно все, что нравится делать.
Вот и делаю.
> Но не живу в нем. А значит можешь и ты. Но ты не веришь, что можешь, и думаешь, что все такие же)
> А когда ты остановишь мир - поймешь что нет ни правды - ни лжи, ни добра - ни зла
Сойти с ума ради нейтральной пустоты или жить и радоваться? Нет, я уж лучше поживу и порадуюсь.
kegdan 11.06.2015 12:51 # 0
Незачем) Я не понимаю. Ты делать то, что не должен по своему же мнению? Почему? Забей.
>> Сойти с ума ради нейтральной пустоты или жить и радоваться? Нет, я уж лучше поживу и порадуюсь.
Пустота в твоем мире. Всем нет ничего, кроме тебя самого. Все остальное - отражения тебя. За пределами кокона настоящий мир. Не интересно?
1024-- 11.06.2015 13:07 # 0
> Не интересно?
Не интересно. Чтобы прорваться во внешний мир (если он есть), придётся найти уязвимость и сломать этот. Работает - не трогать.
kegdan 11.06.2015 13:10 # 0
Stertor 10.06.2015 14:19 # −1
Stertor 10.06.2015 20:25 # 0
В остальных-то ситуациях смысл есть!
Приходит wvxvw на вокзал, и просит билет до Крыжополя.
Кассирша: Вам на южный вокзал или северный?
wvxvw: север и юг -- выдумки маркетологов. Когда я стою на южном полюсе где юг и где север?
кассирша: Вам на вечер или на утро?
wvxvw: вечер и утро -- выдумки маркетологов. Когда я пересек горизонт событий и падаю в сраную сингулярность, то нет не только утра и вечера, времени даже нету.
И тут приходят санитары, и забирают wvxvw обратно в дурку, а за ним бегут чумазые 2014 и kegdan и кричат: "дяяяденька, а что это вы там про сингулярность говорили? Вы наверное такой умный! Самый умный тут! Расскажите нам, пожалкйста"!
Но санитары уже вкатили wvxvw галлопередолу и слюни текут.
Тьфу.
kegdan 10.06.2015 21:03 # −1
Stertor 11.06.2015 12:42 # 0
1024-- 11.06.2015 12:47 # 0
3_14dar 09.06.2015 02:25 # −1
Я не в курсе как проще жаваёбам, то на чем я обычно пишу не кидает исключений если пытаться напечатать null. Может жаваёбы к наллам привыкли. И там и там надо проверять на отсутствие значения.
3_14dar 08.06.2015 17:49 # 0
3_14dar 08.06.2015 17:48 # −1
>он просто делает вероятность случайной ошибки меньше за счёт введения дополнительного типа-контейнера.
Потому что код ревью проводится в вебе?
3_14dar 08.06.2015 18:18 # −1
wvxvw 10.06.2015 00:32 # 0
guest 09.06.2015 02:02 # 0
Смотри: один из смыслов статической типизации в том, что ты кое-что знаешь о возвращаемом типе. Например если вертаемый тип int, то это значение от INT_MIN до INT_MAX. Соответственно можно спокойно пихать его в функцию, ожидающую int без боязни что функция ожидает указатель на строку и поедет по пезде. Компилятор решает эти проблемы за тебя, чувак! Халява!
Из этой строгого, статического рая джав и сишарпов вываливалась ситуация с объектами. Когда речь идет о примитивах (в джаве) или валуе-тайпах (си шарпе) все прекрасно, но когда речь идет об объекте, то тебе могут вернуть не только указатель на объект но еще указатель на хуй (по научному -- null). Значит, уже нельзя спокойно сунуть его в любой метод без боязни получить по влажным губам толстым NPE (или NRE в терминологии острых сей). Проверить это на уровне компилятора никак нельзя, потому что авторы языка пидарасы нулл -- валидное значение для указателя.
В идеальном мире пони срут радугами, и программист *каждую* функцию документирует на предмет возвращения нула, и пользователь функции понимает кто может нулл вернуть, а кто нет. И если кто-то может, то он проверяет на нул и делает какие-то логичные действия вместо получения постыдного NPE.
В действительности же никто никогда не пишет никаких доков, и все как дебилы каждый результат проверяют на нул, засирая код ненужными проверками, а стоит только забыть как ты получишь NPE.
ПРОДОЛЖЕИЕ СЛЕДУЕТ
guest 09.06.2015 02:02 # 0
Кто-то решает проблему аннотациями для статического анализа (Nullable/NotNull), кто-то решает это на уровне компилятора вводя реальные обертки, этакие Maybe: Nullable, Optional итд.
Когда функция вертает Optional, она как-бы говорит "эй, я могу вернуть нул, проверь меня!!" и программист вынужден явно проверить значение. Он не может уже тупо передать его дальше по цепочке, или нарушить закон деметры дернув у него метод и получить отсосный, мининглесс, тупой и бесполезный NPE.
Программист -- тупая, ленивая сука, надо заставлять его проверять ошибки, отсюда и Optional, и Checked Excpetions (которыми ни один человек в мире пользоваться не умеет) да и вся статическая типизация современности в целом
3_14dar 09.06.2015 02:41 # −1
guest 09.06.2015 02:45 # 0
В идеале эта штука должна быть оформлена на уровне языка, а не на уровне сторонней приблуды.
3_14dar 09.06.2015 06:17 # −1
Не понял. Ты хочешь чтобы без аннотаций не конпелировалось?
>В идеале эта штука должна быть оформлена на уровне языка
Ну это в жаве исторически все оформляется в виде сторонней приблуды. Там даже сложение строк в компилятор встроено.
guest 09.06.2015 12:21 # 0
посмотри как сделано в котлине, например. Там нельзя тупо скастить ненулабл тип в нулабл
3_14dar 09.06.2015 13:26 # −1
guest 09.06.2015 12:35 # 0
guest 09.06.2015 12:46 # 0
вопрос: что возвращать когда нету юзера с таким id? Какого-то специального DefaultUser? И так на каждый случай? Не много ли букв писать?
Паттерн *Null object* (именно так правильно называется то, что ты предложил) имеет смысл только в одном случае: когда мы хотим скрыть от клиента что такого пользователя нет, и подставить реализацию которая выполняет контракт и ничего не делает. Например _EmptyUser_, который по методу getName() будет возвращать пустую строку, по методу sendEmail() ничего не делать итд.
Тогда клиент может и не знать что этот пользователь чем-то отличается от особенного.
С другой стороны если он вдруг захочет это узнать, то будет проверять instanceof (или is) и будет еще хуже.
guest 09.06.2015 12:51 # 0
Ну можно делать, как в go. Возвращать заодно ошибку. Тогда правда придется проверять ошибку :) Кода столько же примерно, зато семантически выглядит целесообразно.
Другой вопрос, а не стоит ли тогда проверять сначала, есть ли такой id отдельным способом? И, если есть, тогда брать юзера.
guest 09.06.2015 12:53 # 0
2) нельзя проверять сначала, иначе придется задирать уровень транзакции (если речь идет о БД) или налетать на рейс кондишены: пока проверял он был, а как получил так не стало.
Можно еще checked exception кидать, но на свете нет ни одного человека которому бы это нравилось.
guest 09.06.2015 12:56 # 0
-
делать это атомарно? Понятно, что это требует поддержки фреймворком/языком, но в данном случае во главу угла ставится читаемость и т.д.
И кстати точно так же можно попасть на ситуацию, когда, пока получали, он был, но, пока начали с ним работать, ему лапти настали. С этой точки зрения проверки на null придется разбрасывать везде, где работаем с объектом, разве нет?
guest 09.06.2015 12:59 # 0
2) в базе может лапти и настали, а в памяти у нас он уже есть, и если загрузка там не ленивая то можно и поработать.
3_14dar 09.06.2015 13:27 # −1
Да ну. Просто эксепты сравнительно медленные, а так это как раз правильный вариант.
guest 09.06.2015 13:29 # 0
3_14dar 09.06.2015 13:31 # −1
guest 09.06.2015 13:35 # 0
скорость работы эксепшенов это будет последний боттлнек в твоей системе, сразу же за фрагментированным HDD:)
Джависты просто не понимают их смысла, потому что нигде нет нормального туториала, и у людей в башке каша: они не понимают что чекд эксепшены это часть контракта, а рантайм -- признак этого контракта нарушения
3_14dar 09.06.2015 13:39 # −1
guest 09.06.2015 13:41 # 0
а вот NPE, IllegalArgument и IllegalState -- таки да
guest 09.06.2015 13:42 # 0
а причин бывает несколько
1) контракт нарушен и в памяти теперь хуйпоймичо
2) память кончилась
итд
ну сервера приложений могут конечно это поймать и не дать умереть, но задачу они точно должны завалить
roman-kashitsyn 09.06.2015 15:28 # 0
О, иксперты набижали.
Ты путаешь RuntimeException и Error, гений.
guest 09.06.2015 15:42 # 0
Рантайм ексепшен это нарушение контракта. После этого система остается в непонятно состоянии и совершенно не очевидно что делать дальше. В идеальном варианте надо закрыться и умереть. А чекд эксепшен это часть контракта и из него можно восстановиться, но бабуины вроде тебя этого не знают и засрали пол Инета криками о том что "иксепшены это плохо", ага
roman-kashitsyn 09.06.2015 15:58 # 0
Да, так должно было быть по задумке авторов жабы. На деле чекед-эксепшены настолько громоздки и неудобны, что 146% авторов библиотек не связываются с ними.
Даже авторы JDK косячат, не следуя придуманным ими же гайдлайнам.
Это явный признак того, что гайдлайны, выглядящие хорошо в теории, на практике могут быть полным говном.
guest 09.06.2015 16:00 # 0
Эксепшены -- отличная в теории конструкция, но никто их не осилил к сожалению. Может быть потому что они правда малоудобны, а может потому что таки да -- нет туториала и никто не понимает когда какой эксепшен кидать и когда его ловить.
guest 09.06.2015 15:24 # 0
guest 09.06.2015 15:52 # 0
это еррор
непонятно правда чому assert это error
roman-kashitsyn 09.06.2015 12:54 # 0
Мы любим делать два запроса в базу вместо одного, не правда ли?
Ну и ладно юзеры, их обычно не удаляют, но есть ведь объекты, которые могут быть удалены в промежутке между двумя запросами.
guest 09.06.2015 12:59 # 0
3_14dar 09.06.2015 13:26 # −1
null или кидать эксепт.
>Паттерн *Null object* (именно так правильно называется то, что ты предложил) имеет смысл только в одном случае: когда мы хотим скрыть от клиента что такого пользователя нет, и подставить реализацию которая выполняет контракт и ничего не делает. Например _EmptyUser_, который по методу getName() будет возвращать пустую строку, по методу sendEmail() ничего не делать итд.
Тогда получим пых, который *как-то* фурычит всегда.
bormand 08.06.2015 16:56 # 0
В общем-то я тоже могу. Но писать на жабе без IDE не особо приятно. Приходится юзать читы типа import java.util.*; и т.п. С чтением всё-таки полегче.
3_14dar 08.06.2015 16:56 # −1
bormand 08.06.2015 16:57 # 0
3_14dar 08.06.2015 17:03 # −1
bormand 08.06.2015 17:08 # +1
А если тебе приходится скакать по вызовам (и, не дай бог, ещё какие-то вычисления в уме проводить) - код хуёвый.
3_14dar 08.06.2015 17:46 # 0
bormand 08.06.2015 17:18 # 0
Печально, но в жабе на все эти вопросы очень легко ответить.
P.S. Доку к классу не завезли, да.
3_14dar 08.06.2015 17:46 # −1
Положительно?
bormand 08.06.2015 17:51 # 0
Само собой. Посмотреть, какого типа context. Это будет или интерфейс или класс. Дальше всё тупо. А в ide даже смотреть не надо будет, само подскажет.
3_14dar 08.06.2015 17:51 # −1
bormand 08.06.2015 17:54 # 0
3_14dar 08.06.2015 17:59 # −1
guest 09.06.2015 00:35 # 0
guest 09.06.2015 01:42 # 0
в нехуево написанной программе даже без помощи IDE примерно понятно о чем речь (всякие венгерские нотации и иже с ними в помощь). Как-то же писали люди программы в середине 90х, без всякого код инсайта, и неплохо писали
3_14dar 09.06.2015 02:30 # −1
Сравнил хуй с пальцем. Тогда программы были проще и падали от нехуй делать без внятного сообщения об ошибке.
guest 09.06.2015 12:49 # +1
Doom, OS/2 и Lexicon конечно были проще того сраного интернето-магазинчика который пилит сейчас сраный школоло, обвешанный IDE.
guest 09.06.2015 13:07 # 0
guest 09.06.2015 13:08 # 0
guest 09.06.2015 13:13 # 0
guest 09.06.2015 13:26 # 0
Лексер пишется посредством обычного автомата , он даже в обычном editPlus есть. А вот парсер требует памяти, восстановления от ошибок и прочих радостей которых тогда не было в IDE.
Видно так же что ты школота пубертатная, и в 90е ты сидел не за компьютером, а в папиных яйцах.
Нагугли себе досбокс и BorlandC 3.0, напиши там хотя бы тетрис, а потом скажи мне: сильно-ли тебе подсказывали методы объекта, или тип переменной, например.
guest 09.06.2015 13:54 # 0
3_14dar 09.06.2015 14:11 # −1
guest 09.06.2015 16:34 # 0
у тебя не было детства, чувак!!
3_14dar 10.06.2015 04:17 # −1
Stertor 10.06.2015 23:02 # −1
Так про что ты спрашивал? Про лексеры и парсеры?
Лексер работает с т.н. регулярной грамматикой или грамматикой третьего уровня в иерархии Хомски (да-да, когда ты пишешь регулярное выражение ты по сути создаешь лексер).
Для релизации лексера достаточно конечного автомата (вспоминаем что регексы это есть конечные автоматы -- НКА или ДКА), то есть хуйни которая просто переходит из одного состояния в другое, память ей не нужна.
Лексер разбивает текст на лексемы (каждая лексема соответствует токену). Например у тебя есть текст на пистоне: "if petuh: print kukarekoo ". Автомат крутится до тех пор, пока не встретит первый пробел и понимает что он вычленил токен "if". Потом он крутится пока не вычленит питуха, и тогда он поймет что лексема petuh это токен VARIABLE. И так он разбирает весь документ представляя его в ввиде пачки токенов.
Он не понимает что тело функции находится внутри функции, а внутри этого тела есть еще цикл итд. Он не имеет стека чтобы понимать что он внутри функции, и потому токены у него выложены не в дерево, а тупо рядком.
Он работает быстро, пишется легко, может подсветить ключевые слова (if например) но явно не может построить дерево программы.
ПРДЛЖЕНИЕ СЛЕДУЕТ
Stertor 10.06.2015 23:03 # −1
А вот парсер работает с контекстно-свободными грамматиками (второй уровень Хомски) и ему уже нужна целая машина Тюринга с памтью чтобы работать. Его уже ригуляркой не напишешь (нужен BNF или рукопись или flex, yacc, вот это всё) и он уже строит дерево программы потому что когда он входит в функцию он кладет себе в стек об этом заметку.
Парсер уже значительно умнее: например с его помощью можно понимать область видимости пеерменной, делать красивую отбичвочку в программах, писать компиляторы в конце концов.
Обычно все работает так:
Текст -> Лексер -> Парсер -> IDE/компилятор/итд
Так вот лексеры есть даже в Editplus, их даже ты можешь на регулярках написать, а парсеры есть только у компиляторов и серьезных IDE.
И к сожалению в моем борландсишном децтве с синим экраном парсера у IDE не было, и мне некуда было нажать чтобы посмотреть список всех доступных в этой области переменных...
kegdan 11.06.2015 04:58 # 0
>> да-да, когда ты пишешь регулярное выражение ты по сути создаешь лексер
щито? Ты обкурился?
>> (второй уровень Хомски)
Щито? Я так понимаю ты имел ввиду 2 тип в классификации формальных грамматик по Хомскому?
3_14dar 11.06.2015 06:43 # −1
kegdan 11.06.2015 07:46 # 0
Парсер - проверяет, что они стоят в нормальном порядке (Зачастую параллельно строит промежуточное представление, например семантическое дерево)
Семантический анализ - проверяет, что вся эта хуйня что то да значит, оптимизирует (инлайны, распространение констант, раскрутка циклов, константные вычисление и все такое)
А потом - зависит от цели. Обычно трансляция в нативный код
1024-- 11.06.2015 12:20 # 0
Кстати, почему многие пишут, что есть четыре класса грамматик и ссылаются на работу Хомского "Three models for the description of language"? Вот на неё: http://www.chomsky.info/articles/195609--.pdf
Как из трёх стало четыре, откуда взялись их названия?
kegdan 11.06.2015 12:30 # 0
0 - неограниченные
1 - контекстно-зависимые
2 - контекстно-свободные
3 - регулярные
1024-- 11.06.2015 12:36 # 0
Ситуация такая: ту статью, да и тему в общем, почти никто не способен понять. Кто-то ссылается на статью, поскольку всё из неё вылилось, кто-то - потому, что не понимает. Хотя, может быть, про 4 типа написали много позже и сослались на статью про 3 типа.
Я эту статью скорее всего не пойму, поэтому и не могу разобраться в том, что происходит.
kegdan 11.06.2015 12:47 # 0
Я специально не изучал это, у нас год были лекции на тему
1024-- 11.06.2015 12:48 # 0
kegdan 11.06.2015 12:52 # 0
Stertor 11.06.2015 12:43 # −1
0,1,2,3
нуачо
kegdan 11.06.2015 05:28 # 0
Парсер может работать с любой из грамматик в зависимости от извращенности ваших желаний
>> и ему уже нужна целая машина Тюринга с памтью чтобы работать.
Машина Тьюринга - абстракция исполнителя. Если ты о том, что нужен исполнитель - так он любой программе нужен. и лексеру в том числе.
>> Его уже ригуляркой не напишешь
А ты лексер хотел регуляркой писать? Удачи
>> нужен BNF или рукопись или flex, yacc, вот это всё
Лихо ты компиляторы компиляторов в один ряд засунул с БНФ и какой-то загадочной рукописью
Компиляторы компиляторов (с которыми я работал) создают и лексер и парсер и еще много приятных фич
>> и он уже строит дерево программы потому что когда он входит в функцию он кладет себе в стек об этом заметку.
Щито? Что по твоему "входить в функцию"? В моих терминах - это погружаться внутрь функции из кода. Ничего такого лексер не делает.
>> Парсер уже значительно умнее
тебя?
>> например с его помощью можно понимать область видимости пеерменной,
Нельзя, это делается на этапе семантического анализа. Парсер говорит правильно ли у тебя лексемы стоят, а не что они означают
>> делать красивую отбичвочку в программах
Хз, что ты имеешь в виду
>> писать компиляторы в конце концов
Умиляюсь над твоей способностью объединять совершенно разные вещи
>> Текст -> Лексер -> Парсер -> IDE/компилятор/итд
Артефакт -> Обработчик -> Обработчик -> Средство разработки/ Компилятор (который содержит 2 обработчика)/ итд (видимо прочие псевдонаучные вещи)
Вот что означает эта диаграмма?
3_14dar 11.06.2015 06:42 # −1
То есть, машина тьюринга == конечный автомат?
kegdan 11.06.2015 07:58 # 0
Конечный автомат - математическая модель того, как преобразовать один набор символов в другой. Представляют его в виде пятерки значений (алфавит, допустимые состояния, начальный символ, допустимые итоговые состояния, правила перехода)
Так что - не равны
1024-- 11.06.2015 12:14 # +1
А что, токены поместятся в регулярку. Скажем, лексер основать на
А парсер - на
>> например с его помощью можно понимать область видимости пеерменной,
> Нельзя, это делается на этапе семантического анализа. Парсер говорит правильно ли у тебя лексемы стоят, а не что они означают
Область видимости - место в иерархии. Распарсив код КС-питушнёй, мы можем получить место идентификатора в иерархии и можем понимать область видимости.
Говоря сухим, но почему-то уважаемым тут языком, парсер - необходимое условие.
>> делать красивую отбичвочку в программах
> Хз, что ты имеешь в виду
Он говорит о красивом форматировании. Парсинг ведётся с точностью до пробельных символов, стили оформления кода действуют с точностью до пробелов.
Парсинг -> AST -> отформатированный текст
Вот наглядный пример:
> Вот что означает эта диаграмма?
Но диаграмма гостя была и так понятна.
Зачем троллить, если можно прочитать и понять? Секта wvxvw?
3_14dar 11.06.2015 12:21 # −1
kegdan 11.06.2015 12:26 # 0
А теперь составь регулярку для выделения лексем языка JavaScript
>> и можем понимать область видимости.
Мы - можем. Но не компьютер. На этапе парсера он не знает че кого.
>> Говоря сухим, но почему-то уважаемым тут языком, парсер - необходимое условие.
А еще наличие текста программы, среды исполнения и электричества. Так сюда что угодно можно приписать. Скоп переменной - понятие семантическое, хоть тресни
>> Но диаграмма гостя была и так понятна.
Понятна, исходя из предположения, что автор долбоеб и понятия не имеет о чем пишет. Мне же интересно было услышать объяснение каждой связи
1024-- 11.06.2015 12:41 # 0
И что, не выйдет? Они ВНЕЗАПНО не влезают в регулярную грамматику?
Выйдет, конечно. Только чуть подлиннее, поэтому я не буду её писать.
> На этапе парсера он не знает че кого.
> А еще наличие текста программы, среды исполнения и электричества. Так сюда что угодно можно приписать. Скоп переменной - понятие семантическое, хоть тресни
> автор долбоеб и понятия не имеет о чем пишет
Понятно, wvxvw укусил. Продолжайте троллить вместе, но гость прав.
kegdan 11.06.2015 12:45 # 0
Это как хтмл парсить регулярками
>> Продолжайте троллить вместе, но гость прав.
Я не троллю. В чем гость прав? Сформулируй тезис
Stertor 11.06.2015 13:01 # −1
Нет, заебал. Для парсинга html нужна память, для выделения лексем достаточно конечного автомата.Го на форум.
1024-- 11.06.2015 13:09 # 0
Нет. Мы же говорим о разбивке на лексемы, да?
А уж лексемы специально сделали простыми. Лексемы вполне можно распарсить регулярками. Их специально сделали простыми, чтобы дать на вход нормальному парсеру КС-грамматики что-то более разумное, чем поток символов.
> В чем гость прав? Сформулируй тезис
Во многом... Гость говорит о том, как оно в нашей жизни. Если не разбирать его текст на предложения и осознавать как единое целое, получается достаточно правдоподобный текст.
kegdan 11.06.2015 13:12 # 0
1024-- 11.06.2015 13:25 # 0
Человек просто не углублялся в теорию (спасибо ему за это). С практической точки зрения - идеально.
kegdan 11.06.2015 13:28 # 0
1024-- 11.06.2015 13:29 # +1
kegdan 11.06.2015 13:43 # −1
guest 12.06.2015 02:26 # 0
ты же до операции девочкой был
Stertor 11.06.2015 12:43 # −1
3_14dar 09.06.2015 13:28 # −1
>оторый пилит сейчас сраный школоло
Вся сложность зарыта в фреймверке/библиотеках. Так что может быть что да.
guest 09.06.2015 16:39 # 0
guest 09.06.2015 01:43 # 0
Lure Of Chaos 17.06.2015 18:46 # 0
1024-- 08.06.2015 17:38 # 0
Как я понял, это для LINQ-подобной питушни сделали:
Теперь можно писать однострочники вместо тернарных операторов и if/else.
3_14dar 08.06.2015 17:45 # −1
1024-- 08.06.2015 18:14 # 0
На самом деле Optional в Java 8 был введён исключительно для поддержки коллекций.
http://habrahabr.ru/post/225641/#comment_7670597
Фиг его знает, это надо изучать.
3_14dar 08.06.2015 18:17 # −1
1024-- 08.06.2015 18:34 # 0
и правда
map, filter и orElse и подобное делают эти проверки внутри. Optional делает из типа что-то похожее на коллекцию.
roman-kashitsyn 08.06.2015 18:38 # 0
Читайте книжки по хачкелю, там всё это расжёвано.
1024-- 08.06.2015 18:43 # +1
Но вот только в хаскеле Maybe действительно требуется, а здесь null и так есть.
kegdan 08.06.2015 18:48 # 0
Вот за этим и нужен ваш опционал хренов - это обвертка которая в себе флаг держит и вельютайп (типа инта). флаг говорит - а стоит ли вообще читать из инта.
1024-- 08.06.2015 18:54 # 0
kegdan 08.06.2015 18:58 # 0
roman-kashitsyn 08.06.2015 19:28 # 0
Есть блокирующая очередь, и ты хочешь реализовать операцию tryPop(), которая вернёт тебе объект, если очередь не пустая, но не будет дожидаться, пока в очереди что-нибудь появится.
Ты можешь возвращать из tryPop() null и предложить коду самому разбираться, послали ли ему null или просто очередь пуста. Или возвращать Optional<Integer>, который не empty только если в очереди что-то было. Тогда никаких сомнений уже быть не может.
kegdan 08.06.2015 19:34 # 0
roman-kashitsyn 08.06.2015 19:38 # +1
kegdan 08.06.2015 19:55 # 0
Stertor 08.06.2015 19:55 # −2
roman-kashitsyn 08.06.2015 20:15 # 0
kegdan 08.06.2015 20:17 # −1
1) ты точно знаешь что такое флажолет?
2) ты хотел сказать осколок?
Stertor 08.06.2015 22:25 # −1
На 2.37 звучит.
>>ты хотел сказать осколок?
greenx 09.06.2015 15:26 # −1
Stertor 12.06.2015 11:07 # −1
3_14dar 09.06.2015 02:33 # −1
И кстати ты на свой вопрос сам и ответил http://govnokod.ru/18291#comment289296
guest 09.06.2015 13:04 # 0
в питоне даже понятия-то такого нет -- "null".
Там есть None.
Сразу видно что ты и пистона-то в глазы не видал
3_14dar 09.06.2015 13:06 # −1
roman-kashitsyn 09.06.2015 13:46 # 0
Ты умеешь отличать вопросы от утверждений? Где я задавал вопросы?
3_14dar 09.06.2015 13:50 # −1
Читается вопрос "что делать?".
roman-kashitsyn 09.06.2015 13:54 # 0
3_14dar 09.06.2015 14:13 # −1
roman-kashitsyn 09.06.2015 14:23 # 0
Лол. Ну, попробуй почитать рационал гуглеров. Хотя, врядли тебе это поможет - все их аргументы уже приводились в треде.
3_14dar 09.06.2015 14:53 # 0
roman-kashitsyn 09.06.2015 14:56 # +1
guest 09.06.2015 16:32 # 0
3_14dar 10.06.2015 04:16 # −1
roman-kashitsyn 10.06.2015 09:48 # 0
Ну ты и лалка. Мне лично абсолютно наплевать, поймёшь ты в итоге, для чего нужен Optional<T>, или нет. Я знаю, что Optional в большинстве случаев наглядней и безопасней, чем null. В кодовых базах, которые живут годами, и над которыми работают десятки-сотни инженеров, каждая ошибка стоит дорого, а любой способ уменьшить кол-во ошибок - безусловное благо.
Тебе в твоём пистончике с уютненькой ide в скрипте, который ты написал в голове по пути из туалета, optional всё равно без особной надобности - без нормального компилятора и статической типизации от optional мало толку.
3_14dar 10.06.2015 09:53 # −1
Ну и знай дальше тихо, чего ты тут об этом бубнишь, если внятно объяснить не можешь? Или ты кого-то опытом в интернете на полуанонимном сайте задавить решил? :)
>Тебе в твоём пистончике
Мы же жаву обсуждаем, причем тут питон?
Vasiliy 10.06.2015 12:48 # 0
Хуля ты пиздишь то а?
guest 12.06.2015 20:44 # 0
guest 20.06.2015 01:25 # 0
Ну и каким-же это образом во время учёбы в кулинарном техникуме у тебя были проекты, связанные с программированием?
guest 20.06.2015 01:33 # +1
kegdan 20.06.2015 05:06 # 0
guest 20.06.2015 10:11 # 0
kegdan 20.06.2015 10:45 # 0
roman-kashitsyn 08.06.2015 18:55 # 0
kegdan 08.06.2015 19:00 # 0
TarasB 09.06.2015 16:06 # +1
guest 09.06.2015 16:09 # −3
Stertor 12.06.2015 18:46 # +1
Stertor 10.06.2015 02:43 # −1
Stertor 11.06.2015 12:44 # −1