Какова ценность наличия нескольких одинаково абстрактных синтаксических вариантов для кодирования чего-либо? - PullRequest
2 голосов
/ 13 февраля 2011

Я сейчас читаю на Ruby. Я думаю, что это хороший язык, но меня немного беспокоит наличие множества эквивалентных способов, которые только немного отличаются по синтаксису для кодирования одного и того же действия. Например, оператор unless conditional, который полностью эквивалентен записи if !conditional.

Для меня это не добавляет никакой выразительной силы, а только увеличивает нагрузку на кодекс других людей. Есть ли польза, которую я упускаю (кроме удовлетворения разных вкусов, что я не нахожу убедительным, поскольку люди обычно не отвергают язык, потому что некоторые синтаксические ключевые слова не соответствуют их вкусу)

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

Ответы [ 4 ]

3 голосов
/ 13 февраля 2011

Питание на разные вкусы является вероятным объяснением. Эта философия адаптирована из Perl и известна как TIMTOWTDI (есть несколько способов сделать это).

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

Но у этой техники также есть много недоброжелателей, и, в частности, Python стремится к противоположному :

Должен быть один - и желательно только один - очевидный способ сделать это.

1 голос
/ 13 февраля 2011

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

Это может быть показано для вашего unless примера:

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

if !my_bool_var
    #
end

unless my_bool_var
    #
end

Они одинаково легко читаются (и пишутся).

Однако, с более сложными логическими выражениями, форма if имеет недостатки:

if !((a + b + c) < (x-a)*b && my_bool_var || ((x - a)*b)/(c+1) > 2)
    #
end

unless (a + b + c) < (x-a)*b && my_bool_var || ((x - a)*b)/(c+1) > 2
    #
end

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

1 голос
/ 13 февраля 2011

Perl также имеет конструкцию «если», и я считаю, что она проистекает из опыта Ларри Уолла как лингвиста.

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

  if (!$isDisabled)
  {

  }

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

unless может сделать это немного больше похожим на естественный язык

  unless($isDisabled)
  {

  }
0 голосов
/ 13 февраля 2011

В общем, нормально предоставить разработчикам множество способов достижения одной и той же вещи , и, конечно, разработчикам предпочтительнее было бы выбрать другой путь.Но вы должны знать, что умный компилятор конвертирует все пути к одному и тому же результату , когда он конвертирует код в свой двоичный исполнительный формат.

...