Saturday, January 28, 2006

วันนี้เห็น ruby code ใน redhanded
เรื่อง partition array

ประโยคที่สับสนก็คือ

ary << [] if [*ary.last].nitems % len == 0


สับสนตรง ทำไมต้องใช้ prefix *
แล้ว prefix * คืออะไร

ทดลองดู

require 'pp'
pp [[1],[2],[3]][2]
=> [3]
pp *[[1],[2],[3]][2]
=> 3


Note: * มี priority ต่ำสุด
ประโยค *[[1],[2],[3]][2]
การทำงานจริงจะเป็น *([[1],[2],[3]][2])
นั่นคือ method [] จะถูกเรียกทำงานก่อน

ที่งงต่อก็คือ
[] ที่ครอบ *ary.last
ทำไมต้องถอดออก(ด้วย *) แล้วก็ใส่เข้าไปใหม่ (ด้วย [])

สุดท้ายก็เดาว่า
ณ จุดเริ่มต้นการทำงาน ary.last มันจะเป็น null
ก็เลยใช้ short-cut แบบนี้เพื่อให้สามารถรองรับ case ary.last == nil ได้

ถ้าเป็นเราเขียน (แบบทื่อๆ) ก็คงเขียน

ary << [] if ary.last == nil or ary.last.nitems % len == 0

Related link from Roti

จาก Dear Diary
I think that one day universities will realize that solid programming skills in at least one language should be a prerequisite for a Computer Science curriculum, just as music majors are expected to already play one instrument.

ฟังดู ก็ดีนะ
เพราะถ้าโปรแกรมมิ่งเป็นบ้างแล้ว
น่าจะซาบซึ้งกับการเรียนมากขึ้น

Related link from Roti

เกมส์ สำหรับ คนที่คิดว่าใช้ mouse ได้คล่องแคล่ว
http://www.iol.ie/~dluby/escape.htm

Related link from Roti

Tuesday, January 24, 2006

Code Coverage C0, C1, C2

พึ่งรู้ว่า code coverage เขามีการแบ่งระดับด้วย
ลองอ่านดูที่นี่
Better code coverage for Ruby: rconv 0.1.0

Related link from Roti