Почему же, если на уровне проекта мы заявляем: «методы никогда не возвращают null», то, соответственно, нужно внедрить в код каждого метода, возвращающего ссылочный тип, вышеуказанный контракт. Это работа для AOP.
При этом подразумевается, что повсеместно (где необходимо) передается/возвращается Maybe. Точки сочленения с внешним миром оборачиваются, если необходимо, тоже в Maybe. И — вуаля, «ошибка на миллион долларов» исправлена :)
Пожалуйста :) Исходные коды его на githube, если в процессе использования родятся какие-то еще общеполезные расширения — пушьте, включим в новые версии пакета.
Конечно, это оно, да и Func<T, ...> тоже есть, как функциональный тип.
Но и то, и другое можно поудобнее сделать.
Например, поддержать анонимный функциональный тип вида (int -> string), автоматически приводимый к любому подходящему делегату, как Func<int, string> так и какому-нибудь sting MyCustomDelegate(int a).
То же и с кортежами:
Сейчас так:
var tuple = IntegerDivide(5, 3);
var div = tuple.Item1;
var mod = tuple.Item2;
Ну, я имею в виду так, чтобы глобально, например, для целого проекта запретить. На уровне метода — да, контракты. Ну а на уровне проекта — тоже контракты, но с AOP, я об этом написал ниже :)
Ну может этот наш гипотетический популяризатор готов пожертвовать своим рейтингом (который ему не поставят нелюбители coffee) на эту фразу. А может, ему любители кофе еще и добавят, кто знает. Слава Богу, это решает сообщество, плюсуя, а не авторитарные личности с призывами «запретить». Спасибо, слон уже есть :)
А как можно спрашивать о JS, приводя пример на CS? Ведь такой вопрос можно автоматом считать про CS, да и все.
Но автор-то даже и спрашивать на эсперанто запрещает. Это вообще, по-моему, за гранью.
Насчет ответов — с одной стороны, соглашусь, на js общепонятнее будет.
С другой стороны — ответ на SO дело добровольное, как и чтение такого ответа. И если человек хочет потратить свое время на ответ, и в качестве «платы» желает популяризовать что-то, например, любимый диалект, почему он не вправе? Не понимаете coffee/typescript/… — пропускайте этот, читайте другие ответы. Давший ответ ничем не обязан вам, чтобы вы ему условия ставили, правда ведь?
А отличная идея — в более широком смысле — вообще запретить окружающим: говорить непонятные мне слова, т.к. «я их не понимаю», оперировать непонятными мне концепциями, т.к. «они мне не знакомы» и т.д. Далеко пойдет автор :)
Автор увлекается аннотированием, на мой взгляд, излишне. В статье почти все (!) аннотации типов можно выкинуть, *ничего* не потеряв в типизиции. TS отлично умеет выводить типы, как по инициализаторам, так и по использованию.
У в моей аналогичной библиотеке такой код выглядел бы так: public messagesLoaded = new Event<string[]>();
При этом messagesLoaded имеет четкий тип Event<string[]> — аннотация тут просто не нужна.
Круто! Сам параллельно прохожу аналогичный процесс разработки.
По коду: лучше бы не писать аннотацию типа там, где она очевидна, например: «public MessagesLoaded: Events.Event = new Events.Event(); », и уж тем паче с обобщенными типами.
Все были расстроены. Морального права *проклинать* Гугл за это, говорить, что они теперь *корпорация зла* — никто, я считаю, *на основании этого факта* не имел. Быть расстроенным, выражать сожаление и выносить суждения об ошибочности такого решения гугла — это сколько угодно.
Вы передергиваете, говоря, что хозяева сервиса «начинают негодовать», я такого в посте не увидел. Они как раз сделали культурно все, прозрачно, объяснили людям что и почему, и как пишет автор, большинство это нормально восприняло.
Если человек пользуется каким-то сервисом бесплатно, то он должен быть в любой момент быть готовым перейти на платную основу или остаться без сервиса. Иначе — это халява, а халява развращает. Что-то есть очень потребительское в отношении «однажды предложили бесплатно — должны всегда».
Если сервис не давал гарантии вам, что он будет вечно сущ, он может завтра же закрыться, и вы не только не имеете морального права быть недовольным, но и должны сказать спасибо, что он предоставлял вам услугу какое-то время.
Те, что коснулись меня: вся территория вокруг Борисовских прудов, в т.ч. вдоль всей улицы Борисовские пруды.
Ее «продолжение» вокруг течения Городни в Братеево.
Марьинский парк (там и раньше было, а добавилась длинная велодорога в Капотню).
Еще где-то в окрестных районах встречал небольшие локальные «кольцевые» дорожки в микропарках и скверах, которые можно «включить» в маршрут, если ставить целью максимально ехать по в/д.
Вдоль Каширки пока нету, про планы не знаю, но по общей логике происходящего и вдоль Каширки тоже должна появиться (это не знание, просто надежда :) )
Еще видел пару раз за прошлую неделю Газели, везущие куда-то крытые (с крышей) велопарковки. Установленных пока не видел :)
О, да, в самый буран мне довелось поколесить по городу — и по снегу, и по льду, и по вот этой каше невообразимой. Зато теперь летний песок или грязь — просто семечки, едешь и не замечаешь :)
При этом подразумевается, что повсеместно (где необходимо) передается/возвращается Maybe. Точки сочленения с внешним миром оборачиваются, если необходимо, тоже в Maybe. И — вуаля, «ошибка на миллион долларов» исправлена :)
Но и то, и другое можно поудобнее сделать.
Например, поддержать анонимный функциональный тип вида (int -> string), автоматически приводимый к любому подходящему делегату, как Func<int, string> так и какому-нибудь sting MyCustomDelegate(int a).
То же и с кортежами:
Сейчас так:
А можно было бы так:
А как можно спрашивать о JS, приводя пример на CS? Ведь такой вопрос можно автоматом считать про CS, да и все.
Насчет ответов — с одной стороны, соглашусь, на js общепонятнее будет.
С другой стороны — ответ на SO дело добровольное, как и чтение такого ответа. И если человек хочет потратить свое время на ответ, и в качестве «платы» желает популяризовать что-то, например, любимый диалект, почему он не вправе? Не понимаете coffee/typescript/… — пропускайте этот, читайте другие ответы. Давший ответ ничем не обязан вам, чтобы вы ему условия ставили, правда ведь?
Linq
и при этом получается вот такой типизированный код на TS:Где и в последней строчке TS знает правильный тип
vocabularyLexem
.У в моей аналогичной библиотеке такой код выглядел бы так:
public messagesLoaded = new Event<string[]>();
При этом messagesLoaded имеет четкий тип Event<string[]> — аннотация тут просто не нужна.
По коду: лучше бы не писать аннотацию типа там, где она очевидна, например: «public MessagesLoaded: Events.Event = new Events.Event(); », и уж тем паче с обобщенными типами.
Вы передергиваете, говоря, что хозяева сервиса «начинают негодовать», я такого в посте не увидел. Они как раз сделали культурно все, прозрачно, объяснили людям что и почему, и как пишет автор, большинство это нормально восприняло.
Если человек пользуется каким-то сервисом бесплатно, то он должен быть в любой момент быть готовым перейти на платную основу или остаться без сервиса. Иначе — это халява, а халява развращает. Что-то есть очень потребительское в отношении «однажды предложили бесплатно — должны всегда».
Ее «продолжение» вокруг течения Городни в Братеево.
Марьинский парк (там и раньше было, а добавилась длинная велодорога в Капотню).
Еще где-то в окрестных районах встречал небольшие локальные «кольцевые» дорожки в микропарках и скверах, которые можно «включить» в маршрут, если ставить целью максимально ехать по в/д.
Вдоль Каширки пока нету, про планы не знаю, но по общей логике происходящего и вдоль Каширки тоже должна появиться (это не знание, просто надежда :) )
Еще видел пару раз за прошлую неделю Газели, везущие куда-то крытые (с крышей) велопарковки. Установленных пока не видел :)