Как стать автором
Обновить

Комментарии 35

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

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

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

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


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

*Видимо случайно отправил.
Но таки везде можно
1 < k && k< 10
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
КО намекает на первый вариант, как единственно логичный.
Мне кажется нет какого-нибудь стандартизированного подхода. Мне лично [a, b) как-то ближе.
Мне тоже. У меня аналогия с циклом for (int i = 0; i < 10; i++) :)
а у меня с next.Random(min,max)

опять же [min; max)
Несмотря на то, что в близком мне STL обычно используется [a, b), логика всё равно выбирает первый вариант.
Да, логически ближе первое определение. Но встретив в коде, подумаю, что скорее второе. Потому что так удобнее во многих языках. Так что практика повлияет на то, что подумаю про реальный код :)
Я бы сказал, не «удобнее», а «привычнее». Удобнее — это то, что ближе к «логике по дефолту».
К примеру, в Haskell я бы однозначно выбрал первый вариант.
НЛО прилетело и опубликовало эту надпись здесь
«Мне лично [a, b) как-то ближе. » — это скорее рассуждения тупенькой первокурсницы, чем матерого программера, т.к. программер руководствуется названием используемой функции (а не тем что ему «ближе») и знанием родного каждому айтишнику языка (английского, если вдруг не понятно). «inRange» — это [a,b], и никак иначе.
Наверное, потому что для создателей питона английский не родной, там будет для k in range(0,10) одназначное [a,b). Хотя можно сказать что это просто другая языковая конструкция нежели именно inRange.
Сперва подумаю, что [0,10].
Сразу вторая мысль о PHP, как о примере «великолепного» соблюдения однотипности названий и параметров функций.

Перестаю думать, лезу в мануал.
а мой мозг без сомнений выдал: «подходят k от 0 до 10, включая 0 и 10» :)
Ваш мозг может сослужить вам дурную службу, потому что, видя такой код, лучше всего засомневаться и проверить. А то я знаю умельцев, у которых это может значить даже «10 подходит к промежутку от k до 0».
НЛО прилетело и опубликовало эту надпись здесь
Мне непонятно, почему второй вариант популярней первого. Помоему, тут либо закрытый «наглухо» промежуток, либо с включением с обоих сторон, но никак не третье. (сам выбрал первый вариант, [a, b] )
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Почему-то, второй вариант мне в голову не пришел бы сам.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Второй — ассоциация с циклом (i=0; i
Второй — ассоциация с циклом (i=0; i<10; i++) или k in range(0, 10) в python
думаю язык тут не малое значение имеет, т.е. язык влияет на привычки/восприятие
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации