Monday, August 21, 2006

Closures for Java

มี proposol แบบนี้ออกมา ค่อยรู้สึกมีความหวังกับภาษานี้หน่อย
(หลังจากปล่อยให้ C# นำหน้าไปนาน)

ดูตัวอย่างแรกสุดก่อน
public static void main(String[] args) { 
int plus2(int x) { return x+2; }
int(int) plus2b = plus2;
System.out.println(plus2b(2));
}

ในที่สุด Kingdom of Nouns อย่าง java ก็มี verb citizen โผล่เข้ามาแล้ว
ในบรรทัดแรก plus2 ก็คือ Type ชนิด function
ส่วนบรรทัดที่ 2 ก็คือการกำหนดให้ plus2b เป็นตัวแปรที่ reference ไปยัง function plus2

บรรทัดที่ 1 และ 2 จากตัวอย่างข้างบน สามารถยุบเขียนในรูป anonymous function ได้แบบนี้
int(int) plus2b = (int x) {return x+2; };


แถมด้วย syntactic sugar
แทนที่จะต้องเขียนแบบนี้
void sayHello(java.util.concurrent.Executor ex) { 
ex.execute((){ System.out.println("hello"); });
}

ก็สามารถเขียนแบบนี้ได้
void sayHello(java.util.concurrent.Executor ex) { 
ex.execute { System.out.println("hello"); }
}

Related link from Roti

No comments: