uz
Feedback
ToCode

ToCode

Kanalga Telegramโ€™da oโ€˜tish

ื˜ื™ืคื™ื ืงืฆืจื™ื ืœืžืชื›ื ืชื™ื ืžืืช ื™ื ื•ืŸ ืคืจืง

Ko'proq ko'rsatish
1 420
Obunachilar
+124 soatlar
+17 kunlar
-430 kunlar
Postlar arxiv
ToCode
1 420
ื—ืžืฉ ื“ื•ื’ืžืื•ืช ืงืฆืจื•ืช ืœืฉื™ืžื•ืฉ ื‘ cat effect ื‘ืกืงืืœื” ื”ืžื ื’ื ื•ืŸ ื”ืžื•ื‘ื ื” ื‘ืกืงืืœื” ืœืชื›ื ื•ืช ืืกื™ื ื›ืจื•ื ื™ ื ืงืจื Future, ื•ื”ื•ื ืงืฆืช ืžื–ื›ื™ืจ ืืช Promise ืฉืœ JavaScript. ื”ื‘ืขื™ื” ืฉืœ ื”ืจื‘ื” ืื ืฉื™ื ืขื Future ื”ื™ื ืฉื”ื•ื ืžื™ื™ืฆื’ ืชื•ืฆืื” ืขืชื™ื“ื™ืช ื•ืœื ื—ื™ืฉื•ื‘ ืขืชื™ื“ื™. ื–ื” ืื•ืžืจ ืฉืื ื™ืฉ ืœื™ Future ื‘ื™ื“ ืื ื™ ืœื ื™ื›ื•ืœ ืœื”ืจื™ืฅ ืื•ืชื• ื›ืžื” ืคืขืžื™ื (ื›ื™ ื”ื—ื™ืฉื•ื‘ ื›ื‘ืจ ืจืฅ). ืžืกื™ื‘ื” ื–ืืช ื ื•ืฆืจื• ื”ืจื‘ื” ืกืคืจื™ื•ืช ื”ืจื—ื‘ื” ืœืฉืคื” ืฉืžืืคืฉืจื•ืช ืœื™ื™ืฆืจ ื—ื™ืฉื•ื‘ ืขืชื™ื“ื™ ื‘ืฆื•ืจื” ืคื•ื ืงืฆื™ื•ื ืืœื™ืช ื•ืœืœื Side Effects. ืื—ืช ื”ืคื•ืคื•ืœืจื™ื•ืช ื”ื™ื cats effect ื•ื”ื ื” ื—ืžืฉ ื“ื•ื’ืžืื•ืช ืจืืฉื•ื ื•ืช ืฉื›ืชื‘ืชื™ ืขื ื”ืกืคืจื™ื”. ืฉืœื•ื ืขื•ืœื ืชื•ื›ื ื™ืช ืกืงืืœื” ืจืืฉื•ื ื” ืขื cat effect ื”ื™ื ื›ืžื•ื‘ืŸ ืคื•ื ืงืฆื™ื” ืฉืžื“ืคื™ืกื” ืฉืœื•ื ืขื•ืœื:
  def demo1(): IO[ExitCode] =
    IO.println("Hello WOrld") >> IO.pure(ExitCode.Success)
ื”ืจืขื™ื•ืŸ ื”ืจืืฉื•ืŸ ื”ื—ื“ืฉ ื›ืืŸ ื”ื•ื ืฉืคื•ื ืงืฆื™ื” ืฉืืคืฉืจ ืœื”ืจื™ืฅ ื‘ืฆื•ืจื” ืืกื™ื ื›ืจื•ื ื™ืช ื–ื” ื‘ืขืฆื ืคื•ื ืงืฆื™ื” ืฉืžื—ื–ื™ืจื” IO, ื•ื–ื” ื ืงืจื ืืคืงื˜. ืœื›ืŸ ื”ืคื•ื ืงืฆื™ื” demo1 ืฉืžื—ื–ื™ืจื” IO[ExitCode] ืžืชืื™ืžื” ืœื”ืจืฆื” ื‘ืฆื•ืจื” ืืกื™ื ื›ืจื•ื ื™ืช. ื”ืกื™ืžืŸ >> ื”ื•ื ื“ืจืš ืœื—ื‘ืจ ืฉื ื™ ืืคืงื˜ื™ื ื•ืœื”ื—ื–ื™ืจ ืจืง ืืช ื”ืชื•ืฆืื” ืฉืœ ื”ืฉื ื™, ื”ืคื•ื ืงืฆื™ื” IO.println ืžื™ื™ืฆืจืช ืืคืงื˜ ืฉืžื“ืคื™ืก ืœืžืกืš ื• IO.pure ืžื™ื™ืฆืจืช ืืคืงื˜ ืฉืžื—ื–ื™ืจ ืขืจืš ืงื‘ื•ืข (ื•ื›ืŸ ืืคืฉืจ ืœื—ืฉื•ื‘ ืขืœ ืืคืงื˜ ื‘ืชื•ืจ Promise ืื‘ืœ ื–ื” ื˜ื™ืคื” ื™ื•ืชืจ ืžืกื•ื‘ืš ื›ื™ ืืคืงื˜ ืืคืฉืจ ื’ื ืœื‘ื˜ืœ). ืฉืœื•ื ืขื•ืœื ืขื ื”ืžืชื ื” ืขื›ืฉื™ื• ืฉื”ื‘ื ื• ืืช ื”ืกื™ืคื•ืจ ืฉืœ ืืคืงื˜ื™ื ืืคืฉืจ ืœื”ืžืฉื™ืš ื•ืœืจืื•ืช ืื™ืš ืžื—ื‘ืจื™ื ืื•ืชื. ื“ืจืš ืื—ืช ืœื—ื‘ืจ ืืคืงื˜ื™ื ื”ื™ื ืกื™ืžืŸ ื” >> ืฉื›ื‘ืจ ืคื’ืฉื ื• ื•ืืคืฉืจ ืœืงื—ืช ืื•ืชื• ืขื•ื“ ืฆืขื“ ืงื“ื™ืžื”. ื”ืคื•ื ืงืฆื™ื” IO.sleep ืžื—ื–ื™ืจื” ืืคืงื˜ ืฉืžื—ื›ื”, ื•ืœื›ืŸ ื”ืงื•ื“ ื”ื‘ื:
  def demo11(): IO[ExitCode] =
    IO.sleep(1000.millis) >> IO.println("1") >>
    IO.sleep(1000.millis) >> IO.println("2") >>
    IO.sleep(1000.millis) >> IO.println("3") >>
    IO.pure(ExitCode.Success)
ืžื™ื™ืฆืจ ืืคืงื˜ ืฉืžื—ื›ื” ืฉื ื™ื”, ืžื“ืคื™ืก 1, ืžื—ื›ื” ืขื•ื“ ืฉื ื™ื”, ืžื“ืคื™ืก 2, ืžื—ื›ื” ืขื•ื“ ืฉื ื™ื”, ืžื“ืคื™ืก 3 ื•ืื– ืžื—ื–ื™ืจ ื”ืฆืœื—ื”. ื“ืจืš ืื—ืจืช ื•ืงืฆืช ื™ื•ืชืจ ื™ื“ื™ื“ื•ืชื™ืช ื‘ืกืงืืœื” ืœื›ืชื•ื‘ ืื•ืชื• ื”ื™ื:
  def demo2(): IO[ExitCode] =
    for {
      _ <- IO.sleep(1000.millis) >> IO.println("1")
      _ <- IO.sleep(1000.millis) >> IO.println("2")
      _ <- IO.sleep(1000.millis) >> IO.println("3")
    } yield ExitCode.Success
ื•ื–ื• ื’ื ืžืืคืฉืจืช ืœื›ืœ ืืคืงื˜ ืœื”ืฉืชืžืฉ ื‘ืชื•ืฆืื” ืฉืœ ื”ืืคืงื˜ ืฉืœืคื ื™ื•, ืœืžืจื•ืช ืฉื‘ื“ื•ื’ืžื” ื”ืคืขื ืœื ืขืฉื™ืชื™ ืืช ื–ื” ื•ื”ืชืขืœืžืชื™ ืžื”ืชื•ืฆืื” ืฉืœ ื”ืืคืงื˜ ื”ืงื•ื“ื, ื‘ื›ืš ืฉื ืชืชื™ ืœื” ืืช ื”ืฉื _. ืฉืœื•ื ืขื•ืœื ื‘ืžืงื‘ื™ืœ ืื—ืจื™ ืฉืื ื—ื ื• ืžื‘ื™ื ื™ื ืื™ืš ืœื”ื’ื“ื™ืจ ืžืกืคืจ ืืคืงื˜ื™ื ื”ืฆืขื“ ื”ื‘ื ื”ื•ื ืœื”ืจื™ืฅ ืื•ืชื ื‘ืžืงื‘ื™ืœ, ื‘ื“ื•ืžื” ืœ Promise.all. ื‘ cats effect ื–ื” ืงื•ืจื” ืขื ืคื•ื ืงืฆื™ื” ื‘ืฉื parSequence:
  def demo3(): IO[ExitCode] =
    List(
      IO.sleep(1000.millis) >> IO.println("1"),
      IO.sleep(1000.millis) >> IO.println("2"),
      IO.sleep(1000.millis) >> IO.println("3")
    ).parSequence >> IO.pure(ExitCode.Success)
ื”ืคืขื ื”ืงื•ื“ ืžื’ื“ื™ืจ ืจืฉื™ืžื” ืฉืœ 3 ืืคืงื˜ื™ื ื•ืžืคืขื™ืœ ืขืœ ื”ืจืฉื™ืžื” ืืช parSequence. ื”ืชื•ืฆืื” ื”ื™ื ื”ืคืขืœื” ืฉืœ ืฉืœื•ืฉืช ื”ืืคืงื˜ื™ื ื‘ืžืงื‘ื™ืœ ื›ืš ืฉืื—ืจื™ ืฉื ื™ื” ื™ื•ื“ืคืกื• ืฉืœื•ืฉ ื”ื”ื•ื“ืขื•ืช ื‘ืกื“ืจ ืืงืจืื™. ืžืฉื™ื›ืช ืžื™ื“ืข ืžื”ืจืฉืช ืกืคืจื™ื•ืช ื”ืจื—ื‘ื” ืจื‘ื•ืช ืฉืœ ืกืงืืœื” ืฉืงืฉื•ืจื•ืช ืœ IO ื›ื•ืœืœืช ื’ื™ืจืกื” ืžื•ืชืืžืช ืœ cats effect, ืœื“ื•ื’ืžื” ื”ืกืคืจื™ื” sttp ืฉื™ื•ื“ืขืช ืœืฉืœื•ื— ื‘ืงืฉื•ืช HTTP. ื”ืงื•ื“ ื”ื‘ื ื‘ืกืงืืœื” ืžื—ื–ื™ืจ ืืคืงื˜ ืฉืคื•ื ื” ืœ URL (ื‘ื“ื•ื’ืžื” ืฉืœื™ ื–ื” https://icanhazdadjoke.com/) ื•ืžื—ื–ื™ืจ ืืช ื’ื•ืฃ ื”ืชืฉื•ื‘ื” ื‘ืชื•ืจ ืžื—ืจื•ื–ืช:
def randomDadJoke(): IO[String] =
  HttpClientCatsBackend.resource[IO]().use { backend =>
    basicRequest
      .header("Accept", "application/json")
      .get(uri"https://icanhazdadjoke.com/")
      .response(asString)
      .send(backend)
      .map {response => response.body.right.get}
  }
ื”ื“ื‘ืจ ื”ื—ืฉื•ื‘ ืœืฉื™ื ืœื‘ ื”ื•ื ืขืจืš ื”ื”ื—ื–ืจื” ืฉืœ ื”ืคื•ื ืงืฆื™ื” ืฉื–ื” IO[String] ื›ืœื•ืžืจ ืžื“ื•ื‘ืจ ื‘ืืคืงื˜ ืฉื™ื—ื–ื™ืจ ืžื—ืจื•ื–ืช. ืืคืฉืจ ืœื”ืฉืชืžืฉ ื‘ืืคืงื˜ ื–ื” ื›ื“ื™ ืœื”ื“ืคื™ืก ืืช ื”ืชืฉื•ื‘ื”:
  def demo4(): IO[ExitCode] =
    randomDadJoke().map(s => println(s)) >> IO.pure(ExitCode.Success)
ืžืฉื™ื›ืช ืžื™ื“ืข ืžื”ืจืฉืช ื‘ืžืงื‘ื™ืœ ื•ื›ืžื•ื‘ืŸ ืื—ืจื™ ืฉื™ืฉ ืืคืงื˜ ืืคืฉืจ ืœื”ืจื™ืฅ ืื•ืชื• ื‘ืžืงื‘ื™ืœ ื›ื“ื™ ืœืงื‘ืœ ืžืกืคืจ ื‘ื“ื™ื—ื•ืช:
  def demo5(): IO[ExitCode] =
    List(
      randomDadJoke().map(s => println(s)),
      randomDadJoke().map(s => println(s)),
      randomDadJoke().map(s => println(s))
    ).parSequence >> IO.pure(ExitCode.Success)

ToCode
1 420
)\.parSequence \>\> IO\.pure(ExitCode\.Success)

ToCode
1 420
ื—ืžืฉ ื“ื•ื’ืžืื•ืช ืงืฆืจื•ืช ืœืฉื™ืžื•ืฉ ื‘ cat effect ื‘ืกืงืืœื” ื”ืžื ื’ื ื•ืŸ ื”ืžื•ื‘ื ื” ื‘ืกืงืืœื” ืœืชื›ื ื•ืช ืืกื™ื ื›ืจื•ื ื™ ื ืงืจื Future, ื•ื”ื•ื ืงืฆืช ืžื–ื›ื™ืจ ืืช Promise ืฉืœ JavaScript\. ื”ื‘ืขื™ื” ืฉืœ ื”ืจื‘ื” ืื ืฉื™ื ืขื Future ื”ื™ื ืฉื”ื•ื ืžื™ื™ืฆื’ ืชื•ืฆืื” ืขืชื™ื“ื™ืช ื•ืœื ื—ื™ืฉื•ื‘ ืขืชื™ื“ื™\. ื–ื” ืื•ืžืจ ืฉืื ื™ืฉ ืœื™ Future ื‘ื™ื“ ืื ื™ ืœื ื™ื›ื•ืœ ืœื”ืจื™ืฅ ืื•ืชื• ื›ืžื” ืคืขืžื™ื (ื›ื™ ื”ื—ื™ืฉื•ื‘ ื›ื‘ืจ ืจืฅ)\. ืžืกื™ื‘ื” ื–ืืช ื ื•ืฆืจื• ื”ืจื‘ื” ืกืคืจื™ื•ืช ื”ืจื—ื‘ื” ืœืฉืคื” ืฉืžืืคืฉืจื•ืช ืœื™ื™ืฆืจ ื—ื™ืฉื•ื‘ ืขืชื™ื“ื™ ื‘ืฆื•ืจื” ืคื•ื ืงืฆื™ื•ื ืืœื™ืช ื•ืœืœื Side Effects\. ืื—ืช ื”ืคื•ืคื•ืœืจื™ื•ืช ื”ื™ื cats effect ื•ื”ื ื” ื—ืžืฉ ื“ื•ื’ืžืื•ืช ืจืืฉื•ื ื•ืช ืฉื›ืชื‘ืชื™ ืขื ื”ืกืคืจื™ื”\. ืฉืœื•ื ืขื•ืœื ืชื•ื›ื ื™ืช ืกืงืืœื” ืจืืฉื•ื ื” ืขื cat effect ื”ื™ื ื›ืžื•ื‘ืŸ ืคื•ื ืงืฆื™ื” ืฉืžื“ืคื™ืกื” ืฉืœื•ื ืขื•ืœื:

  def demo1(): IO[ExitCode] \=

    IO\.println("Hello WOrld") \>\> IO\.pure(ExitCode\.Success)

ื”ืจืขื™ื•ืŸ ื”ืจืืฉื•ืŸ ื”ื—ื“ืฉ ื›ืืŸ ื”ื•ื ืฉืคื•ื ืงืฆื™ื” ืฉืืคืฉืจ ืœื”ืจื™ืฅ ื‘ืฆื•ืจื” ืืกื™ื ื›ืจื•ื ื™ืช ื–ื” ื‘ืขืฆื ืคื•ื ืงืฆื™ื” ืฉืžื—ื–ื™ืจื” IO, ื•ื–ื” ื ืงืจื ืืคืงื˜\. ืœื›ืŸ ื”ืคื•ื ืงืฆื™ื” demo1 ืฉืžื—ื–ื™ืจื” IO[ExitCode] ืžืชืื™ืžื” ืœื”ืจืฆื” ื‘ืฆื•ืจื” ืืกื™ื ื›ืจื•ื ื™ืช\. ื”ืกื™ืžืŸ \>\> ื”ื•ื ื“ืจืš ืœื—ื‘ืจ ืฉื ื™ ืืคืงื˜ื™ื ื•ืœื”ื—ื–ื™ืจ ืจืง ืืช ื”ืชื•ืฆืื” ืฉืœ ื”ืฉื ื™, ื”ืคื•ื ืงืฆื™ื” IO\.println ืžื™ื™ืฆืจืช ืืคืงื˜ ืฉืžื“ืคื™ืก ืœืžืกืš ื• IO\.pure ืžื™ื™ืฆืจืช ืืคืงื˜ ืฉืžื—ื–ื™ืจ ืขืจืš ืงื‘ื•ืข (ื•ื›ืŸ ืืคืฉืจ ืœื—ืฉื•ื‘ ืขืœ ืืคืงื˜ ื‘ืชื•ืจ Promise ืื‘ืœ ื–ื” ื˜ื™ืคื” ื™ื•ืชืจ ืžืกื•ื‘ืš ื›ื™ ืืคืงื˜ ืืคืฉืจ ื’ื ืœื‘ื˜ืœ)\. ืฉืœื•ื ืขื•ืœื ืขื ื”ืžืชื ื” ืขื›ืฉื™ื• ืฉื”ื‘ื ื• ืืช ื”ืกื™ืคื•ืจ ืฉืœ ืืคืงื˜ื™ื ืืคืฉืจ ืœื”ืžืฉื™ืš ื•ืœืจืื•ืช ืื™ืš ืžื—ื‘ืจื™ื ืื•ืชื\. ื“ืจืš ืื—ืช ืœื—ื‘ืจ ืืคืงื˜ื™ื ื”ื™ื ืกื™ืžืŸ ื” \>\> ืฉื›ื‘ืจ ืคื’ืฉื ื• ื•ืืคืฉืจ ืœืงื—ืช ืื•ืชื• ืขื•ื“ ืฆืขื“ ืงื“ื™ืžื”\. ื”ืคื•ื ืงืฆื™ื” IO\.sleep ืžื—ื–ื™ืจื” ืืคืงื˜ ืฉืžื—ื›ื”, ื•ืœื›ืŸ ื”ืงื•ื“ ื”ื‘ื:

  def demo11(): IO[ExitCode] \=

    IO\.sleep(1000\.millis) \>\> IO\.println("1") \>\>

    IO\.sleep(1000\.millis) \>\> IO\.println("2") \>\>

    IO\.sleep(1000\.millis) \>\> IO\.println("3") \>\>

    IO\.pure(ExitCode\.Success)

ืžื™ื™ืฆืจ ืืคืงื˜ ืฉืžื—ื›ื” ืฉื ื™ื”, ืžื“ืคื™ืก 1, ืžื—ื›ื” ืขื•ื“ ืฉื ื™ื”, ืžื“ืคื™ืก 2, ืžื—ื›ื” ืขื•ื“ ืฉื ื™ื”, ืžื“ืคื™ืก 3 ื•ืื– ืžื—ื–ื™ืจ ื”ืฆืœื—ื”\. ื“ืจืš ืื—ืจืช ื•ืงืฆืช ื™ื•ืชืจ ื™ื“ื™ื“ื•ืชื™ืช ื‘ืกืงืืœื” ืœื›ืชื•ื‘ ืื•ืชื• ื”ื™ื:

  def demo2(): IO[ExitCode] \=

    for {

      _ <\- IO\.sleep(1000\.millis) \>\> IO\.println("1")

      _ <\- IO\.sleep(1000\.millis) \>\> IO\.println("2")

      _ <\- IO\.sleep(1000\.millis) \>\> IO\.println("3")

    } yield ExitCode\.Success

ื•ื–ื• ื’ื ืžืืคืฉืจืช ืœื›ืœ ืืคืงื˜ ืœื”ืฉืชืžืฉ ื‘ืชื•ืฆืื” ืฉืœ ื”ืืคืงื˜ ืฉืœืคื ื™ื•, ืœืžืจื•ืช ืฉื‘ื“ื•ื’ืžื” ื”ืคืขื ืœื ืขืฉื™ืชื™ ืืช ื–ื” ื•ื”ืชืขืœืžืชื™ ืžื”ืชื•ืฆืื” ืฉืœ ื”ืืคืงื˜ ื”ืงื•ื“ื, ื‘ื›ืš ืฉื ืชืชื™ ืœื” ืืช ื”ืฉื _\. ืฉืœื•ื ืขื•ืœื ื‘ืžืงื‘ื™ืœ ืื—ืจื™ ืฉืื ื—ื ื• ืžื‘ื™ื ื™ื ืื™ืš ืœื”ื’ื“ื™ืจ ืžืกืคืจ ืืคืงื˜ื™ื ื”ืฆืขื“ ื”ื‘ื ื”ื•ื ืœื”ืจื™ืฅ ืื•ืชื ื‘ืžืงื‘ื™ืœ, ื‘ื“ื•ืžื” ืœ Promise\.all\. ื‘ cats effect ื–ื” ืงื•ืจื” ืขื ืคื•ื ืงืฆื™ื” ื‘ืฉื parSequence:

  def demo3(): IO[ExitCode] \=

    List(

      IO\.sleep(1000\.millis) \>\> IO\.println("1"),

      IO\.sleep(1000\.millis) \>\> IO\.println("2"),

      IO\.sleep(1000\.millis) \>\> IO\.println("3")

    )\.parSequence \>\> IO\.pure(ExitCode\.Success)

ื”ืคืขื ื”ืงื•ื“ ืžื’ื“ื™ืจ ืจืฉื™ืžื” ืฉืœ 3 ืืคืงื˜ื™ื ื•ืžืคืขื™ืœ ืขืœ ื”ืจืฉื™ืžื” ืืช parSequence\. ื”ืชื•ืฆืื” ื”ื™ื ื”ืคืขืœื” ืฉืœ ืฉืœื•ืฉืช ื”ืืคืงื˜ื™ื ื‘ืžืงื‘ื™ืœ ื›ืš ืฉืื—ืจื™ ืฉื ื™ื” ื™ื•ื“ืคืกื• ืฉืœื•ืฉ ื”ื”ื•ื“ืขื•ืช ื‘ืกื“ืจ ืืงืจืื™\. ืžืฉื™ื›ืช ืžื™ื“ืข ืžื”ืจืฉืช ืกืคืจื™ื•ืช ื”ืจื—ื‘ื” ืจื‘ื•ืช ืฉืœ ืกืงืืœื” ืฉืงืฉื•ืจื•ืช ืœ IO ื›ื•ืœืœืช ื’ื™ืจืกื” ืžื•ืชืืžืช ืœ cats effect, ืœื“ื•ื’ืžื” ื”ืกืคืจื™ื” sttp ืฉื™ื•ื“ืขืช ืœืฉืœื•ื— ื‘ืงืฉื•ืช HTTP\. ื”ืงื•ื“ ื”ื‘ื ื‘ืกืงืืœื” ืžื—ื–ื™ืจ ืืคืงื˜ ืฉืคื•ื ื” ืœ URL (ื‘ื“ื•ื’ืžื” ืฉืœื™ ื–ื” https://icanhazdadjoke\.com/) ื•ืžื—ื–ื™ืจ ืืช ื’ื•ืฃ ื”ืชืฉื•ื‘ื” ื‘ืชื•ืจ ืžื—ืจื•ื–ืช:

def randomDadJoke(): IO[String] \=

  HttpClientCatsBackend\.resource[IO]()\.use { backend \=\>

    basicRequest

      \.header("Accept", "application/json")

      \.get(uri"https://icanhazdadjoke\.com/")

      \.response(asString)

      \.send(backend)

      \.map {response \=\> response\.body\.right\.get}

  }

ื”ื“ื‘ืจ ื”ื—ืฉื•ื‘ ืœืฉื™ื ืœื‘ ื”ื•ื ืขืจืš ื”ื”ื—ื–ืจื” ืฉืœ ื”ืคื•ื ืงืฆื™ื” ืฉื–ื” IO[String] ื›ืœื•ืžืจ ืžื“ื•ื‘ืจ ื‘ืืคืงื˜ ืฉื™ื—ื–ื™ืจ ืžื—ืจื•ื–ืช\. ืืคืฉืจ ืœื”ืฉืชืžืฉ ื‘ืืคืงื˜ ื–ื” ื›ื“ื™ ืœื”ื“ืคื™ืก ืืช ื”ืชืฉื•ื‘ื”:

  def demo4(): IO[ExitCode] \=

    randomDadJoke()\.map(s \=\> println(s)) \>\> IO\.pure(ExitCode\.Success)

ืžืฉื™ื›ืช ืžื™ื“ืข ืžื”ืจืฉืช ื‘ืžืงื‘ื™ืœ ื•ื›ืžื•ื‘ืŸ ืื—ืจื™ ืฉื™ืฉ ืืคืงื˜ ืืคืฉืจ ืœื”ืจื™ืฅ ืื•ืชื• ื‘ืžืงื‘ื™ืœ ื›ื“ื™ ืœืงื‘ืœ ืžืกืคืจ ื‘ื“ื™ื—ื•ืช:

  def demo5(): IO[ExitCode] \=

    List(

      randomDadJoke()\.map(s \=\> println(s)),

      randomDadJoke()\.map(s \=\> println(s)),

      randomDadJoke()\.map(s \=\> println(s))

ToCode
1 420
# ื—ืžืฉ ื“ื•ื’ืžืื•ืช ืงืฆืจื•ืช ืœืฉื™ืžื•ืฉ ื‘ cat effect ื‘ืกืงืืœื” ืกืงืืœื” ืœื ื›ื•ืœืœืช ืžื ื’ื ื•ืŸ ืชื—ื‘ื™ืจื™ ืžื•ื‘ื ื” ืœืงื•ื“ ืืกื™ื ื›ืจื•ื ื™ ื•ื›ืš ื ื•ืฆืจื• ืกืคืจื™ื•ืช ื”ืจื—ื‘ื” ืจื‘ื•ืช ืฉืžื ืกื•ืช ืœื’ืฉืจ ืขืœ ื”ืคืขืจ. cat effect ื”ื™ื ืกืคืจื™ื” ืคื•ืคื•ืœืจื™ืช ื›ื–ื• ืฉื ืจืื™ืช ื’ืžื™ืฉื” ื•ืžืชื•ื—ื–ืงืช, ืื‘ืœ ืœื ื‘ื˜ื•ื— ื›ืžื” ืคืฉื•ื˜ื” ืœืœื™ืžื•ื“. ื”ื ื” ื—ืžืฉ ื“ื•ื’ืžืื•ืช ื™ื—ืกื™ืช ืคืฉื•ื˜ื•ืช ืฉืขื–ืจื• ืœื™ ืœื”ืชื—ื™ืœ. ## ืฉืœื•ื ืขื•ืœื ืชื•ื›ื ื™ืช ืกืงืืœื” ืจืืฉื•ื ื” ืขื cat effect ื”ื™ื ื›ืžื•ื‘ืŸ ืคื•ื ืงืฆื™ื” ืฉืžื“ืคื™ืกื” ืฉืœื•ื ืขื•ืœื:
  def demo1(): IO[ExitCode] =
    IO.println("Hello WOrld") >> IO.pure(ExitCode.Success)
ื”ืจืขื™ื•ืŸ ื”ืจืืฉื•ืŸ ื”ื—ื“ืฉ ื›ืืŸ ื”ื•ื ืฉืคื•ื ืงืฆื™ื” ืฉืืคืฉืจ ืœื”ืจื™ืฅ ื‘ืฆื•ืจื” ืืกื™ื ื›ืจื•ื ื™ืช ื–ื” ื‘ืขืฆื ืคื•ื ืงืฆื™ื” ืฉืžื—ื–ื™ืจื” IO, ื•ื–ื” ื ืงืจื ืืคืงื˜. ืœื›ืŸ ื”ืคื•ื ืงืฆื™ื” demo1 ืฉืžื—ื–ื™ืจื” IO[ExitCode] ืžืชืื™ืžื” ืœื”ืจืฆื” ื‘ืฆื•ืจื” ืืกื™ื ื›ืจื•ื ื™ืช. ื”ืกื™ืžืŸ >> ื”ื•ื ื“ืจืš ืœื—ื‘ืจ ืฉื ื™ ืืคืงื˜ื™ื ื•ืœื”ื—ื–ื™ืจ ืจืง ืืช ื”ืชื•ืฆืื” ืฉืœ ื”ืฉื ื™, ื”ืคื•ื ืงืฆื™ื” IO.println ืžื™ื™ืฆืจืช ืืคืงื˜ ืฉืžื“ืคื™ืก ืœืžืกืš ื• IO.pure ืžื™ื™ืฆืจืช ืืคืงื˜ ืฉืžื—ื–ื™ืจ ืขืจืš ืงื‘ื•ืข (ื•ื›ืŸ ืืคืฉืจ ืœื—ืฉื•ื‘ ืขืœ ืืคืงื˜ ื‘ืชื•ืจ Promise ืื‘ืœ ื–ื” ื˜ื™ืคื” ื™ื•ืชืจ ืžืกื•ื‘ืš ื›ื™ ืืคืงื˜ ืืคืฉืจ ื’ื ืœื‘ื˜ืœ). ## ืฉืœื•ื ืขื•ืœื ืขื ื”ืžืชื ื” ืขื›ืฉื™ื• ืฉื”ื‘ื ื• ืืช ื”ืกื™ืคื•ืจ ืฉืœ ืืคืงื˜ื™ื ืืคืฉืจ ืœื”ืžืฉื™ืš ื•ืœืจืื•ืช ืื™ืš ืžื—ื‘ืจื™ื ืื•ืชื. ื“ืจืš ืื—ืช ืœื—ื‘ืจ ืืคืงื˜ื™ื ื”ื™ื ืกื™ืžืŸ ื” >> ืฉื›ื‘ืจ ืคื’ืฉื ื• ื•ืืคืฉืจ ืœืงื—ืช ืื•ืชื• ืขื•ื“ ืฆืขื“ ืงื“ื™ืžื”. ื”ืคื•ื ืงืฆื™ื” IO.sleep ืžื—ื–ื™ืจื” ืืคืงื˜ ืฉืžื—ื›ื”, ื•ืœื›ืŸ ื”ืงื•ื“ ื”ื‘ื:
  def demo11(): IO[ExitCode] =
    IO.sleep(1000.millis) >> IO.println("1") >>
    IO.sleep(1000.millis) >> IO.println("2") >>
    IO.sleep(1000.millis) >> IO.println("3") >>
    IO.pure(ExitCode.Success)
ืžื™ื™ืฆืจ ืืคืงื˜ ืฉืžื—ื›ื” ืฉื ื™ื”, ืžื“ืคื™ืก 1, ืžื—ื›ื” ืขื•ื“ ืฉื ื™ื”, ืžื“ืคื™ืก 2, ืžื—ื›ื” ืขื•ื“ ืฉื ื™ื”, ืžื“ืคื™ืก 3 ื•ืื– ืžื—ื–ื™ืจ ื”ืฆืœื—ื”. ื“ืจืš ืื—ืจืช ื•ืงืฆืช ื™ื•ืชืจ ื™ื“ื™ื“ื•ืชื™ืช ื‘ืกืงืืœื” ืœื›ืชื•ื‘ ืื•ืชื• ื”ื™ื:
  def demo2(): IO[ExitCode] =
    for {
      _ <- IO.sleep(1000.millis) >> IO.println("1")
      _ <- IO.sleep(1000.millis) >> IO.println("2")
      _ <- IO.sleep(1000.millis) >> IO.println("3")
    } yield ExitCode.Success
ื•ื–ื• ื’ื ืžืืคืฉืจืช ืœื›ืœ ืืคืงื˜ ืœื”ืฉืชืžืฉ ื‘ืชื•ืฆืื” ืฉืœ ื”ืืคืงื˜ ืฉืœืคื ื™ื•, ืœืžืจื•ืช ืฉื‘ื“ื•ื’ืžื” ื”ืคืขื ืœื ืขืฉื™ืชื™ ืืช ื–ื” ื•ื”ืชืขืœืžืชื™ ืžื”ืชื•ืฆืื” ืฉืœ ื”ืืคืงื˜ ื”ืงื•ื“ื, ื‘ื›ืš ืฉื ืชืชื™ ืœื” ืืช ื”ืฉื _. ## ืฉืœื•ื ืขื•ืœื ื‘ืžืงื‘ื™ืœ ืื—ืจื™ ืฉืื ื—ื ื• ืžื‘ื™ื ื™ื ืื™ืš ืœื”ื’ื“ื™ืจ ืžืกืคืจ ืืคืงื˜ื™ื ื”ืฆืขื“ ื”ื‘ื ื”ื•ื ืœื”ืจื™ืฅ ืื•ืชื ื‘ืžืงื‘ื™ืœ, ื‘ื“ื•ืžื” ืœ Promise.all. ื‘ cats effect ื–ื” ืงื•ืจื” ืขื ืคื•ื ืงืฆื™ื” ื‘ืฉื parSequence:
  def demo3(): IO[ExitCode] =
    List(
      IO.sleep(1000.millis) >> IO.println("1"),
      IO.sleep(1000.millis) >> IO.println("2"),
      IO.sleep(1000.millis) >> IO.println("3")
    ).parSequence >> IO.pure(ExitCode.Success)
ื”ืคืขื ื”ืงื•ื“ ืžื’ื“ื™ืจ ืจืฉื™ืžื” ืฉืœ 3 ืืคืงื˜ื™ื ื•ืžืคืขื™ืœ ืขืœ ื”ืจืฉื™ืžื” ืืช parSequence. ื”ืชื•ืฆืื” ื”ื™ื ื”ืคืขืœื” ืฉืœ ืฉืœื•ืฉืช ื”ืืคืงื˜ื™ื ื‘ืžืงื‘ื™ืœ ื›ืš ืฉืื—ืจื™ ืฉื ื™ื” ื™ื•ื“ืคืกื• ืฉืœื•ืฉ ื”ื”ื•ื“ืขื•ืช ื‘ืกื“ืจ ืืงืจืื™. ## ืžืฉื™ื›ืช ืžื™ื“ืข ืžื”ืจืฉืช ืกืคืจื™ื•ืช ื”ืจื—ื‘ื” ืจื‘ื•ืช ืฉืœ ืกืงืืœื” ืฉืงืฉื•ืจื•ืช ืœ IO ื›ื•ืœืœืช ื’ื™ืจืกื” ืžื•ืชืืžืช ืœ cats effect, ืœื“ื•ื’ืžื” ื”ืกืคืจื™ื” sttp ืฉื™ื•ื“ืขืช ืœืฉืœื•ื— ื‘ืงืฉื•ืช HTTP. ื”ืงื•ื“ ื”ื‘ื ื‘ืกืงืืœื” ืžื—ื–ื™ืจ ืืคืงื˜ ืฉืคื•ื ื” ืœ URL (ื‘ื“ื•ื’ืžื” ืฉืœื™ ื–ื” https://icanhazdadjoke.com/) ื•ืžื—ื–ื™ืจ ืืช ื’ื•ืฃ ื”ืชืฉื•ื‘ื” ื‘ืชื•ืจ ืžื—ืจื•ื–ืช:
def randomDadJoke(): IO[String] =
  HttpClientCatsBackend.resource[IO]().use { backend =>
    basicRequest
      .header("Accept", "application/json")
      .get(uri"https://icanhazdadjoke.com/")
      .response(asString)
      .send(backend)
      .map {response => response.body.right.get}
  }
ื”ื“ื‘ืจ ื”ื—ืฉื•ื‘ ืœืฉื™ื ืœื‘ ื”ื•ื ืขืจืš ื”ื”ื—ื–ืจื” ืฉืœ ื”ืคื•ื ืงืฆื™ื” ืฉื–ื” IO[String] ื›ืœื•ืžืจ ืžื“ื•ื‘ืจ ื‘ืืคืงื˜ ืฉื™ื—ื–ื™ืจ ืžื—ืจื•ื–ืช. ืืคืฉืจ ืœื”ืฉืชืžืฉ ื‘ืืคืงื˜ ื–ื” ื›ื“ื™ ืœื”ื“ืคื™ืก ืืช ื”ืชืฉื•ื‘ื”:
  def demo4(): IO[ExitCode] =
    randomDadJoke().map(s => println(s)) >> IO.pure(ExitCode.Success)
## ืžืฉื™ื›ืช ืžื™ื“ืข ืžื”ืจืฉืช ื‘ืžืงื‘ื™ืœ ื•ื›ืžื•ื‘ืŸ ืื—ืจื™ ืฉื™ืฉ ืืคืงื˜ ืืคืฉืจ ืœื”ืจื™ืฅ ืื•ืชื• ื‘ืžืงื‘ื™ืœ ื›ื“ื™ ืœืงื‘ืœ ืžืกืคืจ ื‘ื“ื™ื—ื•ืช:
  def demo5(): IO[ExitCode] =
    List(
      randomDadJoke().map(s => println(s)),
      randomDadJoke().map(s => println(s)),
      randomDadJoke().map(s => println(s))
    ).parSequence >> IO.pure(ExitCode.Success)

ToCode
1 420
# ืกื•ืฃ ื”ื“ืจืš ืœืคืจื•ื™ืงื˜ ืชื•ื›ื ื”, ืกื•ืฃ ื”ื“ืจืš ื”ื•ื ื”ื ืงื•ื“ื” ืฉืืฃ ืื—ื“ ื›ื‘ืจ ืœื ืจื•ืฆื” ืื• ื™ื›ื•ืœ ืœื”ืžืฉื™ืš ืœืขื‘ื•ื“ ืขืœ ื”ืคืจื•ื™ืงื˜ ื”ื–ื” ื•ืื™ืŸ ืกื™ื›ื•ื™ ืœืจืื•ืช ื‘ื• ืคื™ืฆ'ืจื™ื ื—ื“ืฉื™ื. ื”ื ื” ื›ืžื” ืžืืคื™ื™ื ื™ื ืžืฉื•ืชืคื™ื ืฉืจืื™ืชื™ ื‘ืคืจื•ื™ืงื˜ื™ื ืฉื”ื’ื™ืขื• ืœืฉืœื‘ ื”ื–ื”: 1. ืชืฉืชื™ื•ืช (ืชืœื•ื™ื•ืช, ื‘ืกื™ืกื™ ื ืชื•ื ื™ื, ืฉืจืชื™ื) ื™ืฉื ื•ืช. ืœืžืขืฉื” ื›ืœ ื›ืš ื™ืฉื ื•ืช ืฉืื™ืŸ ืื•ืžืฅ ืื• ื™ื›ื•ืœืช ืœืฉื“ืจื’ ืื•ืชืŸ. 2. ืงื•ืฉื™ ืœื’ื™ื™ืก ืžืชื›ื ืชื™ื. ื‘ื“ืจืš ื›ืœืœ ื‘ื’ืœืœ ืฉืคืช ืชื›ื ื•ืช ื™ืฉื ื” ืื• ื—ื“ืฉื” ืžื“ื™. 3. ื”ื™ืขื“ืจ ืชืฉืชื™ืช ื‘ื“ื™ืงื•ืช ืœืžื•ืฆืจ ื•ื•ืชื™ืง. ื›ืœ ืฉื•ืจืช ืงื•ื“ ืฉืชื•ืกื™ืฃ ืชืคื’ืข ื‘ืคื•ื ืงืฆื™ื•ื ืืœื™ื•ืช ืฉืžื™ืฉื”ื• ืื™ืคืฉื”ื• ืฆืจื™ืš. 4. ื—ื•ืกืจ ื™ื›ื•ืœืช ืœื‘ื ื•ืช ืืช ื”ืคืจื•ื™ืงื˜ ืขืœ ืžื›ื•ื ืช ืคื™ืชื•ื— ืจื’ื™ืœื”. ื“ืจื™ืฉื” ืœื”ืชืงื ื•ืช ืžื™ื•ื—ื“ื•ืช ืื• ืชื”ืœื™ื›ื™ ื‘ื ื™ื” ืžื™ื•ื—ื“ื™ื. ื”ืจื‘ื” ืคืขืžื™ื ืคืจื•ื™ืงื˜ ืžื’ื™ืข ืœืกื•ืฃ ื”ื“ืจืš ื‘ื’ืœืœ ืืคืงื˜ ื›ื“ื•ืจ ืฉืœื’ - ืื ื—ื ื• ืžื ืกื™ื ืœื”ืชืงื“ื ื‘ืคื™ืชื•ื—, ืื‘ืœ ื‘ืขื™ื•ืช ืชืฉืชื™ืช ื’ื•ืจืžื•ืช ืœื ื• ืœืขื‘ื•ื“ ื™ื•ืชืจ ืงืฉื” ืขืœ ื›ืœ ืฆืขื“, ื•ื”ื”ืชืงื“ืžื•ืช ื”ืื™ื˜ื™ืช ืžื›ืจื™ื—ื” ืื•ืชื ื• ืœื”ืฉืงื™ืข ื™ื•ืชืจ ื–ืžืŸ ื‘ืคื™ืฆ'ืจื™ื ื”ื—ื“ืฉื™ื ื‘ืžืงื•ื ืœืคืชื•ืจ ืืช ื‘ืขื™ื•ืช ื”ืชืฉืชื™ืช. ืžืชื™ืฉื”ื• ืžื’ื™ืขื” ื”ื ืงื•ื“ื” ืฉืœื›ืชื•ื‘ ืืช ื”ืคืจื•ื™ืงื˜ ืžื—ื“ืฉ ื›ื‘ืจ ื™ื”ื™ื” ื™ื•ืชืจ ืงืœ ืžืœื”ื•ืกื™ืฃ ืขื•ื“ ืคื™ืฆ'ืจ. ื–ื” ืกื•ืฃ ื”ื“ืจืš.

ToCode
1 420
# ืื•ืคืก ื”ื›ื ืกืชื™ ืงื•ื ืกื˜ืจื™ื™ื ื˜ ืœืคื ื™ ื›ืžื” ืฉื‘ื•ืขื•ืช ื”ืชื—ืœืชื™ ืœืœืžื•ื“ ื’ืจืžืœื™ืŸ ื•ื’ื ืคืจืกืžืชื™ ื›ืืŸ ืคื•ืกื˜ ืขื ื›ืžื” ื“ื•ื’ืžืื•ืช ืงื•ื“, ืื—ืช ืžื”ืŸ ื”ื™ืชื”:
def createPost(g: GraphTraversalSource, slug: String, title: String, publishedAt: String): Vertex =
  g.addV("post")
    .property("slug", slug)
    .property("title", title)
    .property("publishedAt", LocalDateTime.parse(publishedAt, formatter))
    .next()
ื–ื” ื ืจืื” ืชืžื™ื - ื”ืงื•ื“ ื™ื•ืฆืจ ืฆื•ืžืช, ืžื’ื“ื™ืจ ืฉืœื•ืฉื” ืžืืคื™ื™ื ื™ื ื•ืฉื•ืžืจ. ื•ืขืœ ื”ื“ืจืš ืžื•ืกื™ืฃ ืžื’ื‘ืœื” ืžืฉืžืขื•ืชื™ืช ืœืžืขืจื›ืช ืฉืœื ื•. ื’ืจืžืœื™ืŸ ื”ื™ื ืฉืคืช ืฉืื™ืœืชื•ืช ื•ืืคืฉืจ ืœื”ืฉืชืžืฉ ื‘ื” ื›ื“ื™ ืœืชืฉืืœ ื‘ืกื™ืกื™ ื ืชื•ื ื™ื ืžืจื•ื—ืงื™ื (ืœืžืฉืœ neptune ืฉืจืฅ ื‘ืขื ืŸ ืฉืœ AWS ืื• ืงื•ืกืžื•ืก ืฉืจืฅ ื‘ืื–'ื•ืจ ืื• ืืจืงื™ื™ื“ ื“ื™ื‘ื™ ืฉืจืฅ ืขืœ ืžื›ื•ื ื” ืฉืœื›ื), ื•ื‘ื ื•ืกืฃ ื›ื“ื™ ืœื’ืฉืช ืœื‘ืกื™ืกื™ ื ืชื•ื ื™ื ื‘ื–ื™ื›ืจื•ืŸ ืฉืจืฆื™ื ื‘ืื•ืชื• JVM ื›ืžื• ื”ืชื•ื›ื ื™ืช. ื‘ื“ื•ื’ืžืช ื”ืงื•ื“ ืฉืคืจืกืžืชื™ ื”ื’ื“ืจืชื™ ื‘ืกื™ืก ื ืชื•ื ื™ื ืžื•ื˜ืžืข ืฉืจืฅ ื‘ื–ื™ื›ืจื•ืŸ ื‘ืื•ืชื• JVM ื›ืžื• ืฉืœ ื”ืชื•ื›ื ื™ืช, ื•ืœื›ืŸ ืื™ืŸ ื‘ืขื™ื” ืœืฉืžื•ืจ ืื•ื‘ื™ืงื˜ื™ื ืžืชื•ื—ื›ืžื™ื ื›ืžื• ืชืืจื™ืš ื‘ืื•ืชื• ื‘ืกื™ืก ื ืชื•ื ื™ื. ื ื™ืกื™ื•ืŸ ืœื”ืขื‘ื™ืจ ืืช ื”ืงื•ื“ ืœื ืคื˜ื•ืŸ ืื• ื‘ืกื™ืก ื ืชื•ื ื™ื ืžืจื•ื—ืง ืื—ืจ ื™ื™ื›ืฉืœ, ื›ื™ ื’ืจืžืœื™ืŸ ืœื ืขื•ืฉื” ืกืจื™ืืœื™ื–ืฆื™ื” ืื•ื˜ื•ืžื˜ื™ืช ืœืชืืจื™ื›ื™ื. ื”ื›ื ืกืช ืงื•ื ืกื˜ืจื™ื™ื ื˜ื™ื (ื•ื”ืกืจืชื) ื”ื™ื ื—ืœืง ื˜ื‘ืขื™ ืžืœื™ืžื•ื“ ื•ืžืคื™ืชื•ื— ืžืขืจื›ื•ืช ื‘ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ืฉืœื ืขื‘ื“ื ื• ื‘ื”ืŸ ื‘ืขื‘ืจ. ื™ืฉ ืœื–ื” ื›ืœ ืžื™ื ื™ ืกื™ื‘ื•ืช, ื‘ื“ื•ื’ืžื” ืฉืœื™ ืขื ื’ืจืžืœื™ืŸ ื—ืฉื‘ืชื™ ื‘ื”ืชื—ืœื” ืœื‘ื ื•ืช ืžืขืจื›ืช ืขื ื‘ืกื™ืก ื ืชื•ื ื™ื ืžื•ื˜ืžืข ื•ืจืง ืื—ืจ ื›ืš ื”ื‘ื ืชื™ ืฉืขื“ื™ืฃ ืœืฉืžื•ืจ ืืช ื‘ืกื™ืก ื”ื ืชื•ื ื™ื ื‘ืขื ืŸ (ืžื” ืฉื”ื•ื‘ื™ืœ ืœื’ื™ืœื•ื™ ื›ืœ ื”ืื™ืœื•ืฆื™ื ื”ื ืกืชืจื™ื). ื–ื• ืื—ืช ื”ืกื™ื‘ื•ืช ืฉืงืฉื” ืœืชืช ื”ืขืจื›ื•ืช ื–ืžื ื™ื ื‘ืคื™ืชื•ื—, ื•ื‘ืžื™ื•ื—ื“ ื‘ืคื™ืชื•ื— ืขื ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื—ื“ืฉื•ืช. ื‘ืื•ืชื” ื ืฉื™ืžื” ืฆืจื™ืš ืœื”ื’ื™ื“ ืฉื”ืจื‘ื” ืคืขืžื™ื ืฉื™ืžื•ืฉ ื‘ Best Practices ืจื’ื™ืœื™ื ืฉืœ ืคื™ืชื•ื— ื™ื›ื•ืœ ืœื”ื’ืŸ ืขืœื™ื ื• ืžื—ืœืง ืžื”ืกื™ื›ื•ื ื™ื. ื‘ืžืงืจื” ืฉืœ ื”ืกืจื™ืืœื™ื–ืฆื™ื” ืฉืœ ืชืืจื™ื›ื™ื, ื”ืงืคื“ื” ืขืœ ื›ืชื™ื‘ืช ืฉืื™ืœืชื•ืช ืจืง ื‘ืžืงื•ืžื•ืช ืกืคืฆื™ืคื™ื™ื ื‘ืงื•ื“ ื™ื›ื•ืœื” ืœืขื–ื•ืจ. ื‘ืžืขืจื›ืช ืื™ื“ืืœื™ืช ืชื™ืงื•ืŸ ื”ืงื•ื“ ื›ืš ืฉืื•ื‘ื™ืงื˜ ืชืืจื™ืš-ืฉืขื” ื™ื™ื›ืชื‘ ื‘ืชื•ืจ long ื‘ืฆื™ืจื•ืฃ ืื–ื•ืจ ื–ืžืŸ ืืžื•ืจ ืœื”ืฉืคื™ืข ืจืง ืขืœ ืฉืชื™ ืฉื•ืจื•ืช ื‘ืžืขืจื›ืช, ื›ื™ ื›ืœ ื”ืงื•ื“ ืฉืงื•ืจื ืืช ืฉื“ื” ื”ืชืืจื™ืš ืขื•ื‘ืจ ื“ืจืš ืื•ืชื” ืฉื•ืจื”.

ToCode
1 420
# ืงื•ื“ ืžื•ืฉืœื ืื ื”ื™ื™ืชื™ ื™ื•ื“ืข ืื™ืš ื™ืจืื• ื›ืœ ื”ื“ืจื™ืฉื•ืช ื”ืขืชื™ื“ื™ื•ืช ืžื”ืžืขืจื›ืช ื”ื™ื™ืชื™ ืฉืžื— ืœื›ืชื•ื‘ ืืช ื”ืงื•ื“ ื”ืžื•ืฉืœื. ื‘ืขื•ืœื ื”ืืžื™ืชื™ ืื ื™ ืžืขื“ื™ืฃ ืœื”ืชืžืงื“ ื‘ืงื•ื“ ืฉืงืœ ืœืฉื ื•ืช ืื•ืชื•.

ToCode
1 420
# ื™ืฉ ืœื™ ืฉืœื•ืฉื” ื™ืžื™ื ืขื“ ื”ืจืื™ื•ืŸ ืขื‘ื•ื“ื” ื‘ืจื™ืืงื˜ - ืžื” ืœืœืžื•ื“? ื›ืฉื”ืฉืืœื” ืžื”ื›ื•ืชืจืช ื ืฉืืœื” ื‘ืจื“ื™ื˜ ื™ื“ืขืชื™ ืฉื–ื” ื”ื•ืœืš ืœื”ื™ื•ืช ืžืขื ื™ื™ืŸ. ืืœื” ื”ื˜ื™ืคื™ื ื”ืžืจื›ื–ื™ื™ื ืฉืžืฆืืชื™ ืฉื: 1. ื›ื•ืœื ืžืชืขืกืงื™ื ืขื ื ื™ื”ื•ืœ ืกื˜ื™ื™ื˜ - ื•ืฆืจื™ืš ืœื”ื’ื™ื“, ื”ืกื™ืคื•ืจ ืฉืœ ื ื™ื”ื•ืœ ืกื˜ื™ื™ื˜ ืžืœื•ื•ื” ืื•ืชื ื• ืžืื– ืฉืจื™ืืงื˜ ื ื•ืฆืจื” ื•ื™ื™ืฉืืจ ืื™ืชื ื• ื›ืœ ืขื•ื“ ืœื ื™ื”ื™ื” ืฉื™ื ื•ื™ ืืจื›ื™ื˜ืงื˜ื•ื ื™ ืžืื•ื“ ืžืฉืžืขื•ืชื™ ื‘ืกืคืจื™ื”. 2. ื”ืจื‘ื” ืื ืฉื™ื ืžื“ื‘ืจื™ื ืขืœ ื‘ื™ืฆื•ืขื™ื ื•ืขืœ ื”ื•ืงื™ื ื›ืžื• useCallback, ืื‘ืœ ืคื—ื•ืช ืžืžื” ืฉื—ืฉื‘ืชื™. ื›ืžืขื˜ ืืฃ ืื—ื“ ืœื ืžืชื™ื™ื—ืก ืœ Concurrent Mode ื•ืœ useTransition 3. ืืงื•ืกื™ืกื˜ื ื”ื•ื–ื›ืจ ื‘ืชื•ืจ ื˜ื™ืค ืื‘ืœ ืœื ื ืจืื” ืฉืงื™ื‘ืœ ืžืกืคื™ืง ื“ื’ืฉ. ื–ื” ื”ื’ื™ื•ื ื™ ื›ื™ ื”ืืงื•ืกื™ืกื˜ื ืฉืœ ืจื™ืืงื˜ ืขืฆื•ื, ืื ื‘ืžืงืจื” ื™ืฉ ืœื›ื ื ื™ืกื™ื•ืŸ ืขื ืจื™ื“ืืงืก ื•ืืชื ืžืชืจืื™ื™ื ื™ื ื‘ืžืงื•ื ืฉืžืฉืชืžืฉ ื‘ืจื™ื“ืืงืก ื–ื” ืื—ืœื”. ืื‘ืœ ืื ื”ืžืงื•ื ืžืฉืชืžืฉ ื‘ื–ื•ืกื˜ื ื“ ืื– ื”ืฉื™ื—ื” ืชื”ื™ื” ืžืฉืขืžืžืช. ืื•ืชื• ื“ื‘ืจ ืขื ืกืคืจื™ื•ืช ืœืชืงืฉื•ืจืช ื•ืืคื™ืœื• ืขื next.js. ื‘ืกื•ืฃ ื›ืฉืžืจืื™ื™ื ื™ื ืžืคืชื—ื™ื ืœืžืฉืจื•ืช ืจื™ืืงื˜ ื”ื“ื’ืฉ ื”ื•ื ืขืœ ื”ืœื™ื‘ื” ืฉืœ ืจื™ืืงื˜, ื•ืคื—ื•ืช ืขืœ ื”ืžืกื‘ื™ื‘. 4. ื”ืจื‘ื” ืื ืฉื™ื ื›ืŸ ื“ื™ื‘ืจื• ืขืœ ื”ื—ืฉื™ื‘ื•ืช ืฉืœ ืคื™ืชื•ื— Front End ื‘ืื•ืคืŸ ื›ืœืœื™ - ืื ื–ื” ื˜ื™ื™ืคืกืงืจื™ืคื˜, ื”ื™ื›ืจื•ืช ื˜ื•ื‘ื” ืขื JavaScript ื•ื™ื›ื•ืœื•ืช ื—ื“ืฉื•ืช ืฉืœ ื”ืฉืคื”, ื•ืืคื™ืœื• CSS ื•ื™ื›ื•ืœื•ืช ื—ื“ืฉื•ืช ืฉืœื•. ืื‘ืœ ื”ื›ื™ ื—ืฉื•ื‘ ืœืฉื™ื ืœื‘ ืœืชื—ื™ืœืช ื”ืฉืืœื” - "ืื ื™ ืžืคืชื— ืขื ืฉืœื•ืฉ ืฉื ื•ืช ื ื™ืกื™ื•ืŸ ื‘ืจื™ืืงื˜". ื–ื” ื‘ืกื“ืจ ื’ืžื•ืจ ืœืขื‘ื•ื“ ืฉืœื•ืฉ ืฉื ื™ื ืขื ื›ืœื™ ื‘ืœื™ ืœื”ื‘ื™ืŸ ืืช ื›ืœ ื”ื ื™ื•ืื ืกื™ื ื™ื ืฉืœื• ื•ื‘ืœื™ ืœื”ืฉืชืžืฉ ื‘ื›ืœ ื”ื™ื›ื•ืœื•ืช. ื—ืฉื•ื‘ ื•ื˜ื•ื‘ ืœืงื—ืช ืžื“ื™ ืคืขื ืืช ื”ื–ืžืŸ ื›ื“ื™ ืœื—ื–ืง ืืช ื”ื™ื“ืข. ื›ื•ืชื‘ ื”ืฉืืœื” ื”ืงืฆื™ื‘ ืœื–ื” ืฉืœื•ืฉื” ื™ืžื™ื ื•ื”ื˜ืจื™ื’ืจ ื”ื™ื” ืจืื™ื•ืŸ ืขื‘ื•ื“ื”. ืื ื—ื ื• ืœื ืฆืจื™ื›ื™ื ืœื—ื›ื•ืช ืฉืœื•ืฉ ืฉื ื™ื, ื•ืœื ื—ื™ื™ื‘ื™ื ื˜ืจื™ื’ืจ ื—ื™ืฆื•ื ื™.

ToCode
1 420
# ืฉืœื•ืฉื” ืคื™ืฆ'ืจื™ื ืžืœื”ื™ื‘ื™ื ื‘ืžื™ื•ื—ื“ ื‘ืคื™ื™ืชื•ืŸ 3.12 ืคื™ื™ืชื•ืŸ 3.12 ื™ืฆืื” ืœื ืžื–ืžืŸ ื•ื”ื‘ื™ืื” ืื™ืชื” ืžืกืคืจ ืฉื™ืคื•ืจื™ื ืฉื™ื›ื•ืœื™ื ืœื”ืฉืคื™ืข ื›ืžืขื˜ ืขืœ ื›ืœ ืื—ื“ ื•ืื—ืช ืžืื™ืชื ื•. ืืœื” ื”-3 ืฉืื ื™ ื”ื›ื™ ืื”ื‘ืชื™. ## ืชื—ื‘ื™ืจ ืงืœ ื™ื•ืชืจ ืœืคื•ื ืงืฆื™ื•ืช ื’ื ืจื™ื•ืช ืขื“ 3.12 ื‘ืฉื‘ื™ืœ ืœื›ืชื•ื‘ ืคื•ื ืงืฆื™ื•ืช ื’ื ืจื™ื•ืช ื”ื™ื” ืฆืจื™ืš ืœื”ื’ื“ื™ืจ ืžืฉืชื ื™ื ืžืกื•ื’ TypeVar, ืœืืชื—ืœ ืื•ืชื ื•ืœืชืช ืœื”ื ืฉืžื•ืช ืœืคื ื™ ืฉืืคืฉืจ ื”ื™ื” ืœื”ื’ื™ืข ืœื›ืชื•ื‘ ืืช ื”ืคื•ื ืงืฆื™ื”. ื–ื” ืœืžืฉืœ ืงื•ื“ ื’ื ืจื™ ืžื’ื™ืจืกืื•ืช ืคื™ื™ืชื•ืŸ ื™ืฉื ื•ืช:
from typing import TypeVar

StringOrNumber = TypeVar('StringOrNumber', str, int)

def add(x: StringOrNumber, y: StringOrNumber) -> StringOrNumber:
  return x + y
ื’ื™ืจืกื” 3.12 ื”ื•ืกื™ืคื” ืชืžื™ื›ื” ื‘ PEP 695 ืฉืื•ืžืจ ืฉืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื”ื’ื“ื™ืจ ืคื•ื ืงืฆื™ื•ืช ื’ื ืจื™ื•ืช ื›ืžื• ื‘ืกืงืืœื” ื›ืœื•ืžืจ:
def max[T](args: Iterable[T]) -> T:
    ...
ื”ื‘ืขื™ื” ื”ื™ื—ื™ื“ื” ื”ื™ื ืฉืขื“ื™ื™ืŸ ืื™ ืืคืฉืจ ืœืฉื—ืง ืขื ื”ืคื™ืฆ'ืจ ื›ื™ ื’ื ื‘ mypy ื•ื’ื ื‘ PyCharm ืขื“ื™ื™ืŸ ืžืคืชื—ื™ื ืืช ื”ืชืžื™ื›ื”, ืื‘ืœ ืœืคื—ื•ืช ื™ืฉ ืœืžื” ืœืฆืคื•ืช. ## ืงื™ื ื•ืŸ ืฉืœ ืžื—ืจื•ื–ื•ืช f ื”ืคืฆ'ืจ ื”ื–ื” ื›ื‘ืจ ืขื•ื‘ื“ ื•ืคื•ืชืจ ื‘ืขื™ื” ืžืื•ื“ ืžืขืฆื‘ื ืช ืขื ืžื—ืจื•ื–ื•ืช f:
songs = ['Take me back to Eden', 'Alkaline', 'Ascensionism']
print(f"This is the playlist: {", ".join(songs)}")
ื•ื›ืŸ ืจืื™ืชื ื ื›ื•ืŸ - ื‘ืงื•ื“ ื”ืคื™ื™ืชื•ืŸ ืฉื‘ืชื•ืš ื”ืกื•ื’ืจื™ื™ื ื”ืžืกื•ืœืกืœื™ื ืžื—ืจื•ื–ืช ื›ืชื‘ืชื™ ืžืจื›ืื•ืช ื•ืคื™ื™ืชื•ืŸ ืœื ื ืœื—ืฅ. ## ื”ื’ื“ืจืช ื˜ื™ืคื•ืก ืœ kwargs ืขื TypedDict ืคื™ืฆ'ืจ ืžืœื”ื™ื‘ ืื—ืจื•ืŸ ื”ื•ื ื”ื™ื›ื•ืœืช ืœื”ื’ื“ื™ืจ ื‘ืžื“ื•ื™ืง ืื™ื–ื” ืคืจืžื˜ืจื™ื ืื ื—ื ื• ืจื•ืฆื™ื ืœืงื‘ืœ ืœืชื•ืš ืžื™ืœื•ืŸ ื‘ืคื•ื ืงืฆื™ื” ืฉืžืงื‘ืœืช ืื•ืกืฃ ืžืฉืชื ื” ืฉืœ ืืจื’ื•ืžื ื˜ื™ื ืขื TypedDict:
from typing import TypedDict, Unpack

class Movie(TypedDict):
  name: str
  year: int

def foo(**kwargs: Unpack[Movie]): ...
ื–ืืช ื™ื›ื•ืœืช ืฉื”ื™ืชื” ื—ื–ืจื” ื”ืจื‘ื” ื–ืžืŸ ื•ื›ืžืขืงืฃ ื”ืจื‘ื” ืคืขืžื™ื ื•ื™ืชืจืชื™ ืขืœ ืœืงื‘ืœ **kwargs ืœืคื•ื ืงืฆื™ื” ื•ื”ืขื‘ืจืชื™ ืžืžืฉ ืžื™ืœื•ืŸ. ื™ื›ื•ืœืช ื–ื• ื›ื‘ืจ ืขื•ื‘ื“ืช ื‘ mypy. ืžืžื” ืฉื”ื‘ื ืชื™ ื‘ PyCharm ื–ื” ืขื“ื™ื™ืŸ ื‘ืคื™ืชื•ื—. ืจืฉื™ืžืช ื”ืฉื™ื ื•ื™ื™ื ื”ืžืœืื” ืฉืœ 3.12 ื ืžืฆืืช ื›ืืŸ: https://docs.python.org/3/whatsnew/3.12.html ืœื›ื• ืœื”ืกืชื›ืœ ื•ืกืคืจื• ื‘ืชื’ื•ื‘ื•ืช ืื™ื–ื” ืคื™ืฆ'ืจื™ื ืืชื ื”ื›ื™ ืื”ื‘ืชื.