Pull to refresh

Comments 35

Например оператор BETWEEN в SQL в разных версиях ведет себя по разному:
www.w3schools.com/Sql/sql_between.asp

Так вопрос в том, как все таки правильно определить такую функцию.
[a, b) или [a, b]
Желательно так же и пояснения, почему выбран тот или иной вариант.
between — это «между». тоесть по идее (a, b)
in range — «в диапазоне» — больше похоже на [a, b]

по этой логике смысл [a, b) как-то ускользает
UFO landed and left these words here
UFO landed and left these words here
Это значит, что автор функции не позаботился об удобности ее использования и читабельности кода другими программистами.
Что именно здесь не удобно? Можно пожалуйста поподробнее.
При просмотре кода, вам нужно обращаться к документации. Хорошо если она еще есть. И вместо славного программирования вы, очевидно спорите с коллегами о том как такую функцию нужно понимать, и даже создаете опрос. Конечно, очевидно что многое зависит от конкретного языка, ведь не везде можно сделать например так:
1 < k < 10

или так:
k in range(1,10)


Я хотел сказать, что возможно не стоит искать логику там где ее нет.

*Видимо случайно отправил.
Но таки везде можно
1 < k && k< 10
UFO landed and left these words here
UFO landed and left these words here
UFO landed and left these words here
КО намекает на первый вариант, как единственно логичный.
Мне кажется нет какого-нибудь стандартизированного подхода. Мне лично [a, b) как-то ближе.
Мне тоже. У меня аналогия с циклом for (int i = 0; i < 10; i++) :)
Несмотря на то, что в близком мне STL обычно используется [a, b), логика всё равно выбирает первый вариант.
Да, логически ближе первое определение. Но встретив в коде, подумаю, что скорее второе. Потому что так удобнее во многих языках. Так что практика повлияет на то, что подумаю про реальный код :)
Я бы сказал, не «удобнее», а «привычнее». Удобнее — это то, что ближе к «логике по дефолту».
К примеру, в Haskell я бы однозначно выбрал первый вариант.
UFO landed and left these words here
«Мне лично [a, b) как-то ближе. » — это скорее рассуждения тупенькой первокурсницы, чем матерого программера, т.к. программер руководствуется названием используемой функции (а не тем что ему «ближе») и знанием родного каждому айтишнику языка (английского, если вдруг не понятно). «inRange» — это [a,b], и никак иначе.
Наверное, потому что для создателей питона английский не родной, там будет для k in range(0,10) одназначное [a,b). Хотя можно сказать что это просто другая языковая конструкция нежели именно inRange.
Сперва подумаю, что [0,10].
Сразу вторая мысль о PHP, как о примере «великолепного» соблюдения однотипности названий и параметров функций.

Перестаю думать, лезу в мануал.
а мой мозг без сомнений выдал: «подходят k от 0 до 10, включая 0 и 10» :)
Ваш мозг может сослужить вам дурную службу, потому что, видя такой код, лучше всего засомневаться и проверить. А то я знаю умельцев, у которых это может значить даже «10 подходит к промежутку от k до 0».
UFO landed and left these words here
Мне непонятно, почему второй вариант популярней первого. Помоему, тут либо закрытый «наглухо» промежуток, либо с включением с обоих сторон, но никак не третье. (сам выбрал первый вариант, [a, b] )
UFO landed and left these words here
UFO landed and left these words here
Почему-то, второй вариант мне в голову не пришел бы сам.
UFO landed and left these words here
UFO landed and left these words here
Второй — ассоциация с циклом (i=0; i<10; i++) или k in range(0, 10) в python
думаю язык тут не малое значение имеет, т.е. язык влияет на привычки/восприятие
Sign up to leave a comment.

Articles