Screen Shot 2557-04-19 at 10.19.58 PM
สรุปวันที่ 1 สำหรับการเรียนการเขียนโปรแกรมด้วยภาษา Erlang
ผู้สอนคือจากพี่ @iporsut ที่ Geeky Base
โดยเนื้อหาต่างๆ ที่เรียนวันนี้ประกอบไปด้วย
ความรู้พื้นฐานต่างๆ
การจัดการ List, Tuple
การจัดการ process

1. เริ่มด้วยขณะที่รอให้คนเรียนมาครบ เริ่มต้นด้วยการสร้าง Virtual machine ด้วย Erlang
สามารถจำลองเครื่องขึ้นมาได้หลายๆ ตัว
โดยใช้คำสั่ง

$erl -sname <name> -cookie <group>

หรือ

$erl -name <name>@<hostname/ip>   -cookie <group>

ต่อจากนั้นทำการ register ด้วยคำสั่ง

erl> register(<name>, self()).

สุดท้ายก็ส่งข้อความไปยังชื่อเครื่องที่เราต้องการ ด้วยคำสั่ง

erl> {<name>, '<name@ip>’} ! “message to send”.

และสามารถดูข้อความที่ส่งเข้ามามีอะไรบ้าง ด้วยคำสั่ง

erl>flush().


2. อธิบายเกี่ยวกับชื่อต่างๆ ที่ใช้ใน Erlang เช่น

abc คือ Atom จะเป็นตัวเล็กทั้งหมด
List คือตัวแปร จะขึ้นต้นด้วยตัวใหญ่เสมอ

รวมทั้งอธิบายเรื่อง pattern matching และคุณสมบัติในการประกาศตัวแปร
เช่น

Num = 10
Num = 11 

จะ error เนื่องจาก Num ได้ถูกกำหนดค่าเป็น 10 ไปแล้ว
โดย Erlang มองว่ามันคือการประกาศ function ที่ไม่สามารถเปลี่ยนแปลงได้
3. อธิบายเรื่อง List และ Tuple
โดยตัวอย่างที่สนุกกันก็คือ Head และ Tail

[H|T] = [1,2,3,4]

โดยค่าของ
H = 1
T = [2,3,4]

แต่ถ้าไม่สนใจ Head สามารถใช้ _ มาช่วยได้ดังนี้

[_|T] = [1,2,3,4]

4. การ compile และ run โปรแกรม Erlang ทำด้วยคำสั่ง

$erlc <filename>.erl

ส่วนการ run นั้นทำได้ 2 แบบก็คือ ผ่าน erl shell หรือ ไม่ผ่าน erl shell ก็ได้

ตัวอย่างการไม่ใช้ erl shell ด้วยคำสั่ง

$erl -noshell -s <module name> <function name>

ส่วนการใช้ erl shell นั้นทำดังนั้น

$erl
erl>  c(<module_name>).

ถ้าต้องการ load module สามารถใช้คำสั่ง

erl>  m(<module_name>).

สั่งให้ทำงานด้วยคำสั่ง

erl>  <modulename>:<function_name>( <parameters> ).


5. อธิบายว่าการทำงานมันเกิดจากการทำงานของแต่ละ function

โดยเอาแต่ละ function มาร้อยเรียงกัน เพื่อให้เกิดโปรแกรมการทำงาน

ซึ่งได้ทำ lab กันในเรื่อง Recursive function ได้แก่

  • Factorial
  • Sum
  • Count
  • Average

ตัวอย่าง Factorial เช่น

factorial(0) -> 1;
factorial(1) -> 1;
factorial(N) -> N * factorial(N-1).

รวมทั้งยังใช้แนวคิด recursive tail อีกด้วย
เพื่อเพิ่มประสิทธิภาพการทำงานให้ดีขึ้น

6. อธิบายเรื่องของ Higher order function
ซึ่งเราสามารถส่ง function เข้าไปใน function ได้
เพื่อช่วยประมวลผลการทำงาน ตามที่ต้องการ
ทำให้สะดวกมากขึ้น
และได้ยกตัวอย่างของทำ Map-Reduce
โดยการ reduce จะเรียกว่า Fold ซึ่งมีทั้ง Fold right และ Fold left
ซึ่งตรงนี้ตอนแรกยังงงๆ แต่เมื่อลองได้ทำตัวอย่างทำให้เข้าใจทันที


7. เรื่อง List ปิดด้วย List comprehension

ตัวอย่างเช่น
การหาค่าใน List ที่มากกว่า 2

[ X || X<- [1,2,3,4,5], X>2 ]


8. อธิบายเรื่องของ process ว่าใน Erlang จัดการ process อย่างไร

และอธิบานว่า Parallel มันไม่เท่ากับ Concurrency นะ
และคำสั่งที่ใช้ในการสร้าง process ขึ้นมาก็คือ

$spawn ( M, F, A )

M คือ ชื่อ module
F คือ ชื่อ function
A คือ List ของ arguments ที่ส่งเข้าไปยัง function

สามารถดู process id ด้วยคำสั่ง self()
หรือถ้าต้องการดู process ทั้งหมดที่ทำงานอยู่ใน Erlang VM ใช้คำสั่ง

erl>erlang:processes().

หรือถ้าต้องการดูผ่าน GUI สามารถใช้คำสั่ง

$appmon:start().

โดยในส่วนนี้ทำ lab เกี่ยวกับ
การส่ง message
การจำลองการเพิ่มข้อมูลลงใน List
การจำลองการดึงข้อมูลออกจาก List
รวมทั้งการแสดงผลใน List

ซึ่งจะทำการสร้างและ register process ทิ้งไว้
แล้วส่ง message ตาม format ที่กำหนด
การทำงานจะมีลักษณะคล้ายกับหัวข้อที่ 1

9. ทำ lab เกี่ยวกับการสร้าง Broadcast server
เพื่อส่งข้อความไปยัง client ทุกๆ ตัว
หรือ Client-server นั่นเอง
ซึ่งตรงนี้ทำการ implement สนุกมาก
ได้เอาความรู้ต่างๆ ที่เรียนมาใช้

10. หัวข้อสุดท้ายเป็นการนำเอา Socket มาผสมเข้ากับ Client-server จากข้อ 9
โดยสามารถใช้งานผ่านการ telnet เข้ามา

Code ต่างๆ ของ course นี้ทำเอาไว้ดูเล่นที่ GitHub :: Learn Erlang

 

Tags: