Mo nambahin doank. FP bukan cuma sekedar closure ato mathematical domain.
Keunggulan utama FP di enterprise app adalah code yang kita tulis itu gak
selalu dicompile jadi executable instruction. Gak kayak OO, di FP itu code
yang kita tulis gak selalu berarti bakal dirun saat runtime. Function di FP
bisa dicompile semata2 sebagai AST structure (e.g. lambda expression), yang
bisa di-reflect saat runtime.

Misalnya, saat kita tulis:
getSlaJeopardyTime = new Function(Order order, Schedule schedule) {
    return order.getSlaDate() -
(schedule.getArrival().getDeviation(order.getCurrentShippingItenary()));
}

getSlaJeopardyTime adalah function instance yang bisa dipass kemana2.
Sekilas ini mirip closure di ruby, ato function di javascript, ato delegate
di c#. But it is not!.
Function ini bukan dipass sebagai executable instruction. Method
getSlaDate() ato getDeviation() ato getArrival() etc mungkin bahkan gak
bakal pernah diexecute sama sekali!
Function ini dicompile sebagai AST representation dari lambda expression
doank, yang bisa diparse saat runtime.
Jadi kita bisa bikin method yang terima function ini sebagai parameter, lalu
ngebaca ASTnya, dan translate jadi SQL statement, ato RPC call, ato render
ke javascript, ato XML query, ato send messaging, whatever. (Of course, kita
bisa juga execute sebagai function instruction biasa).

Misalnya, HQL di nHibernate dah digantiin dengan lambda expression (e.g.
Linq). Function kayak tadi di atas bisa kita pass gitu ajah ke nhibernate,
bukan buat diexecute melainkan buat ditranslate jadi SQL select statement.

Contoh laen, helper method buat HTML tags:
<%= Html.Hyperlink(prodController => prodController.ShowDetails(14))
          .WithText("View product details") %>

{prodController.ShowDetails(14)} di atas adalah sebuah function. Tapi line
ini sama sekali gak bakal diexcute. Function expression ini bakal
ditranslate jadi URL: /Product/ShowDetails/?productId=14 sesuai web
configuration. Helper ginian kita tulis dengan menggunakan FP, sebagai
utility buat provide strong-type di code kita.
Equivalentnya di classic OO, susah lari dari magic string kayak:
<%= Html.Hyperlink("ProductController", "ShowDetails", 14)
           .WithText("View product details") %>
Sama juga dengan HQL yang berakhir dengan loose-type magic-string. Bandingin
strong-type hibernate criteria API dengan lambda expression alternative.
Disinilah area dimana FP shines n sexy.

AST dan juga metadata programming itu crucial banget buat DSL. Ini
sebenernya alesan napa FP kayak haskel n ruby bangkit kembali dari liang
kubur akhir2 ini, dengan mulai populernya notion of DSL.
Language kayak Boo, Nemerle, F#, scala, ruby, diintroduce specifically buat
address ini di strong-type OO platform... Mereka allow code buat "ngebaca"
code itu sendiri kita sebagai AST (bukan sebagai instruction), yang allow
*kita* buat define sendiri runtime behavior dari code yang ditulis...
Instead of compiler/intepreter yang define runtime behaviornya.
FP allows kita buat customize sendiri programming semantic kita yang
"domain-oriented", dengan much easier tanpa perlu ngerti bytecode processing
ato runtime instrumentation.

Kemampuan passing2 function (i.e. closure), IMO cuma sebagian kecil of the
picture.. bukan bagian FP yang paling hot di enterprise app.


2009/6/29 Dhanisworo Dhanisworo <ddha...@gmail.com>

>
>
> Hi,
> Mau coba ikutan diskusi.Mungkin filosofi dari Functional Programing  bisa
> lebih jelas di link ini
> http://rockfish.cs.unc.edu/COMP144/lect18a.ppt
>
> Inti yang saya tangkap ttg Functional Programming adalah seperti disebutkan
> oleh
> John Backus dalam pidatonya ketika menerima Turing Award tahun 1977, yaitu
> :
> a. "Can Programming Be Liberated from the von Neumann Style ?"
> b. Program should be abstract description of algorithms rather than
> sequences of changes in state of the memory
> c. Programs written in modern FP languanges are a set of mathematical
> relationship between objects. No explicit memory management take place
>  •
>
> Jadi kira2 filisofi dari FP adalah :
> 1. Alternative dari gaya von Neumann yg bersifat procedural dan pemrograman
> terstruktur dan bercirikan manipulasi status object di memory melalui urutan
> perintah2.
> 2. Peningkatan level abstract dari pembuatan sebuah program dengan
> memanipulasi hubungan antar object
>
> Secara kasar dapat dikatakan bahwa OOP adalah pendekatan pemrograman
> berdasarkan eksistensi object, yg berkorelasi dgn status object tsb di
> memory.
>
> FP tidak terlalu memperhatikan aspek eksistensi sebuah object di memory,
> namun lebih pada apa yg bisa dilakukan terhadap sebuah object untuk
> menghasikan sesuatu value atau object yg lain. Segala proses alokasi memory,
> variable assignment dilakukan pada level bawah dari framework FP tsb.
>
> Secara teori semua case bisa dilakukan baik secara structural programming
> maupun functional pogramming. Hal ini hanya masalah pendekatan pembuatan
> program saja, di samping juga ketersediaan tools nya.
>
> best regards,Dyan Dhanisworo
>
> 2009/6/17 sjtirtha <sjtir...@gmail.com>
>
>>
>>
>> Hi,
>>
>> ada yg bisa kasi significant perbedaan antara OOP dan Functional
>> Programming?
>> Dan use cases apa aja yg cocok untuk pakai Functional Programming?
>>
>> Salah satu yg gua ngerti dari functional programming,
>> function = object, jadi bisa di passing sebagai methode parameter.
>> Tapi di OO ini jg bisa, dengan passing object dari class yg implementasi
>> function tsb.
>>
>> Steve
>>    Messages in this topic
>> <http://groups.yahoo.com/group/jug-indonesia/message/63313;_ylc=X3oDMTM2b2N2NTVyBF9TAzk3MzU5NzE0BGdycElkAzk4Nzc3NDAEZ3Jwc3BJZAMxNzA1MDA2OTA1BG1zZ0lkAzYzMzEzBHNlYwNmdHIEc2xrA3Z0cGMEc3RpbWUDMTI0NTI0NzY0MwR0cGNJZAM2MzMxMw-->(
>> 1)  Reply (via web post)
>> <http://groups.yahoo.com/group/jug-indonesia/post;_ylc=X3oDMTJxajlobWw1BF9TAzk3MzU5NzE0BGdycElkAzk4Nzc3NDAEZ3Jwc3BJZAMxNzA1MDA2OTA1BG1zZ0lkAzYzMzEzBHNlYwNmdHIEc2xrA3JwbHkEc3RpbWUDMTI0NTI0NzY0Mw--?act=reply&messageNum=63313>|
>>  Start
>> a new topic
>> <http://groups.yahoo.com/group/jug-indonesia/post;_ylc=X3oDMTJlY20wYzZtBF9TAzk3MzU5NzE0BGdycElkAzk4Nzc3NDAEZ3Jwc3BJZAMxNzA1MDA2OTA1BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTI0NTI0NzY0Mw-->
>>  
>> Messages<http://groups.yahoo.com/group/jug-indonesia/messages;_ylc=X3oDMTJlNmQ5ZGEzBF9TAzk3MzU5NzE0BGdycElkAzk4Nzc3NDAEZ3Jwc3BJZAMxNzA1MDA2OTA1BHNlYwNmdHIEc2xrA21zZ3MEc3RpbWUDMTI0NTI0NzY0Mg-->|
>> Files<http://groups.yahoo.com/group/jug-indonesia/files;_ylc=X3oDMTJmMGJiODY2BF9TAzk3MzU5NzE0BGdycElkAzk4Nzc3NDAEZ3Jwc3BJZAMxNzA1MDA2OTA1BHNlYwNmdHIEc2xrA2ZpbGVzBHN0aW1lAzEyNDUyNDc2NDI->|
>> Photos<http://groups.yahoo.com/group/jug-indonesia/photos;_ylc=X3oDMTJldWpiZ3QzBF9TAzk3MzU5NzE0BGdycElkAzk4Nzc3NDAEZ3Jwc3BJZAMxNzA1MDA2OTA1BHNlYwNmdHIEc2xrA3Bob3QEc3RpbWUDMTI0NTI0NzY0Mg-->|
>> Links<http://groups.yahoo.com/group/jug-indonesia/links;_ylc=X3oDMTJmZnZmODZlBF9TAzk3MzU5NzE0BGdycElkAzk4Nzc3NDAEZ3Jwc3BJZAMxNzA1MDA2OTA1BHNlYwNmdHIEc2xrA2xpbmtzBHN0aW1lAzEyNDUyNDc2NDI->|
>> Polls<http://groups.yahoo.com/group/jug-indonesia/polls;_ylc=X3oDMTJmcm1nc2txBF9TAzk3MzU5NzE0BGdycElkAzk4Nzc3NDAEZ3Jwc3BJZAMxNzA1MDA2OTA1BHNlYwNmdHIEc2xrA3BvbGxzBHN0aW1lAzEyNDUyNDc2NDI->|
>> Calendar<http://groups.yahoo.com/group/jug-indonesia/calendar;_ylc=X3oDMTJkNHQ5aG1zBF9TAzk3MzU5NzE0BGdycElkAzk4Nzc3NDAEZ3Jwc3BJZAMxNzA1MDA2OTA1BHNlYwNmdHIEc2xrA2NhbARzdGltZQMxMjQ1MjQ3NjQy>
>>  Kalau mau keluar dari mailing list ini, caranya kirim sebuah email ke
>> jug-indonesia-unsubscr...@yahoogroups.com.
>>
>> Jangan lupa, website JUG Indonesia adalah http://www.jug.or.id
>>
>>   [image: Yahoo! 
>> Groups]<http://groups.yahoo.com/;_ylc=X3oDMTJkdW0xcmY3BF9TAzk3NDc2NTkwBGdycElkAzk4Nzc3NDAEZ3Jwc3BJZAMxNzA1MDA2OTA1BHNlYwNmdHIEc2xrA2dmcARzdGltZQMxMjQ1MjQ3NjQz>
>> Change settings via the 
>> Web<http://groups.yahoo.com/group/jug-indonesia/join;_ylc=X3oDMTJmYmQwM3JkBF9TAzk3NDc2NTkwBGdycElkAzk4Nzc3NDAEZ3Jwc3BJZAMxNzA1MDA2OTA1BHNlYwNmdHIEc2xrA3N0bmdzBHN0aW1lAzEyNDUyNDc2NDM->(Yahoo!
>>  ID required)
>> Change settings via email: Switch delivery to Daily 
>> Digest<jug-indonesia-dig...@yahoogroups.com?subject=email+delivery:+Digest>| 
>> Switch
>> format to 
>> Traditional<jug-indonesia-traditio...@yahoogroups.com?subject=change+delivery+format:+Traditional>
>>  Visit Your Group
>> <http://groups.yahoo.com/group/jug-indonesia;_ylc=X3oDMTJkanFrN25xBF9TAzk3NDc2NTkwBGdycElkAzk4Nzc3NDAEZ3Jwc3BJZAMxNzA1MDA2OTA1BHNlYwNmdHIEc2xrA2hwZgRzdGltZQMxMjQ1MjQ3NjQz>|
>>  Yahoo!
>> Groups Terms of Use <http://docs.yahoo.com/info/terms/> | Unsubscribe
>> <jug-indonesia-unsubscr...@yahoogroups.com?subject=>
>>
>  
>

Kirim email ke