ผมเชื่อว่ายังมีแรงต้านกันอยู่พอสมควรที่จะใช้ภาษาไทยในการเขียนโปรแกรม เพราะมันเป็นเรื่องจริงครับ ที่ภาษาไทยไม่เหมาะเลยที่จะใช้เป็นภาษาโปรแกรมด้วยหลาย ๆ เหตุผล ตั้งแต่การใช้สัญลักษณ์ ไปจนถึงการใช้คำ
เพราะภาษาไทยเป็นภาษาสื่อสาร เราจึงควรใช้มันให้เหมาะเพื่อการสื่อสารครับ
ตามที่เคยพูดไว้ใน quickpod ว่า BDD มีจุดพิเศษตรงที่มันเป็นความพยายามจะรวมเอา ภาษาสื่อสารกับภาษาโปรแกรมมาใช้ร่วมกันให้เกิดประโยชน์มากขึ้น ซึ่งอาจจะไม่ชัดเจนนักในภาษาอังกฤษ เพราะเส้นกั้นระหว่างภาษาโปรแกรมเช่น Groovy หรือ Java กับภาษาอังกฤษนั้นมันค่อนข้างเบลอ
แต่กับภาษาไทย เราเห็นชัดเจนครับว่ามันต่างกัน
ภาษาไทยในโค้ดจะไม่มีประโยชน์เลย ถ้าเราให้คนที่อ่านภาษาโปรแกรมออกมาอ่านโค้ดดังกล่าว แต่มันกลับกลายเป็นว่าจะมีประโยชน์มาก เมื่อคนที่ไม่คุ้นเคยกับภาษาโปรแกรม มาเห็นโค้ดชุดนั้น ผมเคยทดสอบเรื่องนี้ไว้ใน narisa.com เสียดายที่ช่วงนี้ server down เลยไม่ได้มีโอกาสไปค้นกระทู้มาอ้างอิง
จากจุดนั้นผมเลยเริ่มมีความเชื่อว่า จริง ๆ แล้วการใช้ภาษาไทยร่วมกับภาษาโปรแกรมนั้นมีประโยชน์ ถ้าเราใช้ให้เหมาะสม
นี่คือที่มาของ tspec ซึ่งเป็น BDD framework ที่สนับสนุนภาษาไทย แต่ไม่ได้ให้ developer เขียนโค้ดภาษาไทยครับ
เกริ่นมานานก็เอาโค้ดมาให้ดู
เรื่อง 'ภาษี'
อธิบาย 'การมาจ่ายภาษีครั้งแรก', {
กำหนดให้ 'มีผู้มาจ่ายภาษีชื่อสมชาย', {
name = 'สมชาย'
}
เมื่อ 'เป็นการมาจ่ายครั้งแรก', {
payer = Payer.findByName(name)
}
แล้วควร 'จะไม่พบข้อมูล', {
payer.shouldBe null
}
}
อธิบาย 'การมาจ่ายภาษีครั้งที่สอง', {
กำหนดให้ 'มีผู้มาจ่ายภาษีชื่อสมชาย', {
name = 'สมชาย'
new Payer(name:name).save()
}
เมื่อ 'มีการค้นหาข้อมูลด้วชื่อ', {
payer = Payer.findByName(name)
}
แล้ว 'payer ควรจะไม่เป็น null', {
payer.shouldNotBe null
}
และ 'ชื่อก็ควรจะเป็นสมชาย', {
payer.name.shouldBe 'สมชาย'
}
}
ตัวอย่างข้างต้นเป็น ‘เรื่อง’ ที่ผมใช้ทดสอบกับเกรลส์และคลาส Payer ก็คือ GORM ที่ทำงานได้จริงกับฐานข้อมูล คิดว่าคงไม่ต้องอธิบายโค้ดกัน เพราะมันอ่านออก (จริงมั้ยครับ)
ผลการรันจะเป็นประมาณนี้ครับ
Executing spec from: C:\grails\land\test\tspec\TestStory.groovy
เรื่อง ภาษี
การมาจ่ายภาษีครั้งแรก
กำหนดให้ มีผู้มาจ่ายภาษีชื่อสมชาย และเมื่อเป็นการมาจ่ายครั้งแรก
แล้วควรจะไม่พบข้อมูล / ผ่าน
จบ สถานการณ์
การมาจ่ายภาษีครั้งที่สอง
กำหนดให้ มีผู้มาจ่ายภาษีชื่อสมชาย และเมื่อมีการค้นหาข้อมูลด้วชื่อ
แล้วpayer ควรจะไม่เป็น null / ผ่าน
และชื่อก็ควรจะเป็นสมชาย / ผ่าน
จบ สถานการณ์
จำนวนสถานการณ์ทั้งหมด: 2ผ่าน
ยังมีเรื่องการสร้างรายงานออกมาให้มันเหมาะกับการใช้งาน กับการปรับแต่งอีกหน่อยครับ จากนั้นผมก็จะเตรียมเป็นปลั๊กอินสำหรับใช้กับเกรลส์
September 18th, 2008 at 9:11 pm
มันแหล่มจริงๆ ครับเนี้ยะ
จริงๆ ถ้าให้เหมาะ ถ้าเราสามารถ bind domain class + property เข้ากับภาษาไทย ก็จะสมบูรณ์แบบเลยนะครับ
เพราะใน testcase ยังเห็นเป็นภาษาอังกฤษอยู่ แต่อย่างว่าครับ ถึงทำได้ มันก็ต้องมี class อื่นๆ + method ของ grails ที่ไม่เป็นภาษาไทย ถ้าไปวิ่งไล่ปะผุก็คงเหนื่อยน่าดู
ต้องหาวิธี encapsulate มันอีก สุดท้ายทำไปทำมา คำถามมันย้อนกลับมา ทำแล้วคุ้มไหม?
September 18th, 2008 at 9:18 pm
@deans4j
จริง ๆ มันพอทำได้ แล้วก็มีวิธีแบบ general ด้วย แต่โค้ดที่ออกมาจะเขียนลำบาก ถึงลำบากมาก
นอกจากการต่อต้านของคนเขียนโค้ดแล้วจะยังมีเรื่อง การใช้ชื่อตัวแปรภาษาไทยด้วย แล้วก็ลักษณะการวางคำจะดูแปลก ๆ ก็จะกลายเป็นอ่านแล้วงงมากขึ้น
เช่น ผู้จ่ายภาษี.ค้นหาด้วยชื่อ ‘สมชาย’ มันอ่านแล้วไม่สวยเท่า
ค้่นหาชื่อ ‘สมชาย’ จากคลาสผู้จ่ายภาษี
September 18th, 2008 at 9:38 pm
จ๊าสสสสสสส ให้มันได้อย่างนี้ เพื่อชาติ
September 19th, 2008 at 12:37 am
ดูแล้วชีวิตและการพูดคุยกับ tester และ business อาจจะง่ายขึ้น แต่คงต้องปรับเรื่องภาษาหน่อย
September 19th, 2008 at 12:54 am
@up1 แนะนำมาเลยพี่ จะได้ปรับปรุงในส่วนของผมด้วย
September 19th, 2008 at 12:58 am
ตอนนี้อยู่ในช่วงเสนอครับพี่ @cblue ได้เรื่องยังไงจะเอามาบอกครับ
September 19th, 2008 at 1:22 am
^^^ดูแล้วชีวิตและการพูดคุยกับ tester และ business อาจจะง่ายขึ้น
จุดดีคือ
1. ไม่ต้องแปล
2. เทียบสิ่งที่ต้องการกับโค้ดได้เลย เพราะฉะนั้นจะเห็นกันจะ ๆ ว่าผิดไปจาก spec หรือไม่
3. มันเป็น framework ไม่ใช่แค่ comment เพราะฉะนั้นจะเป็นการบังคับกลาย ๆ ว่ารูปแบบจะเป็นแบบนี้ จะต้องเขียนในลักษณะนี้เพื่อให้ spec ผ่าน
September 20th, 2008 at 3:32 pm
ผมเอาโค้ดขึ้น github แล้วครับ
http://github.com/chanwit/tspec/tree/master
September 23rd, 2008 at 11:09 am
^^ ขอบคุณครับ เดี๋ยวขอ load มาทดสอบดูครับ เดี๋ยวขอนุญาติแกะ code ดูหน่อยนะครับ
September 23rd, 2008 at 3:04 pm
เมือก่อน ผมเคยเห็นแบบนี้มาครั้งนึง ตอนนี้เคยอยากลองเขียนพวก AI เลยไปเจอ ภาษา lisp เหมือนเคยเห็นหนังสือของอจารย์ท่านหนึ่ง เคยเขียน แต่จำไม่ได้ แล้วก็ ไม่ได้ตามว่า เป็นอย่างไรบ้างแล้ว ครับ
September 23rd, 2008 at 6:06 pm
@up1 แกะเลยครับ patch welcome
@poorprogrammer ผมเห็นความพยายามหลายครั้งที่อยากจะให้เราเขียนโปรแกรมด้วยภาษาไทยกัน
ผมเห็นมีสารพัด compiler และ interpreter ที่ใช้ไวยากรณ์ภาษาไทย
หรือแม้แต่บางคนทำ SQL ภาษาไทย แต่ผมคิดว่ามันไม่ work เพราะมีบางอย่างทำให้เราใช้จำเป็นต้องใช้ภาษาอังกฤษ
ยกตัวอย่างเช่นความเข้ากันได้
ผมเข้าใจว่าความยากอาจจะอยู่ที่การสลับภาษาไปมาส่วนนึง จนมีคนเสนอบางอย่างซะจนไม่น่าจะรับได้ในความเป็นจริง เช่น การใช้สระอะแทนเครื่องหมายเท่ากับ ( ะ = ) เป็นต้น (ในงานประกวดของ NECTEC ประมาณปี 41) หรือการใช้เลขไทยแทนเลขอารบิกทั้งหมด
ผมกำลังมองหาความพอดี หาวิธีใช้ประโยชน์ตัวภาษาไทยให้ได้มากที่สุด พอเห็น BDD ก็เลยเห็นเป็นการเล่าเรื่องประกอบ ผมมองว่า คนไทยจะยอมใช้ภาษาไทยกับคอมพิวเตอร์ “เพื่อการสื่อสาร” มากกว่าเพื่อการเขียนโปรแกรม