<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Agilinius &#187; Pemrograman Fungsional</title>
	<atom:link href="http://agilini.us/category/pemrograman/pemrograman-fungsional/feed/" rel="self" type="application/rss+xml" />
	<link>http://agilini.us</link>
	<description>Sebuah Seni Rekayasa Perangkat Lunak Agile</description>
	<lastBuildDate>Fri, 20 Jan 2012 06:37:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Caching Function Result</title>
		<link>http://agilini.us/2010/10/17/caching-function-result/</link>
		<comments>http://agilini.us/2010/10/17/caching-function-result/#comments</comments>
		<pubDate>Sun, 17 Oct 2010 03:23:24 +0000</pubDate>
		<dc:creator>Agi Putra Kharisma</dc:creator>
				<category><![CDATA[Pemrograman]]></category>
		<category><![CDATA[Pemrograman Fungsional]]></category>

		<guid isPermaLink="false">http://agilini.us/?p=175</guid>
		<description><![CDATA[Pada tulisan sebelumnya, Referential Transparency, disebutkan bahwa syarat referential transparancy adalah sebuah fungsi harus dapat dipastikan selalu menghasilkan nilai return yang sama jika dipanggil dengan parameter yang sama, kapanpun dan dimanapun itu. Dari ide tersebut, karena fungsi dapat dipastikan akan selalu menghasilkan hasil yang sama bila diberi parameter yang sama, kita dapat dengan mudah membuat [...]]]></description>
			<content:encoded><![CDATA[<p>Pada tulisan sebelumnya, <a href="http://agilini.us/2010/10/16/referential-transparency/">Referential Transparency</a>, disebutkan bahwa syarat referential transparancy adalah sebuah fungsi harus dapat dipastikan selalu menghasilkan nilai return yang sama jika dipanggil dengan parameter yang sama, kapanpun dan dimanapun itu. Dari ide tersebut, karena fungsi dapat dipastikan akan selalu menghasilkan hasil yang sama bila diberi parameter yang sama, kita dapat dengan mudah membuat cache untuk hasil-hasil fungsi tersebut. Mirip dengan cache pada halaman web, dimana HTTP request dengan method GET yang bersifat idempotent, bisa dengan mudah dibuat cache-nya, sehingga client bisa sama sekali tidak menyentuh application server dan basis data. Hal ini memiliki konsekuensi yang menguntungkan, yaitu peningkatan performa.</p>
<p>Kembali ke pemrograman fungsional, menampung hasil fungsi ke dalam cache juga biasa disebut dengan istilah <strong><em>memoize</em></strong>. Berikut ini adalah contoh memoized function dengan bahasa Erlang:</p>
<p><script src="http://gist.github.com/630498.js?file=makan.erl"></script></p>
<p>Kita tahu bahwa sebagian besar orang makan 3 kali dalam satu hari, sehingga dapat dipastikan bila sebagian besar pemanggilan fungsi akan menggunakan parameter 3. Oleh karena itu, fungsi frekuensi_makan_perhari(3) dapat kita buat cache-nya, sehingga beban kerja CPU berkurang karena tidak melakukan perhitungan matematika setiap mengeksekusi fungsi dengan parameter 3. jadi setiap kali ada yang memanggil fungsi dengan parameter 3, maka yang dipanggil adalah frekuensi_makan_perhari(3) bukan frekuansi_makan_perhari(N), karena memang itulah yang secara pattern sesuai (dengan <em>pattern matching</em>).</p>
<p>Ini adalah contoh yang sangat sederhana, mungkin masih belum menggambarkan bagaimana potensi memoized function yang sebenarnya.</p>
]]></content:encoded>
			<wfw:commentRss>http://agilini.us/2010/10/17/caching-function-result/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Referential Transparency</title>
		<link>http://agilini.us/2010/10/16/referential-transparency/</link>
		<comments>http://agilini.us/2010/10/16/referential-transparency/#comments</comments>
		<pubDate>Sat, 16 Oct 2010 04:26:18 +0000</pubDate>
		<dc:creator>Agi Putra Kharisma</dc:creator>
				<category><![CDATA[Pemrograman]]></category>
		<category><![CDATA[Pemrograman Fungsional]]></category>

		<guid isPermaLink="false">http://agilini.us/?p=159</guid>
		<description><![CDATA[Referential transparency merupakan salah satu karakteristik pemrograman fungsional. Secara sederhana, karakteristik ini dapat digambarkan bahwa suatu fungsi akan menghasilkan nilai return yang sama ketika dieksekusi dengan parameter yang sama.
Contoh:
f(x) = y
maka f(x) dapat dipastikan selalu menghasilkan y.
Contoh lain:
jika y = f x
dan g = h y y
maka g = h (f x) (f x)
Kalau di [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_163" class="wp-caption aligncenter" style="width: 434px"><img class="size-full wp-image-163" title="Referential Transparency" src="http://agilini.us/wp-content/uploads/2010/10/Screen-shot-2010-10-16-at-11.18.40-AM.jpg" alt="Referential Transparency" width="424" height="198" /><p class="wp-caption-text">Referential Transparency</p></div>
<p>Referential transparency merupakan salah satu karakteristik pemrograman fungsional. Secara sederhana, karakteristik ini dapat digambarkan bahwa suatu fungsi akan menghasilkan nilai return yang sama ketika dieksekusi dengan parameter yang sama.</p>
<p>Contoh:<br />
<code>f(x) = y</code><br />
maka f(x) dapat dipastikan selalu menghasilkan y.</p>
<p>Contoh lain:<br />
jika y = f x<br />
dan g = h y y<br />
maka g = h (f x) (f x)</p>
<p>Kalau di pemrograman imperative, tidak ada jaminan untuk hal ini. Karena pemrograman imperative memiliki kemampuan untuk mengubah state atau nilai variabel (mutable).</p>
<p>Contoh (Ruby script):</p>
<p><script src="http://gist.github.com/629437.js?file=not_referential_transparency.rb"></script></p>
<p>Baik variabel @b, @c, @d sama-sama merupakan hasil dari method a_ditambah(2). Namun, @d memiliki nilai yang berbeda dari @b dan @c. Hal ini disebabkan karena @d diinisialisasi setelah method tambah_a dieksekusi. Pada pemrograman imperative terdapat sharing state dan mutable state. Method tambah_a mengubah state program, yaitu mengubah nilai variable @a, sedangkan state variable @a di-share dengan method a_ditambah(b), sehingga setiap kali ada perubahan state variable @a, maka perubahan tersebut memengaruhi method a_ditambah(b). Dapat disimpulkan bahwa pada pemrograman imperative, tidak ada jaminan method yang sama dipanggil dengan parameter yang sama akan selalu menghasilkan nilai return yang sama pula, sehingga pada pemrograman imperative tidak terdapat referencial transparency.</p>
]]></content:encoded>
			<wfw:commentRss>http://agilini.us/2010/10/16/referential-transparency/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Functional vs Imperative</title>
		<link>http://agilini.us/2010/10/15/functional-vs-imperative/</link>
		<comments>http://agilini.us/2010/10/15/functional-vs-imperative/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 13:01:53 +0000</pubDate>
		<dc:creator>Agi Putra Kharisma</dc:creator>
				<category><![CDATA[Pemrograman]]></category>
		<category><![CDATA[Pemrograman Fungsional]]></category>

		<guid isPermaLink="false">http://agilini.us/?p=157</guid>
		<description><![CDATA[Ada dua kubu besar dalam bahasa pemrograman, yaitu functional dan imperative. Hingga saat ini, kubu imperative sepertinya masih mendominasi industri perangkat lunak. Beberapa bahasa pemrograman imperative antara lain C, Java, C#, Visual Basic, Pascal.
Di kubu lain, bahasa pemrograman fungsional mulai mendapat tempat di industri perangkat lunak, khususnya untuk memberi solusi terhadap isu scalability, fault-tolerance, concurrency, [...]]]></description>
			<content:encoded><![CDATA[<p>Ada dua kubu besar dalam bahasa pemrograman, yaitu functional dan imperative. Hingga saat ini, kubu imperative sepertinya masih mendominasi industri perangkat lunak. Beberapa bahasa pemrograman imperative antara lain C, Java, C#, Visual Basic, Pascal.<br />
Di kubu lain, bahasa pemrograman fungsional mulai mendapat tempat di industri perangkat lunak, khususnya untuk memberi solusi terhadap isu scalability, fault-tolerance, concurrency, parallel programming. Beberapa bahasa pemrograman fungsional antara lain Erlang, Haskell, Scala (multi-paradigm), F#, Clojure.</p>
<h3>Apa beda fungsional dengan imperative?</h3>
<p>Perbedaannya sederhana, kalau pemrograman fungsional mirip dengan persamaan matematika. Misal:<br />
<code>X + Y = 3<br />
X - Y = 1</code><br />
maka: X = 2; Y = 1<br />
nilai X = 2 dan Y = 1 berlaku untuk kedua persamaan matematika di atas. Nilai ruas kiri harus sama dengan ruas kanan, istilah lainnya adalah <strong>pattern matching</strong>.<br />
Oleh karena itu kita sering menemui bahwa variabel dalam bahasa pemrograman fungsional tidak dapat diubah nilainya (<em>immutable</em>)<br />
Kalau pemrograman imperative, kita sering menemui<br />
X = X + 1<br />
<strong> Secara matematis, persamaan di atas adalah hal yang mustahil.</strong> Namun pemrograman imperative berbeda dengan persamaan matematika. X = X + 1 dibaca &#8220;tambahkan nilai variabel X dengan 1, kemudian simpan ke dalam variabel X&#8221;. Jadi pemrograman imperative lebih kepada &#8216;perintah&#8217; daripada persamaan matematika.</p>
]]></content:encoded>
			<wfw:commentRss>http://agilini.us/2010/10/15/functional-vs-imperative/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>5 Web Framework Untuk Bahasa Pemrograman Erlang</title>
		<link>http://agilini.us/2009/10/13/5-web-framework-untuk-bahasa-pemrograman-erlang/</link>
		<comments>http://agilini.us/2009/10/13/5-web-framework-untuk-bahasa-pemrograman-erlang/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 11:39:08 +0000</pubDate>
		<dc:creator>Agi Putra Kharisma</dc:creator>
				<category><![CDATA[Pemrograman Fungsional]]></category>

		<guid isPermaLink="false">http://agilini.us/?p=104</guid>
		<description><![CDATA[Setelah mencoba beberapa bahasa, akhirnya untuk saat ini saya memilih Erlang (dan Scala) sebagai bahasa pemrograman untuk pemrograman fungsional. Erlang relatif lebih mudah dan sederhana dibanding Scala. Scala lebih kompleks akibat penggabungan dua paradigma pemrograman, yaitu object-oriented dan fungsional, sehingga lebih sulit dipelajari bila belum memiliki latar belakang pengetahuan tentang konsep pemrograman fungsional.
Bagi pengembang aplikasi [...]]]></description>
			<content:encoded><![CDATA[<p>Setelah mencoba beberapa bahasa, akhirnya untuk saat ini saya memilih <a href="http://ftp.sunet.se/pub//lang/erlang/">Erlang</a> (dan <a href="http://scala-lang.org">Scala</a>) sebagai bahasa pemrograman untuk pemrograman fungsional. Erlang relatif lebih mudah dan sederhana dibanding Scala. Scala lebih kompleks akibat penggabungan dua paradigma pemrograman, yaitu object-oriented dan fungsional, sehingga lebih sulit dipelajari bila belum memiliki latar belakang pengetahuan tentang konsep pemrograman fungsional.</p>
<p>Bagi pengembang aplikasi berbasis web yang membutuhkan performa tinggi, skalabilitas, reliabilitas, concurrency tingkat ekstrim, maka Erlang dapat menjadi solusi.</p>
<h2>1. Webmachine</h2>
<p><a href="http://bitbucket.org/justin/webmachine/wiki/Home">Webmachine</a> adalah framework yang sangat unik, dibuat untuk membuat aplikasi web secara RESTful.</p>
<div class="wp-caption alignnone" style="width: 387px"><a href="http://bitbucket.org/justin/webmachine/wiki/Home"><img title="Webmachine" src="http://bytebucket.org/justin/webmachine/wiki/WM200.png" alt="Webmachine" width="377" height="206" /></a><p class="wp-caption-text">Webmachine</p></div>
<h2></h2>
<h2>2. Nitrogen</h2>
<p><a href="http://nitrogenproject.com/">Nitrogen</a> dibangun menggunakan arsitektur event-driven. Nitrogen juga menyediakan custom tags untuk mempermudah membangun aplikasi berbasis Ajax maupun Comet.</p>
<div class="wp-caption alignnone" style="width: 522px"><a href="http://nitrogenproject.com/"><img title="Nitrogen" src="http://nitrogenproject.com/images/giantleap.png" alt="Nitrogen" width="512" height="263" /></a><p class="wp-caption-text">Nitrogen</p></div>
<h2></h2>
<h2>3. Erlang Web</h2>
<p>Konsep <a href="http://www.erlang-web.org/">Erlang Web</a> hampir mirip dengan Java Servlet dan Java Server Page (JSP). Erlang Web menggunakan template dan controller untuk membangun aplikasi.</p>
<div class="wp-caption alignnone" style="width: 372px"><a href="http://www.erlang-web.org/"><img title="Erlang Web" src="http://www.erlang-web.org/images/ew.png" alt="Erlang Web" width="362" height="403" /></a><p class="wp-caption-text">Erlang Web</p></div>
<h2></h2>
<h2>4. Erlyweb</h2>
<p>Seperti kebanyakan web framework, <a href="http://erlyweb.org">Erlyweb</a> menggunakan MVC pattern. Erlyweb juga menyediakan lapisan abstraksi untuk basis data, yaitu Erlydb.</p>
<div class="wp-caption alignnone" style="width: 175px"><a href="http://erlyweb.org"><img class=" " title="Erlyweb" src="http://erlyweb.org/images/logos.gif" alt="Erlyweb" width="165" height="76" /></a><p class="wp-caption-text">Erlyweb</p></div>
<h2></h2>
<h2>5. Beep Beep</h2>
<p><a href="http://github.com/davebryson/beepbeep">Beep Beep</a> sangat terinspirasi oleh Ruby On Rails, salah satu contohnya adalah prinsip RoR yang sangat populer, yaitu convention over configuration.</p>
]]></content:encoded>
			<wfw:commentRss>http://agilini.us/2009/10/13/5-web-framework-untuk-bahasa-pemrograman-erlang/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

