จดๆ Note ไว้ เกี่ยวกับ Functional Programming โดยใช้ JavaScript เป็นต้วอย่าง function เป็น Input หรือเป็น Parameter ได้ จาก Code ด้านล่างจะเป็นตัวอย่างที่แสดง
- Pure function - no side effects / รันทุกรอบได้ผลลัพธ์เหมือนกัน
- Higher-order function รับ function เข้าไปเป็น Parameter ถ้าใน Code เอา map + double ทำเป็น function composition เอา function หลายๆอันมาทำงานร่วมกัน
- รวมถึงการทำ Chaining functional
// Pure function: does not modify external state, returns the same output for same input const add = (a, b) => a + b; // Higher-order function: takes a function as an argument const map = (fn, arr) => arr.map(fn); // Example usage: doubling each number in an array const double = x => x * 2; const numbers = [1, 2, 3, 4]; const doubledNumbers = map(double, numbers); // [2, 4, 6, 8] // Chaining functional methods const result = numbers .filter(n => n % 2 === 0)
ยกตัวอย่างอีกเคสนึง อย่างตัว EmailValidator
// Pure function: checks if the string contains '@'
const hasAtSymbol = email => email.includes('@');
// Pure function: checks for a valid domain (after "@", must have a ".")
const hasValidDomain = email => {
const parts = email.split('@');
return parts.length === 2 && parts[1].includes('.');
};
// Pure function: checks if the email does not have spaces
const hasNoSpaces = email => !/\s/.test(email);
// Pure function: checks if the email matches a simple regex pattern
const matchesPattern = email =>
/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
// Higher-order function: combines multiple validators
const validateEmail = email => [
hasAtSymbol,
hasValidDomain,
hasNoSpaces,
matchesPattern
].every(validator => validator(email));
// Example usage
const emails = [
"[email protected]",
"invalid [email protected]",
"noatsymbol.com",
"missingdomain@com"
];
const results = emails.map(email => ({
email,
isValid: validateEmail(email)
}));
console.log(results);
/*
[
{ email: '[email protected]', isValid: true },
{ email: 'invalid [email protected]', isValid: false },
{ email: 'noatsymbol.com', isValid: false },
{ email: 'missingdomain@com', isValid: false }
]
*/เมื่อมี function หลายๆอัน เรายุบรวมมันว่าเป็น Service เช่น EmailValidator เกิดจากการเอา Function หลายๆตัวอย่าง hasAtSymbol / hasValidDomain / hasNoSpaces / matchesPattern มาทำงานร่วมกัน
สรุป Key Functional Programming Principles
- Each function is pure - no side effects / รันทุกรอบได้ผลลัพธ์เหมือนกัน
- Smaller functions รวมกัน composed เพื่อมารอบรับ Business ที่ซับซ้อนขึ้น
- Pure function รวมแต่ละหน้าที่คล้ายกลาย Service อะไรที่เหมือนกัน
- Service หลายตัวทำงานร่วมกัน มันก็ คือ ตัว Use Case
- Use Case หลายตัวรวมกันได้เป็น Application - All data is immutable - no mutation of input arrays/objects
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.



