# การใช้งาน set และ get function รวมถึงความคิด OOP ในภาษา Dart: เส้นทางสู่การเข้าใจที่จับต้องได้
การโปรแกรมมิ่งไม่ใช่แค่การเขียนโค้ดให้คอมพิวเตอร์ทำงานตามที่เราต้องการเท่านั้น แต่ยังต้องเข้าใจว่าทำไมเราถึงเขียนแบบนั้น เพื่ออะไร และมีวิธีใดบ้างที่จะทำให้โค้ดของเราทั้งเข้าใจง่าย และมีระบบระเบียบที่ดี หนึ่งในหลักการที่สำคัญไม่แพ้กันคือ OOP หรือ Object-Oriented Programming ครับ
Dart ซึ่งเป็นภาษาโปรแกรมที่พัฒนาโดย Google สำหรับการสร้างแอปพลิเคชั่น on one code base ก็ตบเท้าเข้าร่วมในการใช้ OOP เพื่อช่วยให้การพัฒนานั้นสะอาด และสะดวกขึ้น เรื่องของ setter และ getter ซึ่งเป็น function พิเศษในการจัดการกับข้อมูลของ object ก็เป็นส่วนสำคัญในการจัดการข้อมูลให้ปลอดภัยและถูกต้องครับ
ใน Dart, setter และ getter เป็นส่วนประกอบของ class ที่ทำงานกับ properties (หรือ attributes) ของ object นั้นๆ ง่ายๆ แล้ว getter คือ function ที่ใช้สำหรับดึงค่าออกมาจาก property และ setter คือ function ที่ใช้สำหรับกำหนดค่าให้กับ property นั้นๆ
ตัวอย่างโค้ดที่ 1: การสร้าง getter และ setter
class Person {
String _name; // Private property with underscore
// Constructor
Person(this._name);
// Getter
String get name => _name;
// Setter
set name(String value) => _name = value;
}
void main() {
var person = Person('Somchai');
print(person.name); // Somchai, using getter
person.name = 'Somsri'; // Using setter
print(person.name); // Somsri
}
ตัวอย่างข้างต้นเราสร้าง class `Person` พร้อมกับ private property `_name` และทำการสร้าง getter และ setter สำหรับ `_name` เวลาเราสร้าง object จาก class `Person`, เราสามารถใช้ getter และ setter ในการอ่านและแก้ไขค่า `_name` ได้
ตัวอย่างโค้ดที่ 2: การใช้งาน getter และ setter ใน OOP
สมมติเราต้องการจัดการกับข้อมูลสำหรับสินค้าในระบบ e-commerce โดยมีข้อมูลที่สำคัญอย่างราคาสินค้าที่ต้องการความละเอียดทางธุรกิจ ในการกำหนดและดึงค่าใช้งาน
class Product {
String _name; // Private property
double _price;
// Constructor
Product(this._name, this._price);
// Getter for name
String get name => _name;
// Getter for price
double get price => _price;
// Setter for price
set price(double value) {
if(value < 0) {
print('ราคาไม่สามารถติดลบได้');
} else {
_price = value;
}
}
}
void main() {
var product = Product('กาแฟเขาทะลุ', 250);
print('Product: ${product.name}, Price: ${product.price}');
product.price = -50; // จะแสดงข้อความ 'ราคาไม่สามารถติดลบได้'
print('Product: ${product.name}, Price: ${product.price}'); // ราคาจะยังคงเป็น 250
}
ในภาษา Dart, getter และ setter ทำงานเป็นเกราะป้องกันข้อมูลไม่ให้มีการกำหนดหรือแสดงผลที่ไม่ถูกต้องตามเงื่อนไขที่ธุรกิจมี ตัวอย่างเช่น การกำหนดราคาสินค้าไม่ให้ติดลบ
ตัวอย่างโค้ดที่ 3: Usecase ในการจัดการกับข้อมูลพนักงานบน OOP
อีกสถานการณ์ที่เราอาจพบบ่อยในการพัฒนาซอฟแวร์คือการจัดการกับข้อมูลพนักงานในองค์กร สิ่งนี้สามารถทำได้โดยสร้าง class ที่มี setters และ getters ที่เหมาะสม
class Employee {
String _id;
String _name;
double _salary;
// Constructor
Employee(this._id, this._name, this._salary);
// Setters and getters
String get id => _id;
set id(String value) => _id = value;
String get name => _name;
set name(String value) => _name = value;
double get salary => _salary;
set salary(double value) {
if(value < 0) {
print('เงินเดือนไม่สามารถติดลบได้');
} else {
_salary = value;
}
}
}
void main() {
Employee emp = Employee('EMP001', 'ชัย', 30000);
print('พนักงาน: ${emp.id}, ชื่อ: ${emp.name}, เงินเดือน: ${emp.salary}');
// กำหนดเงินเดือนใหม่
emp.salary = -50000; // จะแสดงข้อความ 'เงินเดือนไม่สามารถติดลบได้' และไม่เปลี่ยนแปลงค่า
print('พนักงาน: ${emp.id}, ชื่อ: ${emp.name}, เงินเดือน: ${emp.salary}'); // เงินเดือนยังคงเป็น 30000
}
ตัวอย่างข้างต้นแสดงให้เห็นว่าการใช้ setter และ getter ช่วยในการตรวจสอบและรักษาสภาพสมบูรณ์ของข้อมูลได้อย่างไร นอกจากนี้ยังจำกัดวิธีการเข้าถึงข้อมูลทำให้โค้ดของเราปลอดภัยและถูกต้องมากกว่า
ตั้งแต่ตัวอย่างเล็กๆ ไปจนถึงโปรเจ็กต์ขนาดใหญ่ รูปแบบของ OOP และการใช้งาน getter และ setter ในภาษา Dart นั้นสามารถช่วยให้การพัฒนาโปรแกรมมีความเป็นระเบียบและสามารถควบคุมได้มากขึ้นครับ สำหรับผู้ที่สนใจจะเรียนรู้และขุดลึกเข้าไปในกลไกที่ซับซ้อนของการเขียนคำสั่ง คอร์สที่ EPT (Expert-Programming-Tutor) พร้อมจะทำให้คุณเข้าใจถึงหลักการเหล่านี้อย่างเจาะลึก ที่สำคัญเราจะทำงานร่วมกันเพื่อประยุกต์ใช้ความรู้เหล่านี้ในโปรเจ็คจริงๆ ที่ท้าทาย คอยติดตามกิจกรรมและการอบรมของเราได้ตลอดเวลา ที่ EPT เราเปิดโอกาสให้คุณได้เป็นนักพัฒนาดิจิทัลที่เข้มแข็งครับ!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM