Saya baru saja membaca: http://oldfashionedsoftware.com/2008/08/20/a-post-about-nothing/
Sejauh yang saya mengerti, itu Null
adalah sifat dan satu-satunya contoh adalah null
.
Ketika sebuah metode mengambil argumen Null, maka kita hanya dapat meneruskannya sebagai Null
referensi atau null
secara langsung, tetapi tidak untuk referensi lain, meskipun nilainya null ( nullString: String = null
misalnya).
Saya hanya ingin tahu dalam kasus mana menggunakan Null
sifat ini dapat berguna. Ada juga sifat Tidak Ada yang tidak benar-benar saya lihat contohnya.
Saya juga tidak begitu mengerti apa perbedaan antara menggunakan Nothing dan Unit sebagai tipe pengembalian, karena keduanya tidak mengembalikan hasil apa pun, bagaimana cara mengetahui mana yang akan digunakan ketika saya memiliki metode yang melakukan logging misalnya?
Apakah Anda memiliki penggunaan Unit / Null / Nothing sebagai sesuatu yang lain selain tipe pengembalian?
Artikel yang Anda kutip bisa menyesatkan. The
Null
jenis ada untuk kompatibilitas dengan mesin virtual Java , dan Jawa pada khususnya.Kita harus mempertimbangkan Scala itu :
null
referensi untuk mengakses, misalnya, pustaka dan kode Javadengan demikian menjadi perlu untuk mendefinisikan tipe untuk
null
nilai, yang merupakanNull
sifat, dannull
sebagai satu-satunya contoh.Tidak ada yang sangat berguna dalam
Null
tipe kecuali Anda adalah tipe-sistem atau Anda sedang mengembangkan pada compiler. Secara khusus saya tidak dapat melihat alasan yang masuk akal untuk menentukanNull
parameter tipe untuk suatu metode, karena Anda tidak dapat melewatkan apa pun kecualinull
sumber
Unit
bisa digunakan seperti ini:Ini memungkinkan Anda untuk mengirimkan blok kode arbitrer untuk dieksekusi.
Null
dapat digunakan sebagai tipe bawah untuk nilai apa pun yang nihil. Contohnya begini:Nothing
digunakan dalam definisiNone
Ini memungkinkan Anda untuk menetapkan
None
jenis apa punOption
karenaNothing
'memperluas' segalanya.sumber
jika Anda menggunakan
Nothing
, tidak ada yang harus dilakukan (termasuk konsol cetak) jika Anda melakukan sesuatu, gunakan tipe keluaranUnit
... lalu bagaimana cara menggunakannya
Nothing
?sumber
E
dalamOption
harus dalam posisi kovarian:trait Option[+E]
untuk memungkinkan hal-hal sepertival x: Option[Int] = None
Saya tidak pernah benar-benar menggunakan
Null
tipe tersebut, tetapi Anda menggunakanUnit
, di mana Anda akan menggunakan javavoid
.Nothing
adalah tipe khusus, karena seperti yang telah disebutkan Nathan, tidak ada contohNothing
.Nothing
adalah apa yang disebut tipe bawah, yang berarti, itu adalah sub-tipe dari tipe lain. Ini (dan parameter tipe kontravarian) adalah mengapa Anda dapat menambahkan nilai apa pun keNil
- yang merupakan aList[Nothing]
- dan daftar kemudian akan menjadi jenis elemen ini.None
juga jika tipeOption[Nothing]
. Setiap upaya untuk mengakses nilai di dalam wadah seperti itu akan memunculkan pengecualian, karena itulah satu-satunya cara yang valid untuk kembali dari metode tipeNothing
.sumber
IO[Unit]
untuk mencetak ke konsol dan sejenisnya.Tidak ada yang sering digunakan secara implisit. Dalam kode di bawah,
val b: Boolean =
if (1 > 2) false
else throw new RuntimeException("error")
yang lain klausa adalah tipe ada , yang merupakan subclass dari Boolean (serta setiap AnyVal lainnya). Dengan demikian, keseluruhan tugas valid untuk kompilator, meskipun klausa else tidak benar-benar mengembalikan apa pun.sumber
Berikut contoh
Nothing
dariscala.predef
:Jika Anda tidak terbiasa (dan mesin pencari tidak dapat mencarinya)
???
adalah fungsi placeholder Scala untuk apa pun yang belum diimplementasikan. Sama seperti KotlinTODO
.Anda dapat menggunakan trik yang sama saat membuat objek tiruan: ganti metode yang tidak digunakan dengan metode khusus
notUsed
. Keuntungan tidak menggunakan???
adalah Anda tidak akan mendapatkan peringatan kompilasi untuk hal-hal yang tidak ingin Anda implementasikan.sumber
Dari segi teori kategori Tidak ada objek awal dan Unit adalah objek terminal .
https://en.wikipedia.org/wiki/Initial_and_terminal_objects
Objek awal juga disebut koterminal atau universal , dan objek terminal juga disebut akhir .
Jika sebuah objek adalah inisial dan terminal , itu disebut objek nol atau objek nol .
sumber