Simple Example

อย่าเพิ่งคิดอะไรมากนะครับ ถ้ายังไม่ทราบว่ามันคืออะไรก็ยังไม่ต้องตกใจ เรามาเริ่มดู code ที่แสนจะง่ายกันคือการคำนวน factorial ซึ่งความหมายทางคณิตศาสตร์คือ
n! = 1 when n=0, otherwise
n! = n * (n-1)
หรือ n! จะมีค่าเป็น 1 ต่อเมื่อ n มีค่าเป็นศูนย์แล้ว แต่ถ้าไม่ใช่ n! จะมีค่าเป็น n * (n-1) ซึ่งเมื่อทำการแปลงความหมายออกมาเป็น programming แล้วจะเขียนได้เป็นภาษา ruby ได้ดังนี้

def fact(n)
if n == 0
1
else
n * fact(n-1)
end
end

อาจจะสังเกตุได้ว่ามันจะทำการเรียกตัวเองซ่ำที่ตอนท้าย เราเรียกว่าเป็น recursive function ซึ่งการเขียน program ในภาษา ruby นั้นมีโคตรงสร้างคล้ายกับรูปแบบ Algol-like (อันที่จริงแล้ว ไวยกรณ์ (syntex) คล้ายกับภาษา Eiffle มาก) ซึ่งมันจะทำซ้ำจนกว่าไม่มีการเรียกตัวเองซ้ำ เราสามารถนำ code ข้างต้นที่เป็นเพียงแต่ function ไปทำการเขียนให้อยู่ในรูปแบบการรับค่าได้ดังนี้
# Program to find the factorial of a number
# Save this as fact.rb

def fact(n)
if n == 0
1
else
n * fact(n-1)
end
end

print fact(ARGV[0].to_i), "\n"

ในที่นี้ ARGV เป็น array ที่รับค่ามาจาก command line agrument และ to_i เป็นการแปลงค่าให้เป็น integer เพื่อนำไปคำนวนได้
% ruby fact.rb 1
1
% ruby fact.rb 5
120

คราวต่อไปลองใส่ซัก 40 ดู ถ้าเป็นเครื่องคิดเลขจะเกิด overflow
% ruby fact.rb 40
815915283247897734345611269596115894272000000000

แต่แล้ว ruby ก็ยังสามารถคำนวนได้ งั้นลอง 400 ดูสิ
% ruby fact.rb 400
64034522846623895262347970319503005850702583026002959458684
44594280239716918683143627847864746326467629435057503585681
08482981628835174352289619886468029979373416541508381624264
61942352307046244325015114448670890662773914918117331955996
44070954967134529047702032243491121079759328079510154537266
72516278778900093497637657103263503315339653498683868313393
52024373788157786791506311858702618270169819740062983025308
59129834616227230455833952075961150530223608681043329725519
48526744322324386699484224042325998055516106359423769613992
31917134063858996537970147827206606320217379472010321356624
61380907794230459736069956759583609615871512991382228657857
95493616176544804532220078258184008484364155912294542753848
03558374518022675900061399560145595206127211192918105032491
00800000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000

ก็ยังสามารถคำนวนได้ แต่ผมไม่มีเวลามาตรวจความถูกต้องแต่แน่นอน "มันควรจะถูกต้องเป๊ะๆเลย"

The input loop
ruby ยังสามารถทำการประมวลผลจาก standard input โดยจะเริ่มประมวลหลังจากจบการเขียน
% ruby
print "hello world\n"
print "good-bye world\n"
^D
hello world
good-bye world

Tue, 25 Jul 2006 15:56 Posted in

Tags , , ,

Comment Simple Example


RSS