Що дозволяє деяким мовам робити це, а іншим - ні? Чому б не зберегти єдину систему додавання крапки з комою до кінця?
Роберт дав хорошу відповідь щодо Swift, я спробую додати трохи більше про розбір в цілому і чому використовувати чи ні крапки з комою.
Коли ви компілюєте програму, перед тим, як ваш вихідний файл перетвориться на виконуваний код, слід виконати кілька кроків, одним з перших є читання та аналіз . Під час розбору ваш код перетворюється з послідовності символів у структуроване подання відповідно до граматики мови. Для цього необхідно, щоб елементи, що складають ваш код (змінні, константи, декларації тощо), були якось ідентифіковані та відокремлені. Коли ви робите декларацію, як:
int someNumber = 0;
Це просто послідовність символів, яку якимось чином потрібно звернути до поняття "створити" річ ", що називається someNumber
типу, int
і призначити 0
їй" .
Для цього потрібно визначити, де саме починається і закінчується твердження. Уявіть, якби у вас це було:
int someNumber = 0;
int otherNumber = 1;
Вам потрібно знати, що це дві різні декларації. ;
У C-подібних мовах використовується для цього, так що синтаксичний аналізатор зчитує символи до тих пір, поки не знайде, і спроби зрозуміти , що було просто читати як одне твердження. Це дозволяє, як сказав Роберт, мати кілька тверджень в одному рядку, наприклад:
int someNumber = 0; int otherNumber = 1;
Що має точно такий же ефект, як написання їх у два рядки.
В інших мовах, як-от Python , очікується, що викладете кожне твердження в інший рядок.
x = 3
if x < 10:
print 'x smaller than 10'
else:
print 'x is bigger than 10 or equal'
Тож не потрібно додавати а ;
, оскільки сама мова заважає додавати заяви в той самий рядок!
Однак інші мови, як LISP або Scheme , мають зовсім інший спосіб групування висловлювань (гаразд, це насправді не твердження, але давайте ігноруємо це зараз). Отже, у вас просто дужки для всього:
(define (do-stuff x)
(begin
(display (format "value: ~a" x))
x))
Знову ж , вам не потрібно ;
тільки тому , що ви використовуєте одні і ті ж символи ( )
, (
) за те , що в інших мовах {
, }
, :
і т.д. Хто - то , хто знає синтаксис Lisp може запитати: Навіщо вам ;
в кінці вашого заяви ?
Просто додамо незнайомий приклад: OCaml має не лише крапку з комою в кінці висловлювань, а й дві!
let rec fact x =
if x <= 1 then 1 else x * fact (x - 1);;
Чому? Не знаю. :)
Різні мови розроблені з різною метою та різною філософією. Якби всі мови поділили один і той же синтаксис та умовні умови, вони, ймовірно, дозволять вам робити те саме, що однаково.