Ответ про goto

Это бессмысленный длиннопост о программировании с задачей о пользе goto, создан как ответ на комментарий: #comment_79923933


Ставь минус и листай дальше:)


.


.


.


.


.


.


.


.


.


Выдуманная задача: данные полученны с сервера, допустим декодированны из Json.

Нужно получить ассоциативный массив (js-объект) одного отеля в каждом городе с сервисом "проституток", где ключ - имя города, значение - имя отеля. Если в отеле есть сервис "церковная кабинка" - проституток там гарантированно нет. Если в городе нет отелей с проститутками - вместо имени отеля заносится соответствующее сообщение.


Песочница: https://jsfiddle.net/dmcbnpp1/

HTML-страница с кодом: http://pastie.org/10991634


Скриншот в редакторе:

Результат в Firefox:

1
Автор поста оценил этот комментарий
меня больше раздражает ассинхронность.

А зря, это по моему единственное что в нем хорошо сделано:)


опошлили асинхронность люди которые делает калбеки для калбеков калбеков калбеков калбеков калбеков калбеков

А если они узнают что есть механизм промисов, то вообще вакханалия начинается

раскрыть ветку (1)
1
DELETED
Автор поста оценил этот комментарий

До использования промисов, судя по этому нерадостному списку, ещё лет 5, не меньше:)

Либо утяжелять страницы полифилами.

https://developer.mozilla.org/ru/docs/Web/JavaScript/Referen...
http://caniuse.com/#feat=promises

Иллюстрация к комментарию
Иллюстрация к комментарию
показать ответы
1
Автор поста оценил этот комментарий
По твоей ссылке только способ с while, ты наверное забыл прикрепить)

вместо вайл подставь метод на подобии checkServicesInHotel который также будет по ифу ретурн делать:)


Js ругать без толку, так как аналогов пока не предвидится и придётся всё равно писать на нём.

Сам js не плохой язык, у него стандарт и его реализация в некоторых браузерах плохая)

Его жидкая типизация позволяет делать некоторые вещи проще, но и она же позволяет по не внимателности отстрелить себе ногу. У всего есть цена:)

раскрыть ветку (1)
1
DELETED
Автор поста оценил этот комментарий

Типизация в js ещё пол-беды - меня больше раздражает ассинхронность.

Стоит вызвать какой-нибудь кроссдоменный или обычный ajax-запрос из метода - и очерёдность выполнения теряет предсказуемость. С моими знаниями js - это настоящий кошмар:)

А на работе, в скором времени, предстоит на js сложную и нетиповую логику писать, к которой ещё и не знаю с какой стороны подступится. Придётся спешно подтягивать знания этого языка на той неделе:)

показать ответы
1
Автор поста оценил этот комментарий
Но читаемость oneHotelsWithProstitutesInCity - откровенно снизилась.

как по мне "водопадик" из форов тоже так себе читается:)


ЗЫ: плюс используется Object.keys с не самой лучшей поддержкой:

ну это проблема жопных языков, в нормальных языках список ключей получить не проблема:)


Механизм меток есть в Java, Js и D

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

- для джавы нужно ставить виртуальную машину, компилировать исходник и по хитрому запускать.

забей в гугл "java\D\C++\anything online compiler"


PS: а второй способ какой?

Так их два там, через функции и через while, мне через функции больше нравится, while более громоздкий. Еще через рекурсию можно, но этот метод не для всех:)

раскрыть ветку (1)
1
DELETED
Автор поста оценил этот комментарий
в нормальных языках список ключей получить не проблема:)
В js поддержку для старых браузеров можно прикрутить (на mdn есть код полифила), или написать свой аналог на крайний случай. Если в треде js-ники появятся - может просвятят. Js ругать без толку, так как аналогов пока не предвидится и придётся всё равно писать на нём.
забей в гугл "java\D\C++\anything online compiler"
Я слишком развращён нормальными редакторами кода, для использования онлайновых:)
Так их два там, через функции и через while
По твоей ссылке только способ с while, ты наверное забыл прикрепить)
показать ответы
0
Автор поста оценил этот комментарий

как то так, сразу два способа не юзать гото

https://jsfiddle.net/h6spc2fL/1/


ну и как сказали ранее так никто не делает, такой фильтр на серваке на уровне запроса в бд делается) а никак не клиентом.

раскрыть ветку (1)
1
DELETED
Автор поста оценил этот комментарий
Функция checkServicesInHotel - неплохая.

Но читаемость oneHotelsWithProstitutesInCity - откровенно снизилась.
Плюс используется Object.keys с не самой лучшей поддержкой: https://developer.mozilla.org/ru/docs/Web/JavaScript/Referen...

Под мобильными браузерами вообще все вопросики стоят.


Js я выбрал только из-за "полулярности" и простоты проверки. Механизм меток есть в Java, Js и D - для джавы нужно ставить виртуальную машину, компилировать исходник и по хитрому запускать.

PS: а второй способ какой?

показать ответы
2
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
0
DELETED
Автор поста оценил этот комментарий

Так в том и суть, что это не тот goto, которого раньше боялись:)

Тут жёстко ограничен скоуп для действия - только внутри циклов, только c break/continue.

У него и название другое, label: https://developer.mozilla.org/ru/docs/Web/JavaScript/Referen...

Если не писать циклы длинной в 200 строк - никаких проблем не возникнет, даже теоретически.

Но настаивать не буду. Если на проекте/в компании будет требование без label - буду писать без label. Но мне эта языковая фича нравится.

2
Автор поста оценил этот комментарий
а зачем искать проституток на клиенте, когда сервер может выдать сразу правильный набор данных? :-)
раскрыть ветку (1)
0
DELETED
Автор поста оценил этот комментарий

Ну хер знает.

Я выбрал, как самый простой для демонстрации - java код без Jvm не запустишь:)

3
Автор поста оценил этот комментарий

Две дополнительные переменные, проверяющие необходимость сделать обычный break в каждом из циклов. Да, чуть больше кода. Но код будет так же понятен и читаем. И даже количество итераций не изменится.


К слову, в реальных проектах зачастую прямо запрещено использовать переход по меткам, там тебя отругает и среда разработки, и средства анализа.


И ещё, небольшое замечание:

с той же вычислительной сложностью (без лишних итераций)

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

раскрыть ветку (1)
DELETED
Автор поста оценил этот комментарий

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

У меня проект не "реальный", а только в качестве примера. Меня несколько удивляют такие запреты - если в языке есть простой и понятный механизм, почему его запрещают использовать. Я понимаю, допустим для языка GO - там подобные best practice вроде в компилятор вшиты:)

Или другая крайность - C/C++. Но в этих языках (Java, Js) ограничение - только внутри циклов.

Если попаду в такую компанию на работу - первое время буду об стену головой стучаться.

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества