Elixir - ลูป

เนื่องจากความไม่เปลี่ยนรูปลูปใน Elixir (เช่นเดียวกับภาษาโปรแกรมที่ใช้งานได้) จึงเขียนแตกต่างจากภาษาที่จำเป็น ตัวอย่างเช่นในภาษาที่จำเป็นเช่น C คุณจะเขียน -

for(i = 0; i < 10; i++) {
   printf("%d", array[i]);
}

ในตัวอย่างที่ให้ไว้ข้างต้นเรากำลังกลายพันธุ์ทั้งอาร์เรย์และตัวแปร i. ไม่สามารถกลายพันธุ์ได้ใน Elixir ภาษาที่ใช้งานได้จะขึ้นอยู่กับการเรียกซ้ำ: ฟังก์ชันถูกเรียกซ้ำจนกว่าจะถึงเงื่อนไขที่หยุดการดำเนินการแบบเรียกซ้ำไม่ให้ดำเนินต่อไป ไม่มีข้อมูลที่ถูกกลายพันธุ์ในกระบวนการนี้

ตอนนี้ให้เราเขียนลูปง่ายๆโดยใช้การเรียกซ้ำที่พิมพ์สวัสดี n ครั้ง.

defmodule Loop do
   def print_multiple_times(msg, n) when n <= 1 do
      IO.puts msg
   end

   def print_multiple_times(msg, n) do
      IO.puts msg
      print_multiple_times(msg, n - 1)
   end
end

Loop.print_multiple_times("Hello", 10)

เมื่อรันโปรแกรมข้างต้นจะให้ผลลัพธ์ดังนี้ -

Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello

เราได้ใช้เทคนิคการจับคู่รูปแบบของฟังก์ชันและการเรียกซ้ำเพื่อใช้งานลูปได้สำเร็จ คำจำกัดความแบบวนซ้ำเป็นเรื่องยากที่จะเข้าใจ แต่การแปลงลูปเป็นการเรียกซ้ำนั้นทำได้ง่าย

Elixir ให้เรา Enum module. โมดูลนี้ใช้สำหรับการโทรวนซ้ำที่วนซ้ำบ่อยที่สุดเนื่องจากใช้งานได้ง่ายกว่าการพยายามหาคำจำกัดความซ้ำสำหรับสิ่งเดียวกัน เราจะคุยกันในบทถัดไป ควรใช้คำจำกัดความแบบเรียกซ้ำของคุณเองก็ต่อเมื่อคุณไม่พบวิธีแก้ปัญหาโดยใช้โมดูลนั้น ฟังก์ชั่นเหล่านี้เหมาะสำหรับการโทรหางและค่อนข้างเร็ว