Saya hanya akan membahas beberapa tutorial Scala di Internet dan telah memperhatikan dalam beberapa contoh objek dinyatakan pada awal contoh.
Apa perbedaan antara class
dan object
dalam Scala?
class C
mendefinisikan sebuah kelas, seperti halnya di Java atau C ++.object O
menciptakan objek tunggalO
sebagai turunan dari beberapa kelas anonim; dapat digunakan untuk menampung anggota statis yang tidak terkait dengan instance beberapa kelas.object O extends T
menjadikan objek O
sebagai instance dari trait T
; Anda kemudian bisa lewat di O
mana saja, yang T
diharapkan.class C
, maka object C
adalah objek pendamping kelas C
; perhatikan bahwa objek pendamping tidak secara otomatis turunan dari C
.Lihat juga dokumentasi Scala untuk objek dan kelas .
object
sebagai tuan rumah anggota statisPaling sering, Anda memerlukan sebuah object
untuk menyimpan metode dan nilai / variabel yang harus tersedia tanpa harus terlebih dahulu membuat instance instance dari beberapa kelas. Penggunaan ini terkait erat dengan static
anggota di Jawa.
object A {
def twice(i: Int): Int = 2*i
}
Anda kemudian dapat memanggil metode di atas menggunakan A.twice(2)
.
Jika twice
adalah anggota dari beberapa kelas A
, maka Anda harus membuat instance terlebih dahulu:
class A() {
def twice(i: Int): Int = 2 * i
}
val a = new A()
a.twice(2)
Anda dapat melihat betapa mubazirnya ini, karena twice
tidak memerlukan data spesifik-instance.
object
sebagai contoh bernama khususAnda juga dapat menggunakan object
itu sendiri sebagai beberapa contoh khusus dari kelas atau sifat. Ketika Anda melakukan ini, objek Anda perlu memperluas beberapa trait
untuk menjadi turunan dari subkelasnya.
Pertimbangkan kode berikut:
object A extends B with C {
...
}
Deklarasi ini pertama-tama mendeklarasikan kelas anonim (tidak dapat diakses) yang memperluas keduanya B
dan C
, dan membuat instance turunan dari kelas ini bernama A
.
Ini berarti A
dapat diteruskan ke fungsi mengharapkan objek bertipe B
atau C
, atau B with C
.
object
Ada juga ada beberapa fitur khusus objek di Scala. Saya merekomendasikan untuk membaca dokumentasi resmi .
def apply(...)
mengaktifkan sintaks tanpa nama metode biasa A(...)
def unapply(...)
memungkinkan untuk membuat ekstraktor pencocokan pola khusus
Commerce
kelas, tetapi JVM dan bahasa Java akan melakukannya. (Begitulah cara Anda dapat melakukanobject Foo{ def main(args:Seq[String]) }
dan mengharapkan program berjalan.)A
class
adalah definisi, deskripsi. Ini mendefinisikan jenis dalam hal metode dan komposisi jenis lainnya.An
object
adalah singleton - turunan dari sebuah kelas yang dijamin unik. Untuk setiapobject
kode, kelas anonim dibuat, yang mewarisi dari kelas apa pun yang Anda nyatakanobject
akan diterapkan. Kelas ini tidak dapat dilihat dari kode sumber Scala - meskipun Anda bisa mendapatkannya melalui refleksi.Ada hubungan antara
object
danclass
. Suatu objek dikatakan sebagai objek pendamping kelas jika mereka memiliki nama yang sama. Ketika ini terjadi, masing-masing memiliki akses ke metodeprivate
visibilitas yang lain. Metode ini tidak diimpor secara otomatis. Anda harus mengimpornya secara eksplisit, atau awalan dengan nama kelas / objek.Sebagai contoh:
sumber
def f(x: X) = ???
, maka itu akan dapat memanggil metode pribadix
, dari kelas pendampingX
.Objek memiliki tepat satu instance (Anda tidak dapat memanggil
new MyObject
). Anda dapat memiliki beberapa instance kelas.Obyek melayani sama (dan beberapa tambahan) tujuan sebagai metode statis dan bidang di Jawa.
sumber
Seperti yang telah dijelaskan oleh banyak orang,
object
mendefinisikan contoh tunggal. Satu hal dalam jawaban di sini yang saya yakini ditinggalkan adalahobject
melayani beberapa tujuan.Ini bisa menjadi objek pendamping ke
class
/trait
, yang mengandung apa yang mungkin dianggap metode statis atau metode kenyamanan.Ia dapat bertindak seperti sebuah modul, berisi tipe dan definisi terkait / tambahan, dll.
Itu dapat mengimplementasikan antarmuka dengan memperluas
class
satu atau lebihtrait
s.Itu bisa mewakili kasus dari
sealed trait
yang tidak mengandung data. Dalam hal ini, sering dianggap lebih benar daripadacase class
tanpa parameter. Kasus khusussealed trait
dengancase object
implementor hanya kurang lebih adalah versi Scala dari enum.Itu dapat bertindak sebagai bukti untuk
implicit
logika-driven.Ini memperkenalkan tipe singleton.
Ini adalah konstruksi yang sangat kuat dan umum. Apa yang bisa sangat membingungkan bagi pemula Scala adalah bahwa konstruksi yang sama dapat memiliki kegunaan yang sangat berbeda. Dan
object
dapat melayani banyak kegunaan yang berbeda sekaligus, yang bahkan bisa lebih membingungkan.sumber
Mendefinisikan objek di Scala seperti mendefinisikan kelas di Java yang hanya memiliki metode statis. Namun, dalam Scala suatu objek dapat memperluas superclass lain, mengimplementasikan antarmuka, dan diteruskan seolah-olah itu adalah instance dari sebuah kelas. (Jadi seperti metode statis di kelas tapi lebih baik).
sumber
Perbedaan formal -
Perbedaan penggunaan:
object
. Anda dapat menggunakannya dengan atau tanpa kelas terkait. Dalam 1 kasus itu disebut objek pengiring. Kamu harus:Untuk membuat program, Anda harus menggunakan metode utama
object
, bukan diclass
.Anda juga dapat menggunakannya saat menggunakan objek singleton di java.
sumber
Kata kunci objek membuat tipe singleton baru, yang seperti kelas yang hanya memiliki instance bernama tunggal. Jika Anda terbiasa dengan Java, mendeklarasikan objek dalam Scala sangat mirip dengan membuat instance baru dari kelas anonim.
Scala tidak memiliki padanan dengan kata kunci statis Java , dan sebuah objek sering digunakan dalam Scala di mana Anda mungkin menggunakan kelas dengan anggota statis di Jawa.
sumber
Objek adalah kelas tetapi sudah memiliki instance, sehingga Anda tidak dapat memanggil
new ObjectName
. Di sisi lain, Kelas hanya mengetik dan itu bisa menjadi contoh dengan memanggilnew ClassName()
.sumber
Dalam scala, tidak ada
static
konsep. Jadi scala membuat objek tunggal untuk menyediakan titik masuk untuk eksekusi program Anda. Jika Anda tidak membuat objek tunggal, kode Anda akan berhasil dikompilasi tetapi tidak akan menghasilkan output. Metode yang dinyatakan dalam Singleton Object dapat diakses secara global. Objek tunggal dapat memperluas kelas dan sifat.Contoh Objek Scala Singleton
Keluaran:
Dalam scala, ketika Anda memiliki kelas dengan nama yang sama dengan objek singleton, itu disebut kelas pendamping dan objek singleton disebut objek pendamping.
Kelas pendamping dan objek pendampingnya keduanya harus didefinisikan dalam file sumber yang sama.
Contoh Objek Pengiring Scala
Keluaran:
Dalam scala, sebuah kelas dapat berisi:
1. Anggota data
2. Metode anggota
3. Blok Konstruktor
4. Kelas bersarang
5. Informasi kelas super dll.
Anda harus menginisialisasi semua variabel instan di kelas. Tidak ada ruang lingkup standar. Jika Anda tidak menentukan ruang lingkup akses, itu publik. Harus ada objek di mana metode utama didefinisikan. Ini memberikan titik awal untuk program Anda. Di sini, kami telah membuat contoh kelas.
Contoh Contoh Scala Kelas
Maaf, saya terlambat tetapi saya harap ini akan membantu Anda.
sumber
Kelas scala sama dengan Kelas Java tetapi scala tidak memberi Anda metode entri di kelas, seperti metode utama di java. Metode utama yang terkait dengan kata kunci objek. Anda dapat menganggap kata kunci objek sebagai menciptakan objek tunggal kelas yang didefinisikan secara implisit.
informasi lebih lanjut periksa kelas artikel ini dan kata kunci objek dalam pemrograman scala
sumber
Objek ini mirip dengan kelas statis di Jawa untuk beberapa perluasan, karakteristik statis berarti kelas statis tidak perlu membuat objek saat meletakkan ke JVM, dapat digunakan oleh nama kelas itu secara langsung dan contoh yang sama (keadaan data yang sama ) dibagikan di mana pun ia digunakan.
sumber
Kelas sama seperti kelas lain dalam bahasa lain. Anda mendefinisikan kelas sama seperti bahasa lain dengan beberapa perbedaan sintaksis.
Namun, objek adalah kelas dengan objek tunggal saja. Ini membuatnya menarik karena dapat digunakan untuk membuat anggota statis kelas menggunakan objek pendamping . Objek pendamping ini memiliki akses ke anggota pribadi dari definisi kelas dan memiliki nama yang sama dengan kelas yang Anda tetapkan.
Juga, poin penting adalah bahwa kelas objek dibuat dengan malas yang merupakan poin penting lainnya. Jadi, ini tidak dipakai kecuali mereka diperlukan dalam kode kami.
Jika Anda mendefinisikan pembuatan koneksi untuk JDBC, Anda dapat membuatnya di dalam objek untuk menghindari duplikasi seperti yang kita lakukan di Jawa dengan objek tunggal.
sumber
Jika Anda berasal dari latar belakang java, konsep class di scala agak mirip dengan Java, tetapi class di scala tidak boleh berisi anggota statis.
Objek dalam scala adalah tipe tunggal yang Anda panggil metode di dalamnya menggunakan nama objek, dalam objek scala adalah kata kunci dan objek java adalah instance dari kelas
sumber