[Dev] เทคนิคการ Coding (ตอน – Method return ตัวเอง)

Class Diagram

จากที่ได้จับภาษา Java เพื่อพัฒนา Android App ก็ได้เห็นการใช้งาน Class และ Method ในลักษณะแปลก ๆ ที่ไม่เคยเห็นมาก่อน ถ้าวาดออกมาเป็น Class Diagram ก็จะเป็นเหมือนรูปด้านบน ก็คือ Class Example มี methodA และ methodB มี return type เป็นชนิด Class ตัวเอง Confused

หากใครยังไม่เข้าใจ OOP (Object Oriented Programming) แล้วล่ะก็ ลองอ่านผ่าน ๆ ดูก่อนก็ได้ครับ แต่จะเข้าใจยากนิดนึง หรือจะลองไปทำความเข้าใจ OOP Concept มาก่อน Matrix แล้วเรื่องที่จะอธิบายต่อจากนี้ เป็นอะไรที่ง่ายมาก

จาก Code ตัวอย่างด้านล่างนี้ เป็น Code ที่ใช้งานจริง อยู่ใน App Nexus Update Checker

มาดูอธิบาย Code กันเลยดีกว่า

บรรทัดแรก ประกาศตัวแปรชนิด AlertDialog ชื่อ dlg และกำหนดค่าให้จาก… (พักไว้ตรงนี้ก่อน), มีการสร้าง Instant (Object ที่สร้างจาก Class) จาก Class Builder ที่คำสั่ง new Builder(this) ซึ่ง Instant ที่สร้างขึ้นมานั้น ไม่ได้กำหนดค่าให้ตัวแปรใด แต่มีวงเล็บครอบอยู่ ซึ่งก็หมายถึง Instant นั้น ภาษา Java ถ้าไม่เจอเครื่องหมาย ; นั้นหมายความว่ายังไม่จบคำสั่ง เพราะฉะนั้น บรรทัดต่อ ๆ มา ก็เป็นคำสั่งเดียวกัน

Class Builder นั้น มี Method ชื่อว่า setIcon(), setTitle(), setMessage(), readTextFile(), setPositiveButton(), setNegativeButton() ดังที่เห็นในบรรทัดที่ 2-7 ซึ่งทุก Method นั้นมี return type เป็นชนิด Builder ทั้งหมด แถมยัง return เป็น Instant ตัวเองออกมาด้วย

Java Android Code 1

เพราะ return เป็น Instant ตัวเอง ก็เลยสามารถเขียนคำสั่งเรียกใช้งาน Method อื่น ๆ ต่อ ๆ กันไปได้เลย

ที่บรรทัดสุดท้าย ก็ได้เรียกใช้ Method create() ซึ่งมี return type เป็นชนิด AlertDialog ซึ่งก็จะเป็นค่าที่กำหนดให้ตัวแปร dlg นั่นเอง

หากใครที่ยังไม่เข้าใจ ลองดู Code ด้านล่างนี้

จะเห็นว่า Instant ที่สร้างจาก Class Builder ถูกถ่ายลงตัวแปร builder ที่บรรทัดแรก

บรรทัดที่ 2-7 เรียกใช้ Method ต่าง ๆ โดยไม่สนใจ return type

และที่บรรทัดสุดท้าย ได้ใช้ Method create() สร้าง AlertDialog ขึ้นมา และกำหนดค่าไปให้ตัวแปร dlg ที่มีชนิดเป็น AlertDialog

จากตัวอย่างทั้ง 2 ด้านบนมีกระบวนการทำงาน และผลลัพธ์ เท่ากันทุกประการ

แต่… สิ่งที่แบบแรกมีความโดดเด่นกว่าก็คือ

  1. แบบแรกเขียนคำสั่งสั้นกว่า 1 บรรทัด และพิมพ์คำสั่งสั้นกว่ามาก
  2. ใช้งาน Instant จาก Class Builder โดย “ไม่ต้องประกาศตัวแปร”
  3. สร้าง AlertDialog ได้ด้วยชุดคำสั่งเดียว (จบด้วย ; ครั้งเดียว)

ด้วยความเป็นคนขี้สงสัย Doubt it! ก็เลยอยากนำ Idea นี้ มาลอง Design Class ให้สามารถเรียกใช้งานแบบนี้ได้บ้าง ดัง Code ตัวอย่างต่อไปนี้

จาก Code ด้านบน Class Example มี methodA() และ methodB() มี return type เป็นชนิด Example ซึ่งก็คือ Class ตัวเอง และทั้ง 2 method ได้ return this ออกไป ซึ่งในภาษา Java นั้นหมายถึงตัว Instant ที่สร้างจาก Class Example นั่นเอง

เท่านี้เราก็สามารถใช้งานในลักษณะเดียวกับ Class Builder ได้แล้ว

ทีนี้มาลองดูฝั่งของ Microsoft Visual Studio.NET กันบ้าง ผมลองกับ VB.NET ดัง Code ตัวอย่างด้านล่างนี้

ซึ่งก็สามารถใช้งานได้เช่นเดียวกับของ Java

เพราะฉะนั้น ภาษาโปรแกรมใด ที่เป็น OOP สามารถเขียน Code ในลักษณะนี้ได้ทั้งสิ้น

ลองเอา Idea นี้ไปใช้กันดูนะครับ ดีไม่ดียังไง สงสัยตรงไหน หรือมีข้อเสนอแนะอะไร Comment มาได้นะครับ

ไม่ยากเลยใช่ไม๊!? Big Smile

Leave a Reply

Your email address will not be published. Required fields are marked *