Haruskah saya menggunakan titik koma untuk membatasi pernyataan Scala?

9

Saya terbiasa membatasi pernyataan dengan titik koma dari Jawa, jadi tentu saja saya melakukannya dalam kode Scala juga. Saya juga merasa bahwa kodenya lebih mudah dibaca, karena jelas di mana satu pernyataan berakhir dan yang lain dimulai. Tetapi berkali-kali ketika saya memposting sepotong kode Scala pada SO, kode tersebut diedit hanya untuk menghilangkan titik koma.

  1. Haruskah saya menggunakan titik koma atau tidak? Apakah ada pedoman atau gaya penulisan kode "resmi"?
  2. Apakah ada kasus di mana tanda titik koma diperlukan, jika tidak, kodenya ambigu?
Petr Pudlák
sumber
5
Apakah Haskell tidak mengajarimu apa-apa? ; P menghapus sintaks yang tidak perlu, titik koma hanya boleh digunakan untuk memecah beberapa klausa / pernyataan pada baris yang sama
Jimmy Hoffa
@JimmyHoffa Haskell mengajari saya bahwa sintaks harus cantik dan konsisten :).
Petr Pudlák
2
Bagian pertama dari itu adalah mengapa saya merasa jengkel setiap kali saya melihat cuplikan Scala ...
Jimmy Hoffa

Jawaban:

9

Tidak ada cara resmi "benar" untuk melakukannya, tetapi kebanyakan praktisi menghilangkan titik koma di mana pun mereka bisa (itulah sebabnya begitu banyak orang menghapus titik koma secara refleks).

Bahasa ini berusaha sangat keras untuk membuat Anda lupa tentang perlunya mengakhiri pernyataan sama sekali. Sayangnya, itu tidak cukup berhasil, jadi ada berbagai situasi rumit di mana titik koma, atau seperangkat tanda kurung tambahan, atau "petunjuk" serupa diperlukan untuk menghindari semantik yang tidak diinginkan. Situasi seperti itu hampir cukup langka sehingga biasanya Anda tidak perlu memikirkannya. Pendapat berbeda tentang apakah ini berarti Anda harus memberi tanda baca defensif (itulah yang saya pikir) atau tidak pernah memberi tanda baca sampai Anda mengalami masalah (itulah yang dipikirkan oleh sebagian besar pengguna). Pada akhirnya, itu menjadi milik Anda apakah Anda mengidentifikasi diri sebagai pembangkang atau warga negara teladan.

Kilian Foth
sumber
Terima kasih, bisakah Anda memberikan contoh (atau beberapa :)) dari situasi rumit seperti itu?
Petr Pudlák
3
Saya takut saya akan ditanyakan ini ... Pemrograman di Scala daftar beberapa dari mereka yang mengejutkan saya, tetapi saya tidak punya buku dengan saya saat ini, dan saya lupa detailnya. Itulah yang ingin saya sampaikan: jika saya bisa mengingat situasi luar biasa ini tidak akan seburuk itu, tetapi seperti itu, saya selalu merasa tidak yakin apakah saya dapat benar - benar menghilangkan titik koma - jadi saya tidak.
Kilian Foth
Hah. Saya tidak pernah sekalipun mengalami situasi di mana kehilangan titik koma di Scala telah menyakiti saya. Saya tidak pernah memasukkan mereka. Saya juga hanya memprogram Scala untuk hal-hal seperti hobi, jadi mungkin itu akan menggigit saya cepat atau lambat.
KChaloux
4

Seberapa besar Anda ingin mengerti bahasa yang Anda gunakan? Apakah Anda ingin bermain dengan kekuatannya atau tidak? Sintaksis Scala mendorong kode yang jelas dan ringkas; beberapa kasus tepi di mana mengambil keuntungan dari ini menyebabkan masalah bagi pengurai Scala adalah instruktif (yaitu, Anda belajar lebih banyak tentang Scala dengan menemukan dan belajar bagaimana menghindarinya) dan secara bertahap diperbaiki (misalnya notasi akhiran ). Menggunakan semi-kolon secara defensif mungkin berarti Anda tidak perlu belajar tentang masalah-masalah ini tetapi apakah Anda benar-benar melihatnya sebagai hal yang baik? Perbaikan untuk masalah ini biasanya memiliki implikasi lain tetapi Anda akan kehilangan kemungkinan ini.

Pertimbangan lain adalah bahwa, seperti yang diakui Kilian, sebagian besar pengembang Scala mengabaikan semi-titik dua secara default. Bagaimana Anda berharap untuk bekerja dengan kode orang lain jika Anda menghindari menggunakan Scala idiomatik sendiri? Anda akan merasa jauh lebih sulit daripada yang seharusnya.

Saya tidak bisa cukup menekankan bahwa fitur-fitur parser Scala ini dipilih untuk mendorong kode yang bersih, dapat digunakan kembali, dan fungsional (dalam arti fp). Ambil sintaks operator infix sebagai contoh; itu mendorong pengembang untuk melengkapi kelas dengan metode sederhana, satu tujuan yang menyusun bersama dengan baik. Perpustakaan koleksi Scala menunjukkan betapa indahnya itu bisa bekerja. Para pengembang Jawa yang terlatih secara klasik yang merangkul ini akan cenderung mengembangkan kebiasaan yang lebih baik dan cara berpikir baru tentang kode mereka. Mereka yang berpegang teguh pada semua titik dan tanda kurung yang sudah dikenal akan kehilangan. Saya berpendapat bahwa ini juga berlaku bagi mereka yang terlalu takut untuk meninggalkan titik koma.

itu otaknya
sumber
8
-1 ya, karena "dipaksa" untuk belajar bahasa karena kompiler gotchas keluar dari gaya dengan C ++. Juga, ada sedikit bukti di balik pernyataan itu, yang ingin saya jawab dengan nada bias.
Telastyn
(1) Apa yang dikatakan @Telastyn - jika Anda benar-benar ingin belajar bahasa dengan cara ini, dapatkan kucing, mereka suka duduk di keyboard karena mereka peduli dengan pendidikan Anda. (2) Menghilangkan titik koma tidak ada hubungannya dengan gaya bersih atau mendorongnya - jika ada, menjatuhkan titik koma menyembunyikan fakta bahwa ini adalah pernyataan terpisah yang dieksekusi secara berurutan, dan mungkin memiliki efek samping. Membiarkan titik koma membuat Anda sadar akan hal itu dan karenanya lebih menyukai gaya yang lebih fungsional. Keputusan karena itu murni sintaksis (misalnya, gaya, parsing, dll).
Eli Barzilay
Sementara "dipaksa untuk belajar bahasa" tidak terbang, "menggunakan bahasa seperti yang dimaksudkan penulisnya" dan "sebagaimana kebanyakan pengembang lain menggunakannya" adalah poin referensi penting. Mempertahankan gaya yang konsisten antara banyak pengembang berguna. Dari jawaban ini dan juga dari @Killan Foth, pengelola dan sebagian besar pengembang tampaknya melihat tanda titik koma sebagai hal yang asing.
Sarah Messer