Saya biasanya kode baik dalam c # atau Objective-C dan baru-baru ini mengambil sendiri untuk belajar bahasa pemrograman baru Apple - Swift.
Hal pertama yang saya perhatikan adalah Anda tidak perlu menambahkan titik koma untuk mengakhiri garis di Swift tetapi jika Anda melakukannya - setidaknya dari apa yang saya uji - itu tidak mengganggu kompiler.
Ketika saya menulis:
int someNumber = 0;
di Objective-C titik koma memberitahu program bahwa garis sudah berakhir dan tidak jatuh ke baris berikutnya.
Dengan Swift saya dapat mendeklarasikan variabel dengan
var someNumber:Int = 5
dan tidak menambahkan titik koma dan sistem tahu bahwa ini adalah akhir dari baris.
Apa yang memungkinkan beberapa bahasa melakukan ini dan yang lain tidak? Mengapa tidak menyimpan sistem seragam untuk menambahkan titik koma di akhir?
Jawaban:
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:
Itu hanya urutan karakter yang entah bagaimana perlu diubah ke konsep "buat 'benda' yang disebut
someNumber
tipeint
dan tetapkan0
untuk itu" .Ini membutuhkan pengidentifikasian di mana tepatnya pernyataan itu dimulai dan berakhir. Bayangkan jika Anda memiliki ini:
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: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.
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:
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!
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.
sumber
Jeda baris digunakan alih-alih titik koma untuk membatasi akhir pernyataan.
Dalam panduan Bahasa: Dasar-Dasar dikatakan:
Mengapa? Karena begitulah perancang bahasa ingin melakukannya.
Kalimat kedua di atas mengisyaratkan mengapa Anda tidak perlu titik koma; kebanyakan pernyataan adalah satu baris. Lihat contoh Bubble Sort ini; kombinasi pernyataan baris tunggal dan tanpa titik koma menghasilkan sintaks yang sangat bersih yang mirip-VB, tetapi kurang verbose:
Karena pernyataan dalam Swift biasanya berakhir pada jeda baris, kebutuhan titik koma untuk menandai akhir pernyataan berkurang. Bahasa lain yang menggunakan titik koma tidak berfungsi seperti ini; Anda dapat dengan bebas menulis pernyataan multi-baris, tetapi satu-satunya cara kompiler mengetahui bahwa pernyataan tersebut telah berakhir adalah ketika Anda menempatkan titik koma di akhir.
Ketika pernyataan tidak berakhir pada jeda baris, Anda harus meletakkan jeda baris di tempat yang dapat dikenali oleh kompiler Swift sebagai kelanjutan dari baris sebelumnya:
sumber