Подтвердить что ты не робот

Почему языки программирования используют запятые для разделения параметров функции?

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

Почему они вместо этого не используют пробелы?

4b9b3361

Ответ 1

Прежде всего, ваша предпосылка ложна. Существуют языки, которые используют пространство в качестве разделителя (lisp, ML, haskell, возможно, другие).

Причина, по которой большинство языков не существует, вероятно, такова: a) f(x,y) - это обозначение, которое большинство людей используют для математики, и b) использование пробелов приводит к множеству вложенных круглых скобок (также называемых "эффектом lisp).

Ответ 2

Абсолютно нет. Как насчет этого вызова функции:

 function(a, b - c);

Как это выглядит с пробелом вместо запятой?

 function(a b - c);

Означает ли это function(a, b - c); или function(a, b, -c);? Использование запятой, по-видимому, происходит из математики, где запятые используются для разделения параметров функции на протяжении веков.

Ответ 3

Lisp -подобные языки используют: (f arg1 arg2 arg3), который по сути является тем, о чем вы просите. ML-подобные языки используют конкатенацию для применения валютных аргументов, поэтому вы пишете f arg1 arg2 arg3.

Ответ 4

Tcl использует пространство как разделитель между словами, переданными командам. Если у него есть составной аргумент, это должно быть заключено в квадратные скобки или иначе указано. Имейте в виду, что даже там вы найдете использование запятых в качестве разделителей - только в синтаксисе выражений - но это потому, что нотация используется не во всех программах. Математика написали n-арные приложения приложений в течение очень долгого времени; (особенно Fortran), просто заимствованные.

Ответ 5

Там уже упоминалось несколько исторических причин.

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

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

Вторая была бы f(a (b + c)). Теперь это f(a(b+c)) или f(a, b+c)?

Создатели JavaScript имели очень полезную идею, похожую на вашу, что дает одни и те же проблемы. Идея заключалась в том, что ENTER также может служить ;, если инструкция была завершена. Обратите внимание:

function a() {
    return "some really long string or expression or whatsoever";
}

function b() {
    return 
          "some really long string or expression or whatsoever";
}
alert(a());//"some really long string or expression or whatsoever"
alert(b());//"undefined" or "null" or whatever, because 'return;' is a valid statement

На самом деле, я иногда склонен использовать последнюю нотацию на языках, у которых нет этой "функции". JavaScript заставляет меня форматировать мой код, потому что у кого-то была классная идея: вместо ; использовать ENTER.

Я думаю, есть ряд веских причин, по которым некоторые языки являются такими, какие они есть. Особенно в динамических языках (как PHP), где нет проверки времени компиляции, когда компилятор мог предупредить вас, что способ устранения неоднозначности, как указано выше, не соответствует сигнатуре вызова, который вы хотите сделать. У вас будет много странных ошибок времени выполнения и очень тяжелая жизнь.

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

Ответ 6

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

Ответ 7

Haskell не использует запятые.

Пример

multList :: [Int] -> Int -> [Int]
multList (x : xs) y = (x * y) : (multList xs y) 
multList [] _ = []

Причина использования запятых в C/С++ заключается в том, что чтение длинного списка аргументов без разделителя может быть затруднительным без запятых

Попробуйте прочитать это

void foo(void * ptr point & * big list<pointers<point> > * t)

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

Попробуйте прочитать это

IAMTHEVERYMODELOFAWHATDOYOUWANTNOTHATSMYBUCKET

это прежде всего, чтобы помочь вам читать вещи.

Ответ 8

Это неверно. Некоторые языки не используют запятые. Функции были концепциями Maths перед программированием, поэтому некоторые языки сохраняют старые обозначения. Чем больше новее было вдохновлено C (Javascript, Java, С#, PHP тоже, они имеют некоторые формальные правила, такие как запятая).

Ответ 9

Это может показаться немного мудрым, но я собираюсь по той же причине, почему большинство языков земной планеты используют его (английский, французский и несколько других;-) Кроме того, он интуитивно понятен большинству.

Ответ 10

В то время как некоторые языки используют пробелы, использование запятой позволяет избежать неоднозначных ситуаций без необходимости в круглых скобках. Более интересным может быть вопрос, почему C использует тот же символ, что и разделитель, который используется для оператора "a then b"; последний вопрос в какой-то мере более интересен, учитывая, что набор символов C имеет три других символа, которые не отображаются ни в каком контексте (знак доллара, коммерческий и серьезный, и я знаю хотя бы один из них (знак доллара ) датируется 40-символьным набором перфокарт.

Ответ 11

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

В естественных языках, которые включают запятую в их script, этот символ используется для разделения вещей. Например, если вы перечислите фрукты, напишите: "lemon, orange, strawberry, grape" То есть, используя запятую.

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

Рассмотрим:

someFunction( name, age, location ) 

против.

someFunction (имя | возраст | местоположение)

Почему они вместо этого не используют пробелы?

Это возможно. Lisp делает это.

Основная причина заключается в том, что пространство уже используется для разделения токенов, и проще не назначать дополнительную функциональность.

Ответ 12

Я запрограммировал на нескольких языках, и, хотя запятая не является верным, она, безусловно, впереди. Запятая хорошо, потому что это видимый символ, так что script можно сжать, удалив пробелы, не нарушая вещи. Если у вас есть пространство, то вы можете иметь вкладки, и это может быть болью в... Есть проблемы с новыми строками и пробелами в конце строки. Дайте мне запятую в любой день, вы можете это увидеть, и вы знаете, что она делает. Пространства для удобства чтения (обычно) и запятые являются частью синтаксиса. Имейте в виду, что существует множество исключений, в которых требуется место или сложность. Мне также нравятся фигурные скобки.

Ответ 13

Это, вероятно, традиция. Если они использовали пространство, они не могли передать выражение как param, например.

f(a-b c)

будет сильно отличаться от

f(a -b c)

Ответ 14

Некоторые языки, такие как Boo, позволяют указать тип параметров или оставить его следующим:

def MyFunction(obj1, obj2, title as String, count as Int):       
    ...do stuff...

Значение: obj1 и obj2 могут быть любого типа (унаследованного от объекта), где, поскольку заголовок и счет должны иметь тип String и Int соответственно. Это было бы трудно сделать, используя пробелы в качестве разделителей.