วันอาทิตย์ที่ 9 มิถุนายน พ.ศ. 2556

พื้นฐานการเขียนโปรแกรมภาษา Erlang ตอนที่ 4

Functions
-    ฟังก์ชั่นถูกจัดกลุ่มเก็บไว้ใน module
-    ชื่อฟังก์ชั่นเป็น atom
-    ฟังก์ชั่นประกอบด้วยส่วนหัวคือชื่อของฟังก์ชั่น และวงเล็บพารามิเตอร์
-    จำนวนพารามิเตอร์เรียก arity
-    ใช้เครื่องหมายลูกศร (->) เป็นตัวแยกส่วนหัวกับ ตัวของฟังก์ชั่น
ตัวอย่างฟังก์ชั่นคำนวณพื้นที่ของรูปทรง
area({square,Side})->
    Side*Side;
area({cicle,Radius})->
    math:pi()*Radius*Raduis;
area({triangle,A,B,C})->
    S=(A+B+C)/2,
    math:sqrt(S*(S-A)*(S-B)*(S-C));
area(Other)->
    {error,invalid_object}.


การใช้งานฟังก์ชั่น เมื่อมีการผ่านค่าพารามิเตอร์ จะมีการตรวจสอบรูปแบบของพารามิเตอร์ว่ามีความสัมพันธ์ตรงกับฟังก์ชั่นใด
1.    เทียบแล้วถ้ามีรูปแบบที่ถูกต้อง ตัวแปรถูกผูก ส่วนของคำสั่งภายในฟังก์ชั่นประมวลผล
2.    ถ้าไม่ ให้เทียบกับฟังก์ชั่นถัดไป
3.    ถ้าไม่มีฟังก์ชั่นใดที่รูปแบบตรงกับพารามิเตอร์ ให้ทำฟังก์ชั่น area(Other) ซึ่งเป็นฟังก์ชั่น catch-all
ตัวอย่างฟังก์ชั่น factorial แบบ recursive
    factorial(0)-> 1;
    factorial(N)->
        N*factorial(N-1);


การทำงานเมื่อ 3! = 3*2*1*1
เรียกใช้ฟังก์ชั่น
factorial(3).

ขั้นตอนการทำงาน
3*factorial(3-1)            3*2*1*1
    2*factorial(2-1)        2*1*1
        1*factorial(1-1)    1*1
            factorial(0)    1

Modules
-    Module คือการจัดกลุ่มรวมเอาฟังก์ชั่นเข้าด้วยกัน
-    การตั้งชื่อ module ใช้ –module(name)
-    ชื่อไฟล์ .erl และชื่อโมดูลต้องเหมือนกัน
ตัวอย่าง
-module(mymodule).            %ตั้งชื่อ module
-export([double/1]). %กำหนดฟังก์ชั่นที่เรียกได้จากภายนอก (ชื่อฟังก์ชั่น/จำนวนพารามิเตอร์)
%เขียนคอมเมน์หลังเครื่องหมายเปอร์เซนต์
double(Value)->
    times(Value,2).
times(X,Y)->
    X*Y.

Compilation and The Erlang Virtual Machine
-    เมื่อต้องการรันฟังก์ชั่นจากโมดูลต้องทำการคอมไพล์โค้ดที่เขียนขึ้นก่อน
-    คอมไพล์ไฟล์ .erl ได้ .beam อยู่ที่เดียวกัน
-    ไฟล์ .beam มาจาก Bogdan/Björn's Erlang Abstract Machine
ตัวอย่างการใช้งาน
ใช้ pwd(). ดูไดเรกทอรีที่ใช้งานอยู่ปัจจุบัน
ใช้ ls(). ดูรายการไฟล์ในไดเรกทอรี
ใช้ cd('เปลี่ยนไดเรกทอรี').
ดูคำสั่งอื่นๆ help().
คอมไพล์โมดูล c(mymodule).
เรียกใช้งานฟังก์ชั่นในโมดูล mymodule:double(10).

1> pwd().
C:/Program Files/erl5.10.1/usr
ok
2> ls().
include          lib              mymodule.erl     sample.erl      

ok
3> c(mymodule).
{ok,mymodule}
4> mymodule:double(10).
20
5>


Module Directives
ในทุกโมดูลสามารถกำหนดคุณสมบัติ และข้อมูลให้กับโมดูลได้ ใช้รูปแบบ
-attribute(Value).
วางไว้ในตอนต้นของโค้ดในโมดูล
ตัวอย่างเช่น
-compile(export_all).
ทำการ export ทุกฟังก์ชั่นที่มีอยู่ไว้ในโมดูล
-import(math,[sqr/1]).
นำเข้าฟังก์ชั่น sqr จากโมดูล math
-author(Name).
ชื่อผู้เขียนโมดูล
-date(Date).
วันที่
เรียกดูข้อมูลของโมดูลจากคอนโซล
mymodule:module_info().

1> mymodule:module_info().
[{exports,[{double,1},{module_info,0},{module_info,1}]},
 {imports,[]},
 {attributes,[{vsn,[41764679909994037487721795937844871700]}]},
 {compile,[{options,[]},
           {version,"4.9.1"},
           {time,{2013,6,9,6,8,3}},
           {source,"c:/Program Files/erl5.10.1/usr/mymodule.erl"}]}]
2>


ไม่มีความคิดเห็น:

แสดงความคิดเห็น