Menggubah IO
Menyusun kesan
Menggubah IO ialah pelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian percuma di CoddyKit. Ini ialah pelajaran 3 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.
Menyusun dengan flatMap
Oleh sebab IO ialah monad, Anda menggubah kesan dengan flatMap. Setiap langkah berjalan mengikut turutan, dan langkah kemudian boleh menggunakan hasil langkah terdahulu.
import cats.effect.IO
val program: IO[Unit] =
IO("Alice").flatMap(name => IO.println(s"Hello, $name"))for-comprehension
for-comprehension ditukar secara dalaman kepada flatMap/map dan kelihatan seperti skrip imperatif sambil kekal tulen.
import cats.effect.IO
val prog: IO[Unit] = for {
_ <- IO.println("What is your name?")
name <- IO("Bob")
_ <- IO.println(s"Hi $name")
} yield ()Turutan Dikekalkan
Kesan dalam for-comprehension berjalan dari atas ke bawah apabila atur cara dilaksanakan. Struktur kod Anda mencerminkan turutan pelaksanaan.
Menggabungkan Kesan Bebas
Apabila dua kesan tidak bergantung antara satu sama lain, gunakan mapN atau (a, b).tupled untuk menggabungkannya. Secara lalai, kedua-duanya masih berjalan secara berurutan tetapi menyatakan bahawa tiada kebergantungan.
import cats.effect.IO
import cats.syntax.apply._
val combined: IO[Int] = (IO(2), IO(3)).mapN(_ + _)Menjalankan Kesan Secara Selari
Gunakan parMapN (daripada cats.syntax.parallel) untuk menjalankan kesan bebas secara serentak pada fiber berasingan dan menggabungkan hasilnya.
import cats.effect.IO
import cats.syntax.parallel._
val par: IO[Int] = (IO(2), IO(3)).parMapN(_ + _)Membuang Hasil
Gunakan *> untuk menjalankan kesan dan mengekalkan hasil kedua, atau <* untuk mengekalkan hasil pertama. void membuang hasil sepenuhnya lalu menghasilkan IO[Unit].
import cats.effect.IO
val r1: IO[Int] = IO.println("log") *> IO(42)
val r2: IO[Unit] = IO(99).voidMengulangi Kesan
replicateA(n) menjalankan kesan sebanyak n kali dan mengumpulkan hasilnya ke dalam senarai. foreverM mengulanginya tanpa henti.
import cats.effect.IO
val three: IO[List[Unit]] = IO.println("tick").replicateA(3)Melalui List
Tukarkan List[A] kepada kesan terhadap List[B] dengan traverse. Setiap unsur menghasilkan satu IO, dan hasilnya dikumpulkan.
import cats.effect.IO
import cats.syntax.traverse._
val names = List("a", "b", "c")
val prog: IO[List[Unit]] = names.traverse(n => IO.println(n))parTraverse
parTraverse ialah versi selari bagi traverse — kesan setiap unsur berjalan pada fiber sendiri, sesuai untuk input/output serentak seperti mengambil banyak URL.
import cats.effect.IO
import cats.syntax.parallel._
val ids = List(1, 2, 3)
val prog: IO[List[Int]] = ids.parTraverse(id => IO(id * 10))Atur Cara yang Digubah
Atur cara ini membaca satu nilai, menggandakannya, dan mencetak hasilnya — semuanya digubah daripada langkah IO kecil dalam satu penerangan.
import cats.effect.{IO, IOApp}
object Doubler extends IOApp.Simple {
def run: IO[Unit] = for {
n <- IO(21)
d = n * 2
_ <- IO.println(s"Doubled: $d")
} yield ()
}Penyusunan Scala Biasa
Sebagai perbandingan, berikut ialah output konsol berurutan dalam Scala biasa — bersemangat dan tidak tulen, tidak seperti versi IO yang ditangguhkan di atas.
object Main {
def main(args: Array[String]): Unit = {
val n = 21
val d = n * 2
println(s"Doubled: $d")
}
}Semakan Pantas
Kaedah manakah yang menjalankan dua kesan bebas secara serentak dan menggabungkan hasilnya?
Imbas Kembali
Anda telah menggubah atur cara IO dengan:
flatMapdanforuntuk penyusunanmapN/parMapNuntuk kesan bebas*>,<*,voiduntuk menggabungkan atau membuangtraverse/parTraverseuntuk koleksi
Seterusnya: mengendalikan ralat dalam IO.
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 “Menggubah IO” percuma?
Ya — teks penuh “Menggubah IO” 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 “Menggubah IO”?
Menyusun kesan 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 3 daripada 4.
Berapa lamakah pelajaran “Menggubah IO” 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.