Hari ini, tulisan-tulisan saya tentang Scala akan saya jadikan satu di blog saya yang khusus membahas tentang Functional Programming serta berbagai development tools lainnya (Erlang, Haskell, dll). Silahkan mengunjungi alamatnya di Blog untuk Paradigma dan Teknologi Pemrograman Fungsional
Sampai ketemu :)
Minggu, 28 Maret 2010
Sabtu, 27 Februari 2010
Masalah di scala-android 2.7.0final di Scala 2.7.7final
Saya meng-install scala-android dengan menggunakan repository "scala-dev" berikut (default saat install scala/sbaz):
Paket yang terdapat di universe tersebut adalah sebagai berikut:
Hasil install ini menyebabkan error sebagai berikut:
Berikut adalah paket-paket yang terinstall:
Setelah saya remove scala-android, Scala bisa bekerja dengan baik:
Bisa jadi ini disebabkan karena paket yang obsolete (2.7.0final untuk scala 2.7.7final). Untuk saat ini, saya menyarankan untuk mengambil pustaka di project scala-android di google code: http://code.google.com/p/scala-android/downloads/list (sayangnya, masih versi 2.7.5 - saya belum menguji untuk penggunaan Scala 2.7.7final).
[bpdp@bpdp-arch scala-2.7.7.final]$ sbaz showuniverse SimpleUniverse "scala-dev" (http://scala-webapps.epfl.ch/sbaz/scala-dev) [bpdp@bpdp-arch scala-2.7.7.final]$
Paket yang terdapat di universe tersebut adalah sebagai berikut:
[bpdp@bpdp-arch scala-2.7.7.final]$ sbaz available | grep android scala-android (2.7.0-final, 2.6.1-final) [bpdp@bpdp-arch scala-2.7.7.final]$
Hasil install ini menyebabkan error sebagai berikut:
[bpdp@bpdp-arch ~]$ scala Exception in thread "main" java.lang.VerifyError: (class: scala/tools/nsc/MainGenericRunner$, method: main signature: ([Ljava/lang/String;)V) Can only throw Throwable objects at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala) [bpdp@bpdp-arch ~]$ scalac Exception in thread "main" java.lang.VerifyError: (class: scala/tools/nsc/Main$, method: main signature: ([Ljava/lang/String;)V) Can only throw Throwable objects at scala.tools.nsc.Main.main(Main.scala)
Berikut adalah paket-paket yang terinstall:
[bpdp@bpdp-arch ~]$ sbaz installed base/1.9 sbaz/1.25tmp sbaz-setup/1.0 scala/2.7.7.final scala-android/2.7.0-final scala-devel/2.7.7.final scala-documentation/2.7.7.final scala-library/2.7.7.final scala-test/2.7.7.final scala-tool-support/2.7.7.final 10 packages installed [bpdp@bpdp-arch ~]$
Setelah saya remove scala-android, Scala bisa bekerja dengan baik:
[bpdp@bpdp-arch ~]$ sbaz remove scala-android removing scala-android/2.7.0-final [bpdp@bpdp-arch ~]$ [bpdp@bpdp-arch ~]$ scala Welcome to Scala version 2.7.7.final (OpenJDK Client VM, Java 1.6.0_17). Type in expressions to have them evaluated. Type :help for more information. scala>
Bisa jadi ini disebabkan karena paket yang obsolete (2.7.0final untuk scala 2.7.7final). Untuk saat ini, saya menyarankan untuk mengambil pustaka di project scala-android di google code: http://code.google.com/p/scala-android/downloads/list (sayangnya, masih versi 2.7.5 - saya belum menguji untuk penggunaan Scala 2.7.7final).
Label:
Android
Jumat, 26 Februari 2010
Variabel dan Type Inference di Scala
Scala mempunyai 2 tipe variable, yaitu vals dan vars. Tipe vals mirip dengan variable final di Java, yaitu tidak bisa diubah lagi jika telah ditetapkan. Tipe vars merupakan tipe variabel yang selalu bisa di-reassigned.
Sesi script REPL (Read-Eval-Print-Loop) berikut ini menggambarkan sesi penggunaan vals.
Sesi script REPL (Read-Eval-Print-Loop) berikut ini menggambarkan sesi penggunaan vars.
Scala mempunyai kemampuan untuk type inference. artinya kemampuan untuk menentukan tipe data suatu variabel berdasarkan assignment awal. Lihat pada REPL di atas, potongan berikut ini adalah contoh dari kemampuan tersebut:
Dengan kemampuan tersebut, scala langsung mengetahui bahwa tipe data yang di-assign ke ipk adalah tipe Double. Meskipun demikian, scala juga memungkinkan untuk menentukan tipe data pada saat assignment dengan menggunakan tanda colon (:) seperti berikut ini:
Tipe vals
Sesi script REPL (Read-Eval-Print-Loop) berikut ini menggambarkan sesi penggunaan vals.
scala> val name="Zaky Ahmad Aditya" name: java.lang.String = Zaky Ahmad Aditya scala> println(name) Zaky Ahmad Aditya scala> name = "Bambang Purnomosidi D. P." <console>:5: error: reassignment to val name = "Bambang Purnomosidi D. P." ^ scala>
Tipe vars
Sesi script REPL (Read-Eval-Print-Loop) berikut ini menggambarkan sesi penggunaan vars.
scala> var ipk = 3.86 ipk: Double = 3.86 scala> println(ipk) 3.86 scala> ipk = 3.90 ipk: Double = 3.9 scala> println(ipk) 3.9 scala>
Type Inference
Scala mempunyai kemampuan untuk type inference. artinya kemampuan untuk menentukan tipe data suatu variabel berdasarkan assignment awal. Lihat pada REPL di atas, potongan berikut ini adalah contoh dari kemampuan tersebut:
scala> var ipk = 3.86 ipk: Double = 3.86
Dengan kemampuan tersebut, scala langsung mengetahui bahwa tipe data yang di-assign ke ipk adalah tipe Double. Meskipun demikian, scala juga memungkinkan untuk menentukan tipe data pada saat assignment dengan menggunakan tanda colon (:) seperti berikut ini:
scala> var sks: Int = 21
sks: Int = 21
scala> sks = "STMIK AKAKOM"
<console>:5: error: type mismatch;
found : java.lang.String("STMIK AKAKOM")
required: Int
sks = "STMIK AKAKOM"
^
scala>
Label:
Tutorial
Mulai Menggunakan Scala
Scala merupakan software bebas dan bisa diperoleh dengan gratis (software bebas tidak sama dengan software gratis). Scala mempunyai lisensi BSD. Lisensi Scala bisa dibaca di http://www.scala-lang.org/ node/146.
Pada URL http://www.scala-lang.org/ downloads, terdapat beberapa distribusi. Penjelasan berikut ini menggunakan sistem operasi Linux. Distribusi yang diambil adalah versi 2.7.7.final yang merupakan versi terakhir / latest pada saat tulisan ini dibuat:
Asumsi:
Langkah-langkah instalasi adalah sebagai berikut:
Untuk menggunakan Scala, kita hanya perlu melakukan langkah berikut:
Setelah itu kita bisa menggunakan compiler (fsc, scala, dan scalac), package manager (sbaz), dan scaladoc. Kita juga bisa membaca manual dari perintah-perintah tersebut dengan man (man fsc, man scala, man scalac, man sbaz, dan man scaladoc).
Contoh sesi berikut ini adalah contoh sesi interaktif menggunakan scala:
Buat file HelloScala.scala berikut ini menggunakan editor teks yang anda sukai:
Kompilasi source code tersebut:
Hasilnya adalah sebagai berikut:
Untuk menjalankan hasil kompilasi tersebut, gunakan perintah berikut:
File Distribusi Scala
Pada URL http://www.scala-lang.org/
Distribusi tersebut adalah distribusi inti. Komponen-komponen lainnya akan diinstal menggunakan sbaz (Scala Bazaar).
Unix, Mac OS X, Cygwin scala-2.7.7.final.tgz (md5) 15.3 MB
Instalasi
Asumsi:
- /home/bpdp adalah direktori $HOME
- Java telah terinstal (versi 5 ke atas) dan env variable JAVA_HOME telah diset
- Scala akan diinstall di bawah direktori $HOME/software
- Setting dan konfigurasi Scala diletakkan pada $HOME/environments/scala (buat direktori environments jika belum ada dengan:
[bpdp@bpdp-arch ~]$ mkdir environments
Langkah-langkah instalasi adalah sebagai berikut:
[bpdp@bpdp-arch ~]$ cd software [bpdp@bpdp-arch software]$ tar -xzvf scala-2.7.7.final.tgz [bpdp@bpdp-arch software]$ cd scala-2.7.7.final/ [bpdp@bpdp-arch scala-2.7.7.final]$ ls -la total 40 drwxr-xr-x 10 bpdp users 4096 Nov 1 17:07 . drwxr-xr-x 17 bpdp users 4096 Feb 26 18:32 .. drwxr-xr-x 2 bpdp users 4096 Oct 28 20:19 bin drwxr-xr-x 5 bpdp users 4096 Nov 1 18:07 doc drwxr-xr-x 2 bpdp users 4096 Oct 28 20:19 lib drwxr-xr-x 3 bpdp users 4096 Oct 28 20:19 man drwxr-xr-x 3 bpdp users 4096 Feb 26 08:30 meta drwxr-xr-x 5 bpdp users 4096 Oct 28 20:19 misc drwxr-xr-x 5 bpdp users 4096 Nov 1 17:06 scala-2.7.7.final-devel-docs drwxr-xr-x 2 bpdp users 4096 Oct 28 20:19 src [bpdp@bpdp-arch scala-2.7.7.final]$Sebaiknya buat symbolic link ke direktori tersebut:
[bpdp@bpdp-arch software]$ ln -s scala-2.7.7.final scalaBuat file $HOME/environments/scala yang berisi setting dan konfigurasi shell berikut:
SCALA_HOME=/home/bpdp/software/scala export CLASSPATH=$CLASSPATH:$SCALA_HOME/lib PATH=$PATH:$SCALA_HOME/bin export PATH MANPATH=$SCALA_HOME/man:$MANPATH export MANPATHInstalasi selesai.
Menggunakan Scala
Untuk menggunakan Scala, kita hanya perlu melakukan langkah berikut:
$ source ~/environments/scala
Setelah itu kita bisa menggunakan compiler (fsc, scala, dan scalac), package manager (sbaz), dan scaladoc. Kita juga bisa membaca manual dari perintah-perintah tersebut dengan man (man fsc, man scala, man scalac, man sbaz, dan man scaladoc).
Menggunakan Scala Secara Interaktif (scala)
Contoh sesi berikut ini adalah contoh sesi interaktif menggunakan scala:
[bpdp@bpdp-arch ~]$ scala
Welcome to Scala version 2.7.7.final (OpenJDK Client VM, Java 1.6.0_17).
Type in expressions to have them evaluated.
Type :help for more information.
scala> object HelloScala {
| def main(args: Array[String]) {
| println("Selamat datang di Scala")
| }
| }
defined module HelloScala
scala> HelloScala.main(null)
Selamat datang di Scala
scala> :q
[bpdp@bpdp-arch ~]$
Mengkompilasi Menjadi .class dan Mengeksekusi Hasil Kompilasi
Buat file HelloScala.scala berikut ini menggunakan editor teks yang anda sukai:
object HelloScala {
def main(args: Array[String]) {
println("Selamat datang di Scala")
}
}
Kompilasi source code tersebut:
$ scalac HelloScala.scala $
Hasilnya adalah sebagai berikut:
[bpdp@bpdp-arch hello-script]$ ls -la total 20 drwxr-xr-x 2 bpdp users 4096 2009-09-18 07:16 . drwxr-xr-x 5 bpdp users 4096 2009-09-18 07:11 .. -rw-r--r-- 1 bpdp users 789 2009-09-18 07:16 HelloScala$.class -rw-r--r-- 1 bpdp users 607 2009-09-18 07:16 HelloScala.class -rw-r--r-- 1 bpdp users 99 2009-09-18 07:16 HelloScala.scala [bpdp@bpdp-arch hello-script]$
Untuk menjalankan hasil kompilasi tersebut, gunakan perintah berikut:
$ scala -classpath . HelloScala Selamat datang di Scala $
Label:
Tutorial
Plugin Scala untuk Netbeans (6.8)
Plugin untuk Netbeans dikembangkan oleh proyek ErlyBird dan bisa diperoleh di http://sourceforge.net/projects/erlybird/. Berbeda dengan plugin untuk Nb 6.7.1 yang masih menggunakan Scala versi lama, plugin untuk Nb 6.8 ini menggunakan versi bleeding edge (2.8.0 - nightly builds). Untuk menggunakan IDE dan plugin ini, ada beberapa file yang harus disiapkan (selain jdk):
- Scala (nightly builds 2.8.0): http://www.scala-lang.org/archives/downloads/distrib/files/nightly/distributions/scala-2.8.0.latest.zip
- Netbeans 6.8: http://netbeans.org/downloads/index.html
- Plugin ErlyBird: http://sourceforge.net/projects/erlybird/
Syntax Highlighting, Deteksi Tipe File, dan Indentasi untuk Scala di Vim
Default vim di Arch Linux tidak menyertakan file-file scala.vim untuk syntax, ftdetect, dan indent. Berikut ini adalah langkah-langkah yang saya lakukan untuk meng-enable penggunaan Scala di Vim.
Buat Directory
File-file tersebut berada di trunk svn berikut: https://lampsvn.epfl.ch/tr ac/scala/browser/scala-too l-support/trunk/src/vim dan bisa diambil via web melalui trac. Disini saya menggunakan wget untuk langsung mengambil file-file tersebut:
syntax
Pada vim, tampilannya adalah sebagai berikut:
Buat Directory
[bpdp@bpdp-arch ~]$ mkdir .vim [bpdp@bpdp-arch ~]$ cd .vim [bpdp@bpdp-arch .vim]$ mkdir ftdetect [bpdp@bpdp-arch .vim]$ mkdir indent [bpdp@bpdp-arch .vim]$ mkdir syntax [bpdp@bpdp-arch .vim]$ ls -la total 20 drwxr-xr-x 5 bpdp users 4096 2009-09-17 06:27 . drwx------ 95 bpdp users 4096 2009-09-17 06:26 .. drwxr-xr-x 2 bpdp users 4096 2009-09-17 06:23 ftdetect drwxr-xr-x 2 bpdp users 4096 2009-09-17 06:27 indent drwxr-xr-x 2 bpdp users 4096 2009-09-17 06:26 syntax [bpdp@bpdp-arch .vim]$Mengambil file-file yang diperlukan
File-file tersebut berada di trunk svn berikut: https://lampsvn.epfl.ch/tr
syntax
[bpdp@bpdp-arch syntax]$ wget https://lampsvn.epfl.ch/trac/scala/export/18712/scala-tool-support/trunk/src/vim/syntax/scala.vim --2010-02-26 08:42:47-- https://lampsvn.epfl.ch/trac/scala/export/18712/scala-tool-support/trunk/src/vim/syntax/scala.vim Resolving lampsvn.epfl.ch... 128.178.154.32 Connecting to lampsvn.epfl.ch|128.178.154.32|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 6043 (5.9K) [text/plain] Saving to: “scala.vim” 100%[=====================================================================>] 6,043 13.2K/s in 0.4s 2010-02-26 08:42:50 (13.2 KB/s) - “scala.vim” saved [6043/6043] [bpdp@bpdp-arch syntax]$ftdetect
[bpdp@bpdp-arch syntax]$ cd ../ftdetect/[bpdp@bpdp-arch ftdetect]$ wget https://lampsvn.epfl.ch/trac/scala/export/18712/scala-tool-support/trunk/src/vim/ftdetect/scala.vim
--2010-02-26 08:44:45-- https://lampsvn.epfl.ch/trac/scala/export/18712/scala-tool-support/trunk/src/vim/ftdetect/scala.vim Resolving lampsvn.epfl.ch... 128.178.154.32 Connecting to lampsvn.epfl.ch|128.178.154.32|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 65 [text/plain] Saving to: “scala.vim” 100%[=====================================================================>] 65 --.-K/s in 0s 2010-02-26 08:44:48 (2.86 MB/s) - “scala.vim” saved [65/65] [bpdp@bpdp-arch ftdetect]$indent
[bpdp@bpdp-arch ftdetect]$ cd ../indent/ [bpdp@bpdp-arch indent]$ wget https://lampsvn.epfl.ch/trac/scala/export/18712/scala-tool-support/trunk/src/vim/indent/scala.vim --2010-02-26 08:46:51-- https://lampsvn.epfl.ch/trac/scala/export/18712/scala-tool-support/trunk/src/vim/indent/scala.vim Resolving lampsvn.epfl.ch... 128.178.154.32 Connecting to lampsvn.epfl.ch|128.178.154.32|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 2187 (2.1K) [text/plain] Saving to: “scala.vim” 100%[=====================================================================>] 2,187 --.-K/s in 0.01s 2010-02-26 08:46:53 (193 KB/s) - “scala.vim” saved [2187/2187] [bpdp@bpdp-arch indent]$Proses di atas akan menghasilkan file-file berikut ini:
[bpdp@bpdp-arch .vim]$ ls -laR .: total 20 drwxr-xr-x 5 bpdp users 4096 Sep 17 06:27 . drwx------ 113 bpdp users 4096 Feb 26 08:17 .. drwxr-xr-x 2 bpdp users 4096 Feb 26 08:44 ftdetect drwxr-xr-x 2 bpdp users 4096 Feb 26 08:47 indent drwxr-xr-x 2 bpdp users 4096 Feb 26 08:42 syntax ./ftdetect: total 12 drwxr-xr-x 2 bpdp users 4096 Feb 26 08:44 . drwxr-xr-x 5 bpdp users 4096 Sep 17 06:27 .. -rw-r--r-- 1 bpdp users 65 May 30 2008 scala.vim ./indent: total 12 drwxr-xr-x 2 bpdp users 4096 Feb 26 08:47 . drwxr-xr-x 5 bpdp users 4096 Sep 17 06:27 .. -rw-r--r-- 1 bpdp users 2187 May 30 2008 scala.vim ./syntax: total 16 drwxr-xr-x 2 bpdp users 4096 Feb 26 08:42 . drwxr-xr-x 5 bpdp users 4096 Sep 17 06:27 .. -rw-r--r-- 1 bpdp users 6043 Aug 16 2009 scala.vim [bpdp@bpdp-arch .vim]$Setelah itu vim/gvim bisa digunakan untuk mengedit file source code Scala. Berikut ini adalah contoh screenshot:
Pada vim, tampilannya adalah sebagai berikut:

