ขี้เกียจเขียน For loop

ไม่นานมานี้เพิ่งรู้สึกตัวว่า “เฮ้ย เราไม่ได้เขียนโปรแกรมโดยใช้ For loop มาเป็นปีแล้วมั้ง”

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

  • Enumerable ของ Ruby
  • Sequences ของ Clojure
  • Iteration methods ของ Javascript (ที่ก่อนหน้านี้ไม่รู้ว่ามีพวกนี้ build-in ใน Javascript แล้วก็ใช้ underscore.js มาโดยตลอด)
  • List Comprehensions ของ CoffeeScript (มี reduce ให้ใช้ด้วยนะเออ ตอนแรกหาใน หน้า document หลักแล้วไม่เห็น)

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

  • โค้ดสั้นลง
  • โค้ดอ่านได้เข้าใจง่ายขึ้น
  • ลดความผิดพลาดในการเขียนโปรแกรม เช่น การนับจุดสิ้นสุดของ i++
  • ทำงานกับ immutable data structure ได้ง่าย

เราอาจจะเคยพบปัญหาที่บางครั้งการพยายามเขียนโค้ดให้สั้นจนเกิดไป ทำให้โปรแกรมของเราอ่านยากขึ้น แต่ในกรณีนี้กลับตรงกันข้ามครับ การใช้ไลบราลีจัดการ collection นี้ทำให้เราเขียน code สั้นลงแต่อ่านง่ายขึ้นด้วย เพราะเราเพียงแค่บอกว่าเรา อยากได้อะไร บนเงื่อนไขอะไร (declarative programming) แทนที่จะต้องบอกขั้นตอนการทำงาน (imperative programming) เหมือนกับการเขียนโปรแกรมด้วย For loop ดังตัวอย่างการเลือกแต่เลขคู่ ในภาษา​ Javascript แบบนี้ครับ

var x = [1,2,3,4];
var y = [];
for (i=0; i < x.length; i++) { if (x[i] % 2 === 0) y.push(x[i]); }
console.log(y); //=> [2, 4]
var y = [1,2,3,4].filter(function(e) { return e % 2 === 0; });
console.log(y); //=> [2, 4]

จะเห็นว่าแบบที่ 2 สั้นและอ่านเข้าใจได้ง่ายกว่ามากครับ หากใครยังไม่เคยใช้ไลบราลีเหล่านี้ในการเขียนโปรแกรม ลองไปใช้ดูนะครับ อาจจะติดใจไม่อยากกลับมาเขียน For loop อีกต่อไปเหมือนอย่างผมก็ได้

Advertisements

3 thoughts on “ขี้เกียจเขียน For loop

  1. Pingback: ขี้เกียจเขียน For loop ภาค 2 « Tap

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s