เขียนโค้ดสั้น VS เขียนโค้ดยาว ต่างกันยังไง?

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

 

เขียนโค้ดสั้นๆง่ายๆ

ปกติยิ่งโค้ดสั้นการทำงานยิ่งเร็ว เนื่องจากโปรแกรมไฟล์ยิ่งเล็กจะสามารถอ่านและประมวลผลได้เร็ว แต่พอคนอื่นจะมาแก้กลับต้องใช้เวลาในการทำความเข้าใจกับโค้ดนานพอสมควร 

เชื่อหรือไม่ว่า

if($condition==true){
     echo 'ถูกต้อง';
}else{
     echo 'ไม่ถูกต้อง';
}

ได้ผลลัพท์เท่ากับการเขียนโค้ดบรรทัดเดียวแบบนี้

echo ($condition==true ? 'ถูกต้อง' : 'ไม่ถูกต้อง' );

เห็นไหมครับ เขียนสั้นแต่ผลลัพท์เหมือนกัน ซึ่งนอกจากจะช่วยให้โค้ดสั้นลงแล้ว ยังทำให้เราลดโค้ดที่ไม่จำเป็นออกไปได้ด้วย

 

อีกตัวอย่างที่น่าสนใจ

 

เขียนโค้ดสั้นแต่ง่อย

บางทีการเขียนโค้ดที่เราพยายามจะเขียนให้สั้น อาจจะไม่ได้ดีเสมอไป เพราะเราเขียนสั้นแต่เป็นโค้ดที่ไม่ได้มาตรฐาน ปัญหาที่จะตามมาคือเราสามารถ Run โค้ดได้ในเครื่องหนึ่งพอย้ายไปรันอีกเครื่องหรือย้ายขึ้น Hosting หนึ่งกลับไม่สามารถทำงานได้ หรือเรียกง่ายๆว่าโค้ดพัง ต้องมารื้อแก้โค้ดทีหลัง แบบนี้ไม่ดีแน่นอนครับ เช่น

$input['ชื่อตัวแปร']=$_GET["ชื่อตัวแปรที่รับค่า"];

โค้ดด้านบนเขียนง่ายๆสั้นๆมาก เหมือนจะดีแต่ จะเกิดปัญหาโค้ดพังเพราะเจอ error แบบนี้ Notice: Undefined variable เรามักแก้ปัญหานี้ด้วยการเช็คค่าด้วย isset ก่อน คือเขียนแบบนี้ครับ

if(isset($_GET['ชื่อตัวแปรที่รับค่า'])){
     $input['ชื่อตัวแปร']=$_GET['ชื่อตัวแปรที่รับค่า'];
}else{
     $input['ชื่อตัวแปร']="";
}

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

$input['ชื่อตัวแปรที่รับค่า']=(isset($_GET["ชื่อตัวแปรที่รับค่า"])? $_GET["ชื่อตัวแปรที่รับค่า"] : null);

เขียนยาวขึ้นอีกนิด แต่โค้ดไม่พังเพราะมีการ isset เช็คค่าก่อนว่ามีตัวแปรนี้อยู่หรือไม่

 

เขียนโค้ดเดิมๆซ้ำๆโดยไม่จำเป็น

เช่นเขียน dropdown วันที่ 1-31

<option value="1"></option>
<option value="2"></option>
<option value="3"></option>
...
<option value="31"></option>

ถ้าเขียนแบบนี้ โค้ดของเราจะยาวถึง 31 บรรทัด เราสามารถเขียนให้สั้นลงได้โดย

for($i=1;$i<=31;$i++){
echo '<option value="'.$i.'">'.$i.'</option>';
}

เห็นไหมครับว่าโค้ดจาก 31 บรรทัด สามารถลดลงเหลือเพียง 3 บรรทัดเอง และถ้าเราอยากสั่งให้ selected ที่วันที่ปัจจุบันก็เพียงแค่เพิ่ม

for($i=1;$i<=31;$i++){
echo '<option value="'.$i.'"'.(Date('d')==$i?' selected':null).'>'.$i.'<option>';
}

เท่านั้นก็จะได้โค้ดสั้นๆที่ทำงานได้ดีแล้วครับ