cblue on September 18th, 2008

ผมเชื่อว่ายังมีแรงต้านกันอยู่พอสมควรที่จะใช้ภาษาไทยในการเขียนโปรแกรม เพราะมันเป็นเรื่องจริงครับ ที่ภาษาไทยไม่เหมาะเลยที่จะใช้เป็นภาษาโปรแกรมด้วยหลาย ๆ เหตุผล ตั้งแต่การใช้สัญลักษณ์ ไปจนถึงการใช้คำ

เพราะภาษาไทยเป็นภาษาสื่อสาร เราจึงควรใช้มันให้เหมาะเพื่อการสื่อสารครับ

ตามที่เคยพูดไว้ใน 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ผ่าน

ยังมีเรื่องการสร้างรายงานออกมาให้มันเหมาะกับการใช้งาน กับการปรับแต่งอีกหน่อยครับ จากนั้นผมก็จะเตรียมเป็นปลั๊กอินสำหรับใช้กับเกรลส์

Tags: , , ,

11 Responses to “BDD ภาษาไทย”

  1. มันแหล่มจริงๆ ครับเนี้ยะ

    จริงๆ ถ้าให้เหมาะ ถ้าเราสามารถ bind domain class + property เข้ากับภาษาไทย ก็จะสมบูรณ์แบบเลยนะครับ

    เพราะใน testcase ยังเห็นเป็นภาษาอังกฤษอยู่ แต่อย่างว่าครับ ถึงทำได้ มันก็ต้องมี class อื่นๆ + method ของ grails ที่ไม่เป็นภาษาไทย ถ้าไปวิ่งไล่ปะผุก็คงเหนื่อยน่าดู

    ต้องหาวิธี encapsulate มันอีก สุดท้ายทำไปทำมา คำถามมันย้อนกลับมา ทำแล้วคุ้มไหม? :D

  2. @deans4j
    จริง ๆ มันพอทำได้ แล้วก็มีวิธีแบบ general ด้วย แต่โค้ดที่ออกมาจะเขียนลำบาก ถึงลำบากมาก

    นอกจากการต่อต้านของคนเขียนโค้ดแล้วจะยังมีเรื่อง การใช้ชื่อตัวแปรภาษาไทยด้วย แล้วก็ลักษณะการวางคำจะดูแปลก ๆ ก็จะกลายเป็นอ่านแล้วงงมากขึ้น

    เช่น ผู้จ่ายภาษี.ค้นหาด้วยชื่อ ‘สมชาย’ มันอ่านแล้วไม่สวยเท่า
    ค้่นหาชื่อ ‘สมชาย’ จากคลาสผู้จ่ายภาษี

  3. จ๊าสสสสสสส ให้มันได้อย่างนี้ เพื่อชาติ

  4. ดูแล้วชีวิตและการพูดคุยกับ tester และ business อาจจะง่ายขึ้น แต่คงต้องปรับเรื่องภาษาหน่อย

  5. @up1 แนะนำมาเลยพี่ จะได้ปรับปรุงในส่วนของผมด้วย

  6. ตอนนี้อยู่ในช่วงเสนอครับพี่ @cblue ได้เรื่องยังไงจะเอามาบอกครับ

  7. ^^^ดูแล้วชีวิตและการพูดคุยกับ tester และ business อาจจะง่ายขึ้น

    จุดดีคือ
    1. ไม่ต้องแปล
    2. เทียบสิ่งที่ต้องการกับโค้ดได้เลย เพราะฉะนั้นจะเห็นกันจะ ๆ ว่าผิดไปจาก spec หรือไม่
    3. มันเป็น framework ไม่ใช่แค่ comment เพราะฉะนั้นจะเป็นการบังคับกลาย ๆ ว่ารูปแบบจะเป็นแบบนี้ จะต้องเขียนในลักษณะนี้เพื่อให้ spec ผ่าน

  8. ผมเอาโค้ดขึ้น github แล้วครับ
    http://github.com/chanwit/tspec/tree/master

  9. ^^ ขอบคุณครับ เดี๋ยวขอ load มาทดสอบดูครับ เดี๋ยวขอนุญาติแกะ code ดูหน่อยนะครับ

  10. เมือก่อน ผมเคยเห็นแบบนี้มาครั้งนึง ตอนนี้เคยอยากลองเขียนพวก AI เลยไปเจอ ภาษา lisp เหมือนเคยเห็นหนังสือของอจารย์ท่านหนึ่ง เคยเขียน แต่จำไม่ได้ แล้วก็ ไม่ได้ตามว่า เป็นอย่างไรบ้างแล้ว ครับ

  11. @up1 แกะเลยครับ patch welcome :-)

    @poorprogrammer ผมเห็นความพยายามหลายครั้งที่อยากจะให้เราเขียนโปรแกรมด้วยภาษาไทยกัน
    ผมเห็นมีสารพัด compiler และ interpreter ที่ใช้ไวยากรณ์ภาษาไทย
    หรือแม้แต่บางคนทำ SQL ภาษาไทย แต่ผมคิดว่ามันไม่ work เพราะมีบางอย่างทำให้เราใช้จำเป็นต้องใช้ภาษาอังกฤษ

    ยกตัวอย่างเช่นความเข้ากันได้

    ผมเข้าใจว่าความยากอาจจะอยู่ที่การสลับภาษาไปมาส่วนนึง จนมีคนเสนอบางอย่างซะจนไม่น่าจะรับได้ในความเป็นจริง เช่น การใช้สระอะแทนเครื่องหมายเท่ากับ ( ะ = ) เป็นต้น (ในงานประกวดของ NECTEC ประมาณปี 41) หรือการใช้เลขไทยแทนเลขอารบิกทั้งหมด

    ผมกำลังมองหาความพอดี หาวิธีใช้ประโยชน์ตัวภาษาไทยให้ได้มากที่สุด พอเห็น BDD ก็เลยเห็นเป็นการเล่าเรื่องประกอบ ผมมองว่า คนไทยจะยอมใช้ภาษาไทยกับคอมพิวเตอร์ “เพื่อการสื่อสาร” มากกว่าเพื่อการเขียนโปรแกรม

Leave a Reply