Apa yang memungkinkan beberapa bahasa melakukan ini dan yang lain tidak? Mengapa tidak menyimpan sistem seragam untuk menambahkan titik koma di akhir?
Robert memberikan jawaban yang baik mengenai Swift, saya akan mencoba menambahkan sedikit lebih banyak tentang parsing secara umum dan mengapa menggunakan atau tidak titik koma.
Ketika Anda mengkompilasi program, ada beberapa langkah sebelum file sumber Anda diubah menjadi kode yang dapat dieksekusi, salah satu yang pertama adalah membaca dan menguraikan . Selama parsing kode Anda diubah dari urutan karakter menjadi representasi terstruktur sesuai dengan tata bahasa. Untuk ini, elemen-elemen yang menyusun kode Anda (variabel, konstanta, deklarasi, dll.) Perlu diidentifikasi dan dipisahkan. Saat Anda membuat deklarasi seperti:
int someNumber = 0;
Itu hanya urutan karakter yang entah bagaimana perlu diubah ke konsep "buat 'benda' yang disebut someNumber
tipe int
dan tetapkan 0
untuk itu" .
Ini membutuhkan pengidentifikasian di mana tepatnya pernyataan itu dimulai dan berakhir. Bayangkan jika Anda memiliki ini:
int someNumber = 0;
int otherNumber = 1;
Anda perlu tahu bahwa itu adalah dua deklarasi yang berbeda. Dalam ;
bahasa seperti C digunakan untuk itu, jadi parser membaca karakter sampai menemukan satu, dan mencoba untuk memahami apa yang baru saja dibaca sebagai pernyataan tunggal. Ini memungkinkan, seperti yang dikatakan Robert, memiliki beberapa pernyataan di baris yang sama, seperti:
int someNumber = 0; int otherNumber = 1;
Yang memiliki efek yang persis sama dengan menuliskannya dalam dua baris.
Dalam bahasa lain, seperti Python , Anda diharapkan untuk menempatkan setiap pernyataan di baris yang berbeda.
x = 3
if x < 10:
print 'x smaller than 10'
else:
print 'x is bigger than 10 or equal'
Jadi tidak perlu menambahkan ;
, karena bahasa itu sendiri mencegah Anda menambahkan pernyataan di baris yang sama!
Namun bahasa lain, seperti LISP atau Skema , memiliki cara pengelompokan pernyataan yang sangat berbeda (ok, mereka bukan benar-benar pernyataan, tapi mari kita abaikan itu untuk saat ini). Jadi Anda hanya memiliki kurung untuk semuanya:
(define (do-stuff x)
(begin
(display (format "value: ~a" x))
x))
Sekali lagi, Anda tidak perlu ;
hanya karena Anda menggunakan simbol-simbol yang sama ( )
, (
) untuk hal-hal yang dalam bahasa lain adalah {
, }
, :
, dll Seseorang yang hanya tahu sintaks Lisp mungkin bertanya: Mengapa Anda perlu ;
pada akhir pernyataan Anda ?
Sebagai contoh tambahan: OCaml tidak hanya memiliki titik koma di akhir pernyataan ... ia memiliki dua!
let rec fact x =
if x <= 1 then 1 else x * fact (x - 1);;
Mengapa? Saya tidak tahu :)
Bahasa yang berbeda dirancang dengan tujuan dan filosofi yang berbeda pula. Jika semua bahasa berbagi sintaks dan konvensi yang sama, mereka mungkin hanya akan memungkinkan Anda untuk melakukan hal yang sama dengan cara yang sama.