เริ่มต้นใช้งาน Elixir Programming Language
เผยแพร่แล้ว: 2022-03-11หากคุณเคยอ่านบล็อกโพสต์ หัวข้อข่าวของแฮ็กเกอร์ นักพัฒนาที่คุณชื่นชอบทวีตหรือฟังพอดแคสต์ ณ จุดนี้ คุณอาจเคยได้ยินเกี่ยวกับภาษาการเขียนโปรแกรม Elixir ภาษานี้สร้างโดย Jose Valim ผู้พัฒนาที่รู้จักกันดีในโลกโอเพนซอร์ซ คุณอาจรู้จักเขาจากเฟรมเวิร์ก MVC ของ Ruby on Rails หรือจากทับทิมที่คิดค้นและ simple_form ทำให้เขาและเพื่อนร่วมงานของเขาจาก Plataformatec ทำงานกันในช่วงไม่กี่ปีที่ผ่านมา
ตามรายงานของ Jose Valim Elixir เกิดในปี 2011 เขามีความคิดที่จะสร้างภาษาใหม่เนื่องจากขาดเครื่องมือที่ดีในการแก้ปัญหาการทำงานพร้อมกันในโลกของทับทิม ในเวลานั้น หลังจากใช้เวลาศึกษาการทำงานพร้อมกันและแจกจ่ายภาษาที่เน้น เขาพบสองภาษาที่เขาชอบ คือ Erlang และ Clojure ซึ่งทำงานใน JVM เขาชอบทุกอย่างที่เขาเห็นในภาษา Erlang (Erlang VM) และเขาเกลียดสิ่งที่เขาไม่เห็น เช่น ความหลากหลาย การเขียนโปรแกรมเมตา และคุณลักษณะการขยายทางภาษาที่ Clojure เชี่ยวชาญ ดังนั้น Elixir จึงถือกำเนิดขึ้นโดยคำนึงถึงสิ่งนั้น เพื่อให้มีทางเลือกอื่นสำหรับ Clojure และภาษาแบบไดนามิกที่ทำงานใน Erlang Virtual Machine พร้อมการสนับสนุนความสามารถในการขยายที่ดี
Elixir อธิบายตัวเองว่าเป็นภาษาที่มีพลวัตและใช้งานได้โดยมีสถานะที่ไม่เปลี่ยนรูปและวิธีการที่อิงตามนักแสดงเพื่อการทำงานพร้อมกันที่ออกแบบมาสำหรับการสร้างแอปพลิเคชันที่ปรับขนาดได้และบำรุงรักษาได้ด้วยไวยากรณ์ที่เรียบง่าย ทันสมัย และเป็นระเบียบเรียบร้อย ภาษาทำงานใน Erlang Virtual Machine ซึ่งเป็นเครื่องพิสูจน์การต่อสู้ ประสิทธิภาพสูง และกระจายเครื่องเสมือนที่รู้จักกันในด้านความหน่วงแฝงต่ำและคุณสมบัติความทนทานต่อข้อผิดพลาด
ก่อนที่เราจะเห็นโค้ดบางอย่าง คุ้มที่จะบอกว่า Elixir ได้รับการยอมรับจากชุมชนที่กำลังเติบโต หากคุณต้องการเรียนรู้ Elixir วันนี้ คุณจะพบกับหนังสือ ห้องสมุด การประชุม การพบปะ พอดคาสต์ บล็อกโพสต์ จดหมายข่าว และแหล่งการเรียนรู้ทุกประเภทได้อย่างง่ายดาย เช่นเดียวกับที่ผู้สร้าง Erlang ยอมรับ
มาดูโค้ดกัน!
ติดตั้งน้ำอมฤต:
การติดตั้ง Elixir นั้นง่ายมากในแพลตฟอร์มหลัก ๆ ทั้งหมด และเกือบทั้งหมดเป็นขั้นตอนเดียวในเกือบทุกแพลตฟอร์ม
Arch Linux
Elixir มีอยู่ใน Arch Linux ผ่านที่เก็บอย่างเป็นทางการ:
pacman -S elixir
อูบุนตู
การติดตั้ง Elixir ใน Ubuntu นั้นค่อนข้างจะเป็นระเบียบเรียบร้อย แต่ก็ง่ายพอ
wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb apt-get update apt-get install esl-erlang apt-get install elixir
OS X
ติดตั้ง Elixir ใน OS X โดยใช้ Homebrew
brew install elixir
พบกับ IEx
หลังจากการติดตั้งเสร็จสิ้น ก็ถึงเวลาเปิดเปลือกของคุณ คุณจะใช้เวลามากในเปลือกของคุณถ้าคุณต้องการพัฒนาใน Elixir
เชลล์แบบโต้ตอบของ Elixir หรือ IEx คือ REPL - (อ่านประเมินการพิมพ์ลูป) ซึ่งคุณสามารถสำรวจ Elixir ได้ คุณสามารถป้อนนิพจน์ที่นั่นและพวกมันจะได้รับการประเมินโดยให้คำติชมทันที โปรดทราบว่าโค้ดของคุณได้รับการประเมินอย่างแท้จริงและไม่ได้คอมไพล์ ดังนั้นอย่าเรียกใช้การทำโปรไฟล์หรือการวัดประสิทธิภาพในเชลล์
The Break Command
มีสิ่งสำคัญที่คุณต้องรู้ก่อนเริ่ม IEx REPL - วิธีออกจากมัน
คุณอาจเคยชินกับการกด CTRL+C
เพื่อปิดโปรแกรมที่ทำงานอยู่ในเทอร์มินัล หากคุณกด CTRL+C
ใน IEx REPL คุณจะเปิดเมนูตัวแบ่ง เมื่ออยู่ในเมนูเบรก คุณสามารถกด CTRL+C
อีกครั้งเพื่อออกจากเชลล์ได้เช่นเดียวกับ a
กด .
ฉันจะไม่ดำดิ่งลงไปในฟังก์ชั่นเมนูพัก แต่มาดูผู้ช่วย IEx กันบ้าง!
ผู้ช่วย
IEx มีตัวช่วยจำนวนมากเพื่อแสดงรายการทั้งหมด type: h()
และนี่คือสิ่งที่คุณควรเห็น:
นี่คือรายการโปรดบางส่วนของฉัน ฉันคิดว่าพวกเขาจะเป็นของคุณเช่นกัน
-
h
ตามที่เราเพิ่งเห็น ฟังก์ชันนี้จะพิมพ์ข้อความช่วยเหลือ -
h/1
ซึ่งเป็นฟังก์ชันเดียวกัน แต่ตอนนี้คาดว่าจะมีหนึ่งอาร์กิวเมนต์
ตัวอย่างเช่น เมื่อใดก็ตามที่คุณต้องการดูเอกสารประกอบของเมธอด String
strip/2
คุณสามารถทำได้ง่ายๆ:
ตัวช่วย IEx ที่มีประโยชน์ที่สุดอันดับสองที่คุณจะใช้ในขณะที่เขียนโปรแกรมใน Elixir คือ c/2
ซึ่งรวบรวมไฟล์ elixir ที่กำหนด (หรือรายการ) และคาดว่าเป็นพารามิเตอร์ที่สองเป็นพาธสำหรับเขียนไฟล์ที่คอมไพล์แล้ว
สมมติว่าคุณกำลังทำงานใน http://exercism.io/ Elixir exersices ซึ่งเป็นแบบฝึกหัด Anagram
ดังนั้น คุณได้ใช้โมดูล Anagram
ซึ่งมีเมธอดที่ match/2
ในไฟล์ anagram.exs ในฐานะนักพัฒนาที่ดี คุณได้เขียนข้อกำหนดบางประการเพื่อให้แน่ใจว่าทุกอย่างทำงานได้ตามที่คาดไว้เช่นกัน
นี่คือลักษณะของไดเรกทอรีปัจจุบันของคุณ:
ตอนนี้ เพื่อที่จะรันการทดสอบของคุณกับโมดูล Anagram คุณต้องรัน/คอมไพล์การทดสอบ
อย่างที่คุณเห็น ในการคอมไพล์ไฟล์ เพียงแค่เรียกใช้ elixir
executable pass เป็นพาธอาร์กิวเมนต์ไปยังไฟล์ที่คุณต้องการคอมไพล์
ตอนนี้ สมมติว่าคุณต้องการเรียกใช้ IEx REPL ด้วยโมดูล Anagram ที่สามารถเข้าถึงได้ในบริบทของเซสชัน มีสองตัวเลือกที่ใช้กันทั่วไป อย่างแรกคือ คุณสามารถกำหนดให้ไฟล์โดยใช้ตัวเลือก -r
เช่น iex -r anagram.exs
อันที่สอง คุณสามารถคอมไพล์ได้จากเซสชัน IEx
ง่ายๆ แค่นี้เอง!
โอเค แล้วถ้าคุณต้องการคอมไพล์โมดูลใหม่ล่ะ? คุณควรออกจาก IEx ให้รันอีกครั้งและคอมไพล์ไฟล์อีกครั้งหรือไม่ ไม่! หากคุณมีหน่วยความจำที่ดี คุณจะจำได้ว่าเมื่อเราระบุตัวช่วยทั้งหมดที่มีอยู่ใน IEx REPL เราพบบางอย่างเกี่ยวกับคำสั่งคอมไพล์ใหม่ เรามาดูกันว่ามันทำงานอย่างไร
สังเกตว่าคราวนี้ คุณส่งผ่านอาร์กิวเมนต์ของโมดูลเอง ไม่ใช่เส้นทางของไฟล์
อย่างที่เราเห็น IEx มีตัวช่วยที่มีประโยชน์อีกมากมายที่จะช่วยให้คุณเรียนรู้และเข้าใจวิธีการทำงานของโปรแกรม Elixir ได้ดีขึ้น

พื้นฐานของประเภท Elixir
ตัวเลข
ตัวเลขมีสองประเภท จำนวนเต็มขนาดโดยพลการและตัวเลขทศนิยม
จำนวนเต็ม
สามารถเขียนจำนวนเต็มในฐานทศนิยม เลขฐานสิบหก ฐานแปด และไบนารี
เช่นเดียวกับ Ruby คุณสามารถใช้ขีดล่างเพื่อแยกกลุ่มตัวเลขสามหลักเมื่อเขียนตัวเลขจำนวนมาก ตัวอย่างเช่น คุณสามารถถูกต้องร้อยล้านเช่นนี้:
100_000_000
เลขฐานแปด:
0o444
เลขฐานสิบหก:
0xabc
ไบนารี่:
0b1011
ลอยน้ำ
Flore เป็น IEEE 754 ที่มีความแม่นยำสองเท่า มีความแม่นยำ 16 หลักและเลขชี้กำลังสูงสุดประมาณ 10308
ทศนิยมเขียนโดยใช้จุดทศนิยม ต้องมีอย่างน้อยหนึ่งหลักก่อนและหลังจุด คุณยังสามารถผนวกเลขชี้กำลังต่อท้ายได้อีกด้วย ตัวอย่างเช่น 1.0, 0.3141589e1 และ 314159.0-e
อะตอม
อะตอมเป็นค่าคงที่ที่แสดงชื่อ เป็นค่านิยมที่ไม่เปลี่ยนรูป คุณเขียนอะตอมด้วยทวิภาคนำ :
และลำดับของตัวอักษร ตัวเลข ขีดล่าง และที่เครื่องหมาย @
คุณยังสามารถเขียนมันด้วยเครื่องหมายทวิภาคนำหน้า :
และลำดับอักขระที่ล้อมรอบด้วยเครื่องหมายคำพูดได้ตามต้องการ
อะตอมเป็นเครื่องมือที่ทรงพลังมาก พวกมันถูกใช้เพื่ออ้างอิงถึงฟังก์ชัน erlang เช่นเดียวกับคีย์และเมธอดของ Elixir
นี่คืออะตอมที่ถูกต้องบางส่วน
:name, :first_name, :"last name", :===, :is_it_@_question?
บูลีน
แน่นอน ค่าบูลีนเป็นค่าจริงและค่าเท็จ แต่ข้อดีของพวกมันก็คือ สุดท้ายแล้ว พวกมันก็คืออะตอม
เครื่องสาย
โดยค่าเริ่มต้น สตริงใน Elixir จะเป็นไปตามมาตรฐาน UTF-8 หากต้องการใช้อักขระเหล่านี้ คุณสามารถกำหนดจำนวนอักขระที่ล้อมรอบด้วย "
หรือ '
ได้ตามต้องการ คุณยังสามารถมีนิพจน์ที่มีการสอดแทรกอยู่ภายในสตริงได้เช่นเดียวกับอักขระที่ใช้ Escape
โปรดทราบว่าสตริงที่ยกมาเดี่ยวเป็นรายการไบนารี
ฟังก์ชั่นนิรนาม
ในฐานะที่เป็นภาษาที่ใช้งานได้ Elixir มีฟังก์ชันที่ไม่ระบุตัวตนเป็นประเภทพื้นฐาน วิธีง่ายๆ ในการเขียนฟังก์ชันคือ fn (argument_list) -> body end
แต่ฟังก์ชันสามารถมีหลายเนื้อหาที่มีรายการอาร์กิวเมนต์หลายรายการ คำสั่งป้องกัน และอื่นๆ
Dave Thomas ในหนังสือ Programming Elixir แนะนำว่าเราคิดว่า fn...end เป็นเครื่องหมายคำพูดที่ล้อมรอบตัวอักษร string โดยที่แทนที่จะคืนค่าสตริง เราจะคืนค่าฟังก์ชัน
ทูเปิลส์
Tuple เป็นอาร์เรย์ที่จัดทำดัชนีที่ไม่เปลี่ยนรูป ค่าเหล่านี้คืนขนาดได้อย่างรวดเร็วและต่อท้ายค่าใหม่ช้าเนื่องจากลักษณะที่ไม่เปลี่ยนรูป เมื่ออัปเดต tuple คุณกำลังสร้างสำเนา tuple ตัวเองใหม่ทั้งหมด
Tuples มักใช้เป็นค่าส่งคืนของอาร์เรย์ ขณะเขียนโค้ดใน Elixir คุณมักจะเห็นสิ่งนี้บ่อยมาก {:ok, something_else_here}
นี่คือวิธีที่เราเขียนทูเพิล: {?a,?b,?c}
การจับคู่รูปแบบ
ฉันไม่สามารถอธิบายทุกสิ่งที่คุณจำเป็นต้องรู้เกี่ยวกับการจับคู่รูปแบบได้ แต่สิ่งที่คุณกำลังจะอ่านครอบคลุมสิ่งที่คุณต้องรู้เพื่อเริ่มต้นใช้งาน
Elixir ใช้ =
เป็นตัวดำเนินการจับคู่ เพื่อให้เข้าใจสิ่งนี้ เราจำเป็นต้องเลิกเรียนรู้สิ่งที่เรารู้เกี่ยวกับ =
ในภาษาดั้งเดิมอื่นๆ ในภาษาดั้งเดิม ตัวดำเนินการเท่ากับมีไว้สำหรับการมอบหมาย ใน Elixir ตัวดำเนินการเท่ากับใช้สำหรับการจับคู่รูปแบบ
นั่นคือวิธีการทำงานของค่าทางด้านซ้ายมือ หากเป็นตัวแปร จะถูกผูกไว้ทางด้านขวามือ หากไม่ใช่ตัวแปร ยาอายุวัฒนะจะพยายามจับคู่กับด้านขวามือ
ตัวดำเนินการพิน
Elixir มีวิธีบังคับรูปแบบการจับคู่กับตัวแปรทางด้านซ้ายมือเสมอ ซึ่งก็คือตัวดำเนินการพิน
รายการ
ใน Elixir รายการจะดูเหมือนอาร์เรย์ที่เรารู้จักจากภาษาอื่น แต่ไม่ใช่ รายการเป็นโครงสร้างเชื่อมโยงซึ่งประกอบด้วยหัวและหาง
รายการคำหลัก
รายการคำหลักคือรายการของคู่ทูเปิล
คุณเพียงแค่เขียนเป็นรายการ ตัวอย่างเช่น: [{:หนึ่ง, 1}, 2, {:สาม, 3}] มีทางลัดสำหรับกำหนดรายการ ซึ่งมีลักษณะดังนี้: [หนึ่ง: 1, สาม: 3]
ในการดึงข้อมูลจากรายการคำหลัก คุณสามารถใช้:
Keyword.get([{:one, 1}, 2, {:three, 3}], :one)
หรือใช้ทางลัด:
[{:one, 1}, 2, {:three, 3}][:one]
เนื่องจากรายการคีย์เวิร์ดจะช้าเมื่อดึงค่า จึงเป็นการดำเนินการที่มีราคาแพง ดังนั้น หากคุณกำลังจัดเก็บข้อมูลที่ต้องการการเข้าถึงที่รวดเร็ว คุณควรใช้แผนที่
แผนที่
แผนที่คือชุดของคู่คีย์/ค่าที่มีประสิทธิภาพ คีย์สามารถมีค่าใดก็ได้ที่คุณต้องการให้เป็นคีย์ แต่โดยปกติควรเป็นประเภทเดียวกัน แตกต่างจากรายการคีย์เวิร์ด Maps อนุญาตเพียงรายการเดียวสำหรับคีย์ที่ระบุ สิ่งเหล่านี้มีประสิทธิภาพเมื่อเติบโต และสามารถใช้ในรูปแบบ Elixir ที่ตรงกันในแผนที่การใช้งานทั่วไปเมื่อคุณต้องการอาร์เรย์ที่เชื่อมโยง
วิธีเขียนแผนที่มีดังนี้
%{ :one => 1, :two => 2, 3 => 3, "four" => 4, [] => %{}, {} => [k: :v]}
บทสรุป
Elixir นั้นยอดเยี่ยม เข้าใจง่าย มีประเภทที่เรียบง่ายแต่ทรงพลังและเครื่องมือที่มีประโยชน์รอบตัว ซึ่งจะช่วยคุณเมื่อเริ่มเรียนรู้ ในส่วนแรกนี้ เราได้กล่าวถึงประเภทข้อมูลต่างๆ ที่โปรแกรม Elixir สร้างขึ้นและตัวดำเนินการที่เปิดใช้งาน ในส่วนต่อๆ ไป เราจะเจาะลึกเข้าไปในโลกของ Elixir - การเขียนโปรแกรมที่ใช้งานได้จริงและทำงานพร้อมกัน