Jenis Kesatuan dan Persilangan
Ciri jenis baharu
Jenis Kesatuan dan Persilangan ialah pelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian merangkumi sejumlah 4 pelajaran.
Ciri Jenis Baharu
Scala 3 menambah jenis kesatuan (A | B) dan jenis persilangan (A & B) kepada sistem jenis. Ciri ini membolehkan anda menerangkan nilai dengan lebih tepat tanpa hierarki pewarisan.
object Main:
def main(args: Array[String]): Unit =
println("Union: A | B, Intersection: A & B")Asas Jenis Kesatuan
Jenis kesatuan A | B mewakili nilai yang sama ada A atau B. Ia ialah operasi OR berasaskan teori set terhadap jenis.
object Main:
def show(x: Int | String): String = x match
case i: Int => s"int $i"
case s: String => s"str $s"
def main(args: Array[String]): Unit =
println(show(42))
println(show("hi"))Kesatuan Tidak Memerlukan Superjenis Sepunya
Berbeza daripada Either Scala 2, jenis kesatuan tidak memerlukan pembalutan. Mana-mana dua jenis boleh disatukan tanpa berkongsi kelas induk.
object Main:
def parse(input: Int | Boolean): String =
input match
case n: Int => s"number $n"
case b: Boolean => s"flag $b"
def main(args: Array[String]): Unit =
println(parse(7))
println(parse(true))Kesatuan untuk Pemodelan Ralat
Jenis kesatuan berguna untuk hasil ralat ringan tanpa jenis pembalut. Apabila digabungkan dengan enum atau singleton, kodnya mudah dibaca.
case object NotFound
object Main:
def lookup(id: Int): String | NotFound.type =
if id == 1 then "Alice" else NotFound
def main(args: Array[String]): Unit =
println(lookup(1))
println(lookup(2))Asas Jenis Persilangan
Jenis persilangan A & B mewakili nilai yang merupakan A dan B. Ia ialah operasi AND berasaskan teori set, yang sering digunakan untuk menggabungkan trait.
trait Named:
def name: String
trait Aged:
def age: Int
object Main:
def describe(p: Named & Aged): String =
s"${p.name} is ${p.age}"
def main(args: Array[String]): Unit =
val person = new Named with Aged:
def name = "Bob"
def age = 40
println(describe(person))Persilangan Bersifat Komutatif
Turutan tidak penting bagi jenis persilangan: A & B ialah jenis yang sama dengan B & A. Ini berbeza daripada jenis kompaun Scala 2 A with B, yang peka terhadap turutan dalam sesetengah penyelesaian ahli.
trait Readable:
def read: String
trait Writable:
def write(s: String): Unit
object Main:
def use(r: Readable & Writable): Unit =
r.write("x")
println(r.read)
def main(args: Array[String]): Unit =
val rw = new Readable with Writable:
def read = "data"
def write(s: String) = println(s"wrote $s")
use(rw)Menggabungkan Pelbagai Trait
Anda boleh menyilangkan lebih daripada dua jenis. Hasilnya memerlukan semua keupayaan yang disenaraikan.
trait A: def a: Int
trait B: def b: Int
trait C: def c: Int
object Main:
def sum(x: A & B & C): Int = x.a + x.b + x.c
def main(args: Array[String]): Unit =
val v = new A with B with C:
def a = 1
def b = 2
def c = 3
println(sum(v))Alias Jenis untuk Kesatuan
Jenis kesatuan yang panjang boleh dinamakan dengan alias type supaya tandatangan kekal mudah dibaca.
type Json = Int | String | Boolean
object Main:
def render(j: Json): String = j match
case i: Int => i.toString
case s: String => s"\"$s\""
case b: Boolean => b.toString
def main(args: Array[String]): Unit =
println(render("hi"))
println(render(true))Padanan Menyeluruh pada Kesatuan
Penyusun mengetahui ahli-ahli sesuatu kesatuan, jadi padanan boleh disemak kelengkapannya. Mengendalikan setiap alternatif menjadikan padanan itu menyeluruh.
type Shape = "circle" | "square"
object Main:
def sides(s: Shape): Int = s match
case "circle" => 0
case "square" => 4
def main(args: Array[String]): Unit =
println(sides("square"))Pelebaran Kesatuan
Apabila anda menetapkan nilai kesatuan kepada pemboleh ubah yang jenisnya dibuat kesimpulan, Scala mengekalkan jenis kesatuan tersebut. Perhatikan bahawa sesetengah operasi melebarkan jenis kepada had atas terendah, jadi nyatakan jenis apabila anda mahu mengekalkan kesatuan.
object Main:
def pick(flag: Boolean): Int | String =
if flag then 1 else "one"
def main(args: Array[String]): Unit =
val x: Int | String = pick(false)
println(x)Bila Hendak Menggunakan Setiap Jenis
Pilih alat yang sesuai.
- Kesatuan: nilai ialah salah satu daripada beberapa jenis (OR).
- Persilangan: nilai memenuhi beberapa trait serentak (AND).
- Kesatuan mengelakkan jenis pembalut; persilangan mengelakkan pewarisan yang mendalam.
trait Logger: def log(s: String): Unit
trait Clock: def now: Long
object Main:
def run(env: Logger & Clock): Unit =
env.log(s"time=${env.now}")
def main(args: Array[String]): Unit =
val env = new Logger with Clock:
def log(s: String) = println(s)
def now = 100L
run(env)Semakan Ringkas
Uji pemahaman anda tentang jenis kesatuan dan persilangan.
Rumusan
Anda telah mempelajari jenis kesatuan dan persilangan Scala 3.
A | B: nilai ialah A atau B, tanpa pembalut atau induk sepunya.A & B: nilai ialah A dan B; bersifat komutatif.- Gunakan padanan corak untuk mengecilkan kesatuan; gabungkan trait dengan persilangan.
- Gunakan alias
typeuntuk menamakan kesatuan yang panjang.
object Main:
def length(x: String | List[Int]): Int = x match
case s: String => s.length
case l: List[Int] => l.length
def main(args: Array[String]): Unit =
println(length("hello"))
println(length(List(1, 2, 3)))Pelajari Scala dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 39
- Pelajaran
- 143
Soalan Lazim
Adakah pelajaran “Jenis Kesatuan dan Persilangan” percuma?
Ya — teks penuh “Jenis Kesatuan dan Persilangan” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian, tingkat taraf kepada CoddyKit PRO. Kursus Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Jenis Kesatuan dan Persilangan”?
Ciri jenis baharu Anda berlatih Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Jenis Kesatuan dan Persilangan” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian ini?
Ya. Setiap pelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Indentasi Signifikan
- Enum dalam Scala 3
- Jenis Opaque
- Jenis Kesatuan dan Persilangan