Programming Paradigm ทั้งสามของ C++

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

จากการสำรวจของ Adecco ในปี 2014 พบว่า ค่า ตัวของโปรแกรมเมอร์ภาษา C++ ในประเทศไทยที่มีประสบการณ์ตั้งแต่ 5 ปีขึ้นไปนั้นเริ่มต้นที่ 50,000 บาทต่อเดือนครับ (ที่จริง ตัวเลขนี้สูงเกินจริงไปนิด แล้วก็ภาษาอื่นในกลุ่มเดียวกันก็ราคานี้แหละ 555 เอาเป็นว่าผมหลอกคุณละกัน) ฟังดูน่าสนใจใช่ไหมครับ

วันนี้จะมาเล่าให้ฟังว่าพื้นฐานของ C++ นั้นเป็นอะไรครับ คืองี้ครับ C++ เป็นภาษาที่รวมเอา programming paradigm ที่ได้รับความนิยมสูง 3 ตัวมารวมกันในภาษาเดียว (ภาษาสมัยใหม่อย่าง Java, C# เองก็เป็นแบบนี้เหมือนกัน) ทั้งสามนั้นก็ได้แก่

  1. Procedural Programming
  2. Object-Oriented Programming
  3. Metaprogramming

Procedural Programming

Procedural Programming เป็นคอนเซพท์ดั้งเดิมของ C++ ซึ่งได้รับการสืบทอดมาจากภาษา C คอนเซ็พท์นี้จริง ๆ ค่อนข้างตรงไปตรงมา … มันก็คือการเขียนโค๊ดในรูปแบบของฟังก์ชั่นทางคณิตศาสตร์ อย่าง f(x, y) = x^2 + 2xy +y^2 อะไรทำนองนี้นั่นล่ะครับ

ใน C++ ใช้ syntax เดียวกับภาษา C เลย ฟังก์ชั่นข้างบนเลยสามารถเขียนได้แบบนี้

int function(int x, int y) 
{
    return pow(x, 2) + (2*x*y) + pow(y, 2);
}

ง่ายไหม ?

Object-Oriented Programming

คอนเซพท์ของ OOP นั้นค่อนข้างกว้าง โดยหลัก ๆ แล้วมันคือการมองว่าหน่วยย่อยของโปรแกรมเป็นวัตถุ (ในคอนเซพท์อื่นจะมองว่าหน่วยย่อยของโปรแกรมนั้นเป็นแค่ก้อนข้อมูล) และการเขียนโปรแกรมก็คือการปฎิสัมพันธ์กันระหว่างวัตถุ

OOP แบบของ C++ นั้นจะเป็นแบบ Static Type ก็คือวัตถุทุกชนิดจะถูกสร้างโดยจะมี Class เป็นแม่แบบ และประเภทของวัตถุนั้นก็จะถูกนิยามโดย Class เมื่อถูกนิยามไปแล้วก็จะไม่สามารถเปลี่ยนแปลงลักษณะการทำงานภายในได้

เดี๋ยวเรื่อง OOP จะพูดถึงอย่างละเอียดในโอกาสถัดไปครับ รายละเอียดเยอะน่าดู

Metaprogramming

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

Metaprogramming ของ C++ นั้นจะเป็นลักษณะ Template โดย Template นั้นคือโปรแกรม (อาจจะเป็นคลาสหรือฟังก์ชั่นก็ได้) ที่มี Type บางตัวที่ประกาศเอาไว้เป็นแค่ placeholder ขึ้นมา เช่น

template <class T>
T sum(T x, T y) 
{
    return x + y;
}

ตัว Type T เนี่ยตอนที่เขียนเราวางเอาไว้เฉย ๆ ว่าจะแทนที่ด้วย Type อื่นในตอนที่เอาไปใช้ ซึ่งตอนเอาไปใช้จริง ๆ ก็ค่อย ๆ มากำหนดอีกทีว่าเป็น Type ไหนแบบนี้ครับ

int a = sum<int>(5, 10);
float b = sum<float>(0.25f, 0.85f);

ทั้งนี้ถ้า Type ที่เราใส่เข้าไปนั้นไม่มีฟังก์ชั่นหรือโอเปอเรเตอร์ที่ฟังก์ชั่น sum() รองรับ โปรแกรมก็จะคอมไพล์ไม่ผ่าน เท่านั้นเอง 🙂

อ้อ เราสามารถกำหนด Type หลอก ๆ ไว้กี่ตัวก็ได้ครับ ใส่เอาไว้ใน template< > นั่นแหละ กี่ตัวก็ใส่ไป คั่นด้วย comma

ก็จบเรื่องนี้แต่เพียงเท่านี้ โอกาสหน้าจะพูดถึง OOP ในรายละเอียดนะครับ

Edit: อ.Tapanan Yeophantong(@tapananYph) ติงมาว่า Functional Programming ที่พูดถึงน่าจะหมายถึง Procedural Programming มากกว่า ก็เลยแก้ไขให้ถูกต้อง ขอขอบคุณอ.มาณ.ที่นี้ครับผม

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

This site uses Akismet to reduce spam. Learn how your comment data is processed.