You are on page 1of 119

I.

MengenalPERL
1.TentangPERL
PERLadalahbahasapemrogramanyangmenggunakantipedatadinamis,programPERL dapatlangsungdieksekusitanpaharusmelaluiproseskompilasitersendirikeformatbinary yangdapatdieksekusi. PERLbanyakdigunakanpadaaplikasimanajemensistemdanjaringan,pemrogramanweb, manipulasiteks,akseskedatabase. BerikutinibeberapaaplikasiyangmenggunakanPERLyangcukupdikenal:mrtg,SQL Ledger(aplikasiakunting),Webmin(aplikasiadmin),spamassasin(antispam).

2.MenjalankanProgramPERL
2.1.Eksekusidarifile
BerikutinisebuahprogramPERLsalam.pl,yangmencetaksalamuniversaldikonsol,jika adaargumenpadacommandlinemakaditampilkansetelahsalam.
#!/usr/local/bin/perl if($#ARGV>1){ print"assalamu'alaikum$ARGV[0]\n"; }else{ print"assalamu'alaikum\n"; }

EksekusidishellmenggunakanPERLinterpreter,sbb:
bash%perlsalam.plHafizh assalamu'alaikumHafizh

Agardapatdieksekusitanpamengetikkaninterpreterperldicommandline,filesalam.pl perludisetpermissionnya.Misalkandenganperintah:
bash%chmod7 55salam.pl bash%./salam.plHafizh assalamu'alaikumHafizh

PastikanprogramPERLdiawalidenganpathlengkapkeinterpreterperlyangterinstaldi sistemoperasianda,untuksistemberbasisLinuxdanUnix,pathtersebutharusdiawali dengankarakter'#!',seperticontoh:


#!/usr/local/bin/perl

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource1

2.2.Eksekusidaricommandline
PERLdapatmengeksekusiperintahsecaralangsungdaricommandline,tanpaperlumembuat fileprogram,menggunakanoptionsediinterpreterperl,contoh:
bash%perle'print Assalamu''alaikum\n'

Perhatikanduakutiptunggalditengahkata,karenakutiptunggaldigunakanuntukmembatasi perintah. Jikamenggunakankutipgandauntukmembatasiperintah:


bash%perleprint\ Assalamu'alaikum\n\

3.DasardasarPERL
3.1.ProgramPERL
ProgramPERLatauskripPERL,biasadisimpandalamfileteksberakhiran.pl.Walaupun demikianperlinterpretertetapakanmengeksekusiprogramPERLyangtidakmenggunakan ekstensi.pl. SebuahprogramPERLyangexecutabledapatmenggunakanhanyastatement,tanpaperlu mendefinisikanfungsikhusussepertimain()dalamprogrambahasaC. ProgramPERLdapatterdiriatasstatemen,deklarasisubroutine,konstruksikondisional, konstruksiloop,konstruksiblock.

3.1.1.Statemen
Statemendiakhiridengantandatitikcoma.Statemendapatberbentukdeklarasivariabel, assignmentvariabeldanpemanggilanfungsi.Whitespace(spasi,barisbaru)diabaikan.
print"opensourcesoftware?!", "it'samiracle", ",doyoubelievemiracle?\n";

3.1.2.Komentar
Sebagaimanabahasapemrogramanlainnya,programmerPERLdapatmenuliskankomentar dalamkodeprogram,denganmenempatkankarakter'#'sebelumbariskomentar,contoh:
#menghitunghitungluas $area=$pi*$radius*$radius;

Ataudapatjugasetelahbagiankode:
$area=$pi*$radius*$radius;#menghitunghitungluas

2PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

Komentardiperlakukansebagaimanawhitespace.

3.2.VariabeldanTipedata
Variabeldigunakanuntukmenyimpandata.PERLmemiliki3tipevariabelutama:skalar, arraydanhash.Namanamavariabel,danidentifierlainnyadalamPERLadalahcase sensitive.

3.2.1.Skalar
Variabelskalarmenyimpandatabernilaitunggal,tipedatadapatberupastringataubilangan. Tipedatasecaraotomatisditentukanpadasaatassignmentvariabel.tidakperlu mendeklarasikantipedatasebelumassignment. Namavariabelskalardimulaidengankarakter'$'.Contoh:
#string $file='/etc/profile'; $kota=depok; #integer $_num=255; $byte_=0x00ff; #float $konstanta_pi=22/7;

3.2.1.1.Stringpetiktunggal(singlequote)danpetikganda(doublequote)
Stringdapatdinyatakandalampetiktunggal(')danpetikganda(). Stringdenganpetiktunggalmenyatakandataadalahsepertiyangtertulis,tidakada interpretasiterhadapkarakterkarakterpadastring. StringdenganpetikgandamenyatakanbahwainterpreterPERLharusmelakukaninterpretasi terhadapkarakterkarakterpadastringtersebut. Contoh:
#dicetakdalamsatubaris,karakter\ntidakdiinter pretasikan $str1='\niman\nilmu\namal\n'; print$str1; #dicetakdalam3barisdiikutibarisbaru $str2=\niman\nilmu\namal\n;

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource3

print$str2; #mencetak'honourtheadzan'diikutibarisbaru $str3='honour'; $str4=$str3theadzan\n;

VariabelKhusus PERLjugamengenalbeberapavariabelskalarkhusus,seperti$ARG,$_,$!,$1,$2,$3,dan sebagainyayangdijelaskandimanperlvar

3.2.2.Array
Arraymenyimpansekumpulannilaisecaraberurutan(sekuensial),yangbiasadisebutlist, nilainilaiyangdisimpandapatberbedabedatipedatanya.Untukmembacanilaianggota arraydigunakannomorindeksintegerdimulaidarinol. Variabelarraydideklarasikanmenggunakankarakter@didepannamavariabel,dataanggota arrayditempatkandalamkurung(),nilainilaianggotadipisahkanolehkoma. Nilaianggotaarraydibacamenggunakanoperator[]dannomorindeks.Contoh:
@prima1=(2,3,5,713, ); ,, 1 11 7 #mencetak'5' print$prima1[2];

Untukmendapatkanjumlahanggotaarraydigunakanvariabel$#diikutinamavariabel,tapi nilainyaadalahjumlahanggotaarraydikurangisatu.Nilaiinijugadapatdigunakanuntuk membacaelementerakhir.Contoh:


@hari2=(1 ,"senin",2,"selasa",3,"rabu",4, kamis,5,jumat); #mencetak'jumlahanggota:9' printjumlahanggota:$#hari2\n; #mencetak'elementerakhir:jumat' printelementerakhir:$hari2[$#hari2]\n;

Jikasebuahprogrammencobamenulisanggotaarraypadaposisiindeksyanglebihbesardari ukuranarray,makaPERLsecaraotomatismenambahukuranarraysampaiposisibaru tersebut.Contoh:


@bil3=(1 0,20,30,40); #mencetak'ukuranarray:3'

4PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

printukuranarray:$#bil3\n; $bil3[10]=1234; 1 #mencetak'ukuranarray:10' 1 printukuranarray:$#bil3\n;

Membacadariarraydenganindeksyanglebihbesartidakakanmenyebabkanerrordantidak akanmenambahukuranarray.Contoh:
@bil4=(1 0,20,30,40); $t1=$bil4[89]; #mencetak'ukuranarray:3' print"ukuranarray:$#bil4\n";

Jikavariabelarraydievaluasidalamkonteksnilaiskalar(scalarcontext)makavariabel tersebutdievaluasisebagaijumlahanggotaarray,contoh:
#dievaluasidalamscalarcontext @arr=(1 0,20,6, 1,22); 1 1 9, if(@arr==6){ print"jumlahanggotaarrayada6\n"; }

Arraydapatdisalinsebagiananggotanyakearraylaindenganmudah(arrayslice), menggunakanoperator[],Contoh:
@arr1=('semar','gareng','petruk','bagong','arjuna', 'srikandi'); @arr2=@arr1[2,4]#'petruk'dan'arjuna' @arr3=@arr1[1 ..3]#'gareng','petruk','bagong' @arr4=@arr1[1 ..$#arr1]#semuakecuali'semar'

3.2.3.Hash
Hashmenyimpansekumpulannilaiyangmenggunakanpasangannamakuncidannilai. Namakuncidalamsebuahvariabelhashharuslahunik,tidakbolehada2pasanganyang menggunakannamakunciyangsama. Variabelhashdidefinisikanmenggunakankarakter%diikutinamavariabel. Nilainilaianggotahashterdiriataspasangannamakuncidannilaiyangdipisahkanoleh koma.Namakuncidanpasangandituliskanberurutan,dapatdipisahkantandakomaatau dapatjugadipisahkanolehkarakter'=>'. Untukmembacanilaianggotahashdigunakanoperatorkurawal{}dannamakunci.Contoh: PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource5

%rasa_buah1=('asam','asemdjawa','manis','manggis','pahit', 'pare'); #mencetak'yangpahit=pare' printyangpahit=$rasa_buah1{'pahit'}\n; #dapatjugaditulissepertiini %rasa_buah2=('asam'=>'asemdjawa', 'manis'=>'manggis', 'pahit'=>'pare'); $rasa='manis'; #mencetak'yangmanis=manggis' printyang$rasa=$rasa_buah2{$rasa}\n;

3.3.Operator
PERLmemilikibanyakoperatordanfungsiyangbuiltin,berikutinibeberapaoperatoryang umumdigunakan,selengkapnyadapatdilihatdenganmanperlop. ManipulasiString . + * / '== '!= < > <= >= eq Concat(penggabungan) Aritmetika Penjumlahan Pengurangan Perkalian Pembagian PerbandinganBilangan kesamaan Ketidaksamaan Kurangdari Lebihdari Kurangdariatausamadengan Lebihdariatausamadengan PerbandinganString kesamaan

6PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

ne lt gt le ge

Ketidaksamaan Kurangdari Lebihdari Kurangdariatausamadengan Lebihdariatausamadengan

PerhatikanbahwaPERLmenyediakanoperasipembandingstringdanpembandingbilangan. Stringdibandingkansecaraalpabetis.Secaraalpabetis,string'100'lebihkecildari'8'.Contoh:
$a=1 00;$b=8 if($a>$b){ printBilangan$alebihbesardari$b\n; }else{ printBilangan$atidaklebihbesardari$b\n; } if($agt$b){ printString$asecaraalpabetislebihbesardari$b; }else{ printString$asecaraalpabetistidaklebihbesardari$b; }

Operasiperbandinganmenghasilkannilaibenar(true)atausalah(false). TRUEdanFALSEdalamPERL PERLtidakmengenaltipedatakhususuntukmewakiliTRUEdanFALSE. DalamPERLnilaiberikutiniadalahFALSE: bilangan0,string'0',listkosong(),danundef, selainnilainilaitersebutadalahTRUE.

3.4.Fungsi
PERLmemilikifungsibuiltinyangkaya,salahsatuyangsudahdiperkenalkanadalah print. Fungsidapatmenerimanolataulebihargumen.Argumensebuahfungsidapatberupaskalar, list,ataukeduanya. Pemanggilanfungsidapatmenggunakantandakurung()diantaraargumen,dapatjugatidak. Fungsiprintadalahfungsiyangmenerimaargumenlist.Contoh:
printsaya,bela jar,PERL ; #samadengan

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource7

print(saya,bela jar,PERL );

Fungsiprintjugadapatmenerimaargumenskalarberupafilehandledanlist.Tentang filehandleakandijelaskandibagianFileInputdanOutput. Fungsidapatmengembalikannilaiskalarataulist. Berikutinifungsilocaltime,yangmengembalikanlistberisidatawaktu,dipanggiltanpa argumen:


@bulan=('jan','peb','mar','apr','mei','jun','jul','ags', 'sep','okt','nop','des'); @hari=('minggu','senin','selasa','rabu','kamis','jumat', 'sabtu'); ($sec,$min,$hour ,$mday ,$mon,$year ,$wday ,$yday ,$isdst)= localtime; print"Bulan$bulan[$mon]hari$hari[$wday]tgl$mdaytahun ", 1 900+$year ,"\n";

PerludiingatbahwaPERLpertamakalidikembangkandilingkunganUnix,jadiakanbanyak ditemukanfungsifungsiyangfamiliardengansistemoperasiini,misalnyayangberhubungan denganfilesystem,socket,network,interprocesscommunication,danprocesscontrol. Daftarfungsibuiltinsecaralengkapdapatdibacadenganman perlfunc. Penjelasanuntukfungsitertentudapatdicaridenganperldoc -f <nama fungsi>. Contoh:


bash% perldoc -f localtime

3.5.KonstruksiKondisional
BerikutinikonstruksikondisionalyangdisediakanPERL

3.5.1.if
Mengeksekusistatemenjikakondisibernilaibenar.Untukpercabanganmenggunakanelsif danelse.Bentuknya:
if(kondisi1){ #statemenstatemen } elsif(kondisi2){ #statemenstatemen }elsif(kondisi3){ #statemenstatemen }else{

8PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

#statemenstatemen }

3.5.2.unless
Adalahkebalikandariif.

3.6.KonstruksiLoop
PERLmengenalbeberapajenisloop:

3.6.1.for
Digunakanuntukmelakukanpengulanganberdasarkan3ekspresiyangmasingmasinguntuk :memulailoop,menentukanapakahmelanjutkaneksekusiloop,dieksekusipadaakhirloop supayakondisiuntukmengakhiriloopdapatdicapai.Bentuknya:
f or(<ekspresi1>;<ekpresi2>;<ekspresi3>){ #statemenstatemen }

Ekspresiyangumumdigunakanadalahsebagaiberikut:
f or($i=0;$i<$jumlah_pengulangan;$i++){ #statemen }

3.6.2.foreach
Digunakanuntukmelakukaniterasiberdasarkananggotasebuaharrayataulist.Bentuknya:
f oreach<variabel_skalar>(<ekspresilist>){ }

Contoh: #iterasiatasarray @hari=('senin','selasa','rabu','kamis','jumat','sabtu','minggu');


f oreach$h(@hari){ print"hari$h\n"; } #terhadaplist $p=1; f oreach$q(2..6){ $p*=$q;

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource9

} print"faktorial6=$p\n"; #atauterhadaparrayslice f oreach$q(@hari[2..5]){ print"$q\n"; }

3.6.3.while
LoopdieksekusiselamakondisiadalahTRUE.Untukkeluardariloopharusdengan mengubahkondisimenjadifalseataumenggunakanstatementlast; Bentuknya:
while(kondisi){ #statemen }

3.7.InputdanOutputkefile 3.7.1.Membacadarifileteks
Sebelumfiledapatdibacamakaharusfiledibukadenganfungsiopen,denganmodebaca, contoh:
open($fh,'/etc/passwd');

Variable$fhadalahfilehandleyangdiperlukanuntukmembacadanmenutupfile. Selanjutnyasetiapbarisdibacadenganoperator<>.sebagaiberikut:
while($line=<$fh>){ #memproses$line }

Setelahselesaifileditutupdenganfungsiclose,contoh:
close($fh)

3.7.2.Menuliskefileteks
Perintahyangsamadenganprogramdiatasdapatdigunakanuntukmenuliskefile.Pertama, filedibukadenganmode'tulis':
open($fh,>/path/ke/file);

selanjutnyadapatditulisdenganperintahprint,menggunakanfilehandle,sbb: 10PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

print$fhbaristeksyangditulis...\n;

Sepertihalnyadalamhalmembaca,makafilehandleharusditutupdenganclose. Berikutinicontohmembacadarifiledanmenuliskefilebaru,ataumengcopyfile:
#mengcopy/etc/profile $fnam='/etc/profile'; $fbaru='/home/didi/copyprofile'; open($fh1 ,$fnam)ordiegagalbaca$fnam,$!; open($fh2,>$fbaru)ordiegagalmenulis$fbaru,$!; while($line=<$fh1>){ print$fh2$line; } close($fh1); close($fh2);

Ekspresior die ... digunakansebagaierrorhandlerjikafiletidakdapatdibuka. Variabelkhusus$!digunakanuntukmenampilkanpesanerrordarisistem.

3.8.Subrutin
Padaprogramaplikasiumumnya,kumpulanstatemenyangmengimplementasikansebuah operasitertentudidefinisikandalamsebuahsubrutin. Beberapasubrutinbiasanyadidefinisikandalamsebuahfiletersendiri,sehinggadapat digunakanolehberbagaiprogrampemanggil. Berikutinibentukpendefinisiansubrutin:
sub<namasubrutin>{ }

Subrutindapatmenerimaparameter,tapiPERLtidakmengenalnamedformalparameter, parameteryangdikirimkankesubrutindapatdiaksesdalamsubrutinmelaluiarraykhusus@_ ,berikutinicontohsubrutinsederhanayangmenghitungnilaifaktorial:


subfaktorial{ my($num)=@_; my$res=1; f oreachmy$a(1 ..$num){ $res*=$a;#atau$res=$res*a } return$res;

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource11

} #returnTRUEvalue 1;

Perhatikanbahwajikasubrutindidefinisikandifiletersendiri,makafiletersebutharus mengembalikannilaiTRUE,dalamprogramdiatasdigunakanbilangan1. Jikasubrutintersebutdisimpandifile/home/didi/mylib/math.pl,makadapat dipanggildariprogramlainnyasebagaiberikut:


req uire/home/didi/my lib/math.pl print"Faktorial6=",faktorial(6),"\n";

Penjelasanlebihlengkaptentangsubrutindapatdibacadarimanperlsub

4.Penutup
PERLadalahbahasapemrogramanyangberdayagunatinggi,yangterusdigunakandan dikembangkanolehkomunitasopensource. Sepertihalnyabahasaopensourcelain,PERLmemilikisistemdokumentasiyangsangat lengkap,pembacasangatdianjurkanmenelaahmanualPERLyangterdistribusibersama sourcecodePERL.

12PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

II.MengenalPHP
PHPadalahbahasapemrogramanscriptyangdinamis.ProgramPHPdapatdijalankansebagai aplikasiwebyangmemerlukanwebserverdandapatjugadijalankanmenggunakaninterpreter PHP,sebagaiaplikasikonsolataudesktopbased. PHPadalahbahasapemrogramanyangkayadenganlibraryuntukpengembanganaplikasi mulaidaridukungankeberbagaidatabasemanagementsystem,dukunganlibraryGraphical UserInterface,sampailibraryuntuksistemadministrasi.

1.MenginstalPHP
PHPdiinstalsebagaimoduleapachedansekaligusmenginstalPHPCLI(commandline interpreter),namanamadirektori(misal:/dir/instalasi/xxx/anda)dapatandaubah sesuaidengankeinginananda. Karenanyaharusmenginstalapacheterlebihdahulujikaapachebelumterinstal. BerikutinicarainstalasiPHP5darisourcecode.

1.1.InstalasiApache
1. InstalApache,pertamadownloaddarihttpd.apache.org,dalamhalinikami menggunakanapache1.3.37 2. Uncompressdisembarangdirektori
bash%tarzxvfapache_1 .3.3 tar gz . . 7

3. Konfigurasidankompilasi
bash%cdapache_1 .3.3 7 bash%./configureprefix=/di r/ in stal as i/ ap ach e/ and a enableshared=max bash%make

4. Instal
bash%makeinstall

5. Instalasiapacheselesai

1.2.InstalasimodulePHPdanPHPCLI:
1. Downloaddarisituswww.php.net 2. Uncompressdisembarangdirektori
bash%tarzxvfphp5.2.0.tar gz .

3. Konfigurasidankompilasi PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource13

bash%cdphp5.2.0 bash%./configureprefix=/d ir /i ns tala si /p hp/ an dawith apxs=/di r/ in stal as i/ ap ach e/ and a/ bin /a pxs withconfig filepath=/etc bash%make

4. Instal
bash%makeinstall

5. Instalasimodulephpdanphpcliselesai

2.MenjalankanProgramPHP
ProgramPHPdapatdijalankandengan2modus:

2.1.AplikasiKonsol
Buatprogramsalam.phpberikutinidisebarangdirektori:
<?php echoassalamu'alaikum,Brother\n; ?>

PastikanPHPCLIadadiPATHdenganperintah:
bash%exportP ATH=/dir/instalasi/php/anda/bi n:$P ATH

Jalankanprogramdenganperintahphp
bash%phpsalam.php

2.2.Aplikasiweb
Agardapatdieksekusimelaluiaplikasiwebmakaandaperlumenyalin(copy)salam.phpke documentrootdariserverapacheanda:
bash%cpsalam.php/dir/instalasi/apache/anda/htdocs/

LaluaksesURLinidenganwebbrowserpilihananda:
http://localhost/salam.php

3.BahasaPHP
BagianinimembahasPHPsebagaibahasapemrogramanumum(generalpurpose),contoh contohdijalankanmenggunakanPHPCLI(CommandLineInterface). PadabagianAplikasiWebdibahasPHPsebagaibahasapemrogramanweb,contohcontoh dijalankanmenggunakanserverweb,keluaranditampilkanmenggunakanklienweb.

14PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

3.1.ProgramPHP
FileprogramPHPadalahfileteksyangdapatdibuatdenganeditorteksbiasa(misal:vim, gedit,kedit). SebuahfileprogramPHPpalingsedikitterdiriatassatubarisstatemenyangdibatasiolehtag pembukablokstatemendantagpenutupblokstatemen. Tagpembukablokadalah<?phpdanpenutupnyaadalah?>.PHPmengenal3jenistag pembukalainnyayangtidakdirekomendasikanpadamanualPHP,dankarenanyatidak dibahasdisini. SebuahprogramPHPdapatterdiri2jenisstatemen:

statemenPHPyangdibatasiolehtagtersebut statementnonPHP(misal:HTML,WML,XML)

Keduajenisstatemendapatberselangselinglebihdarisatukalidalamprogram. PHPmengabaikanwhitespace(spasi,tab,barisbaru)sebelumdansesudahstatemen,juga whitespacediantaratokentokendalamstatemen. Semuacontohprogramdalamtulisaninitidakmenuliskantagpembuka<?phpdan penutup?>untukmenghematruang/kertas,kecualijikaadabagianprogramyang menggunakanstatemennonPHP.

3.2.Komentar
PHPMengenal3jeniskomentar: 1. Diawalidengan//,berlakuhanyauntuk1baris 2. Diawalidengan#,berlakuhanyauntuk1baris 3. Diawalidengan/*dandiakhiri*/,berlakuuntuklebihdari1baris,dapatjuga digunakanuntukmenyisipkankomentardiantaratoken. Ketigajeniskomentardapatberadapadabaristersendiriataudibelakangstatement.Contoh:
//komentar1 echo'stringsatu',"\n";//komentar2 echo'stringdua',"\n";#komentar3 /* komentar4,komentarini melintasbeberapabaris */ echo/*komentar5,diantaratoken*/'stringtiga',"\n";

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource15

3.3.TipeData
PHPmembedakanoperasiyangdapatdilakukanterhadapsetiaptipedata.

3.3.1.TipePrimitif
Tipeprimitifadalahtipedatadasaryangtidakdapatdibagilagi(decompose)atastipedata yanglebihdasarlainnya.

3.3.1.1.Boolean
PHPmengenaltipebooleanyaitu:TRUEdanFALSE,keduanyacaseinsenstive. JadiTrue,true,atauTRUEadalahsama.

3.3.1.2.Integer
IntegerataubilanganbulatdiPHPtidakmembedakanpanjangbyte(longatauintegerbiasa), keduanyaadalahinteger. Integerliteraldapatdituliskansebagaidesimal(default,tanpaprefiks),octal(denganprefix '0')atauhexadecimal(denganprefix0x). Contoh:
1234567 890#desimal 0 1234567#octal 0x1234567 89abcdef#hexadecimal

3.3.1.3.float
Literalfloatmenggunakan'.'untukpembataspecahandesimal,danmenggunakansimbole untukpangkatdesimal. Padacontohberikutinike4bilanganyangditulisdengancaraberbedaadalahsamabesarnya:
. 1234567 89 0. 1234567 89 1234567 89e9 123.4567 89e4

3.3.1.4.string
StringdalamPHPadalahderetenkarakter. Literalstringdapatditulisdengan3cara:

16PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

3.3.1.4.1.Petikganda
Stringdenganpetikgandamengenalkarakterkhusus(barisbaru,tab)danmelakukan ekspansivariabel

3.3.1.4.2.PetikTunggal
Stringdenganpetiktunggaltidakmengenalkarakterkhusus(barisbaru,tab)dantidak melakukanekspansivariabel

3.3.1.4.3.Heredoc
Sintakheredocmemperlakukanstringsepertidoublequote,hanyasajamenggunakan delimiteryangberbeda,yaituderetankarakteralpahanumericataugarisbawah,yangdimulai hanyadengankarakternondigitataugarisbawah.Contoh:
<<<Ini_Delimiter_heredoc Berikutiniadalahstringdalamheredoc,inigantibaris\n daninicarriagereturn\rtulisaniniakanmenimpa'dan ini carriage
return'

Ini_Delimiter_heredoc;

3.3.2.TipeGabungan(compound)
Tipegabunganadalahtipeyangdapatdibagi(decomposed)menjaditipeyanglebih sederhana. PHPmengenal2jenistipegabungan:

3.3.2.1.Array
ArraydiPHPpadadasarnyahanyaadasatujenisyaituorderedmap.ArraydiPHPdapat disamakandenganassociativearraypadabahasapemrogramanlainnya(misal:PERL),yaitu merupakanderetanpasangankeydanvalueyangberurutansesuaidenganurutan penyimpanan. BedanyaadalaharraydiPHPdapatdiaksessepertilistatauarrayberindeksintegerberbasis0 (zerobasedindexed) Arraydibuatmenggunakanconstructorarray().Contoh
$a=array( 'php'=>'aplikasiweb', 'python'=>'aplikasidesktop', 'perl'=>'otomatisasisysadmin', 'c'=>'aplikasisystem',

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource17

'ruby'=>'aplikasiweb', 'java'=>'aplikasienter prise' ); echo'phptepatuntuk',$a['php'],"\n"; echo'pythoncocokuntuk',$a['python'],"\n";

Arrayberindeksintegerjugadapatdibuatdenganconstructorarrayyangsama:
$b=array('php','python','perl','c','ruby','java'); echo$b[0], \n#php echo$b[1], \n#python echo$b[4], \n#ruby

3.3.2.2.Objek
Tipedatainimenyimpanreferensikeinstanceclass.Tipedataobjekdibuatmenggunakan constructorclass.PembahasanselengkapnyaadadibagianClass.

3.3.3.TipeKhusus 3.3.3.1.Resource
Resourceadalahtipekhususyangmenyimpanreferensikeresourceeksternal.

3.3.3.2.NULL
Menyatakanketiadaannilai,tipedatainihanyamemilikisatunilai:NULL

3.3.4.Konversikeboolean
PHPmelakukankonversidaritipedatalainkebooleandalamkonteksyangmemerlukantipe booleanberdasarkanaturanyangjelas. Salahsatukonteksyangmemerlukantipebooleanadalahstatemenkondisional(misal:if). SemuanilaiberikutiniakandianggapFALSEolehPHP: booleanFALSE integer0(nol) float0.0(zero) stringkosong,danstring"0" arrayyangtidakmempunyaielemen. objectyangtidakmempuyaivariabelmember(PHP4) tipekhususNULL semuavariabelyangdiunset

18PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

3.4.Variabel
Variabeldigunakanuntukmenyimpandata,selanjutnyadatadimanipulasimelaluivariabel.

3.4.1.Assignment
Variabeldiberinilai(=data)melaluiassignment. Variabeltidakperludideklarasikansebelumdiberinilai.
$a=1 000; $b='iniadalahstring'; $c=stringinibergabungdengan'$b';

Jikaekspresimengacukevariabelyangbelumdidefinisikantidakmenyebabkanerror.
echo$a,$b,$c,\n;

Assignmentkevariabeldapatmenghasilkandatabaru(dengannilaiyangsama),atautidak menghasilkandatabarutapihanyamenghasilkanreferensibaru.
$a=1234; $b=$a;#$bberisisamadengana

PadaPHP5,assignmentdarivariabel(yangdiassignke)objekkevariabellain,tidak menyebabkanadanyadatabaru,tapihanyamenghasilkanreferensibaru.
1 /*REQUIREPHP5*/ . 2. classKoordinat 3. { 4. functionKoordinat($x,$y){ 5. $this>X=$x; 6. $this>Y=$y ; . } 7 8. } 9. $k1=newKoordinat(5,5); 1 0.$k2=$k1; 1. $k2>X+=222;#Xdi$k2diubah=22 1 7 12.echo$k1>X,"\n";#X$k1jugaberubah=22 7

UntukmendapatkanhasilyangsamadiPHP4,perlumenggunakanreferenceassignment=&, baris10ditulissbb:
$k2=&$k1;

Referenceassignment=&,jugadapatdigunakanuntukvariabelprimitif:

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource19

$x=200; $y=&$x; $y+=300; echo$x, \n;#500

3.5.EkspresidanOperator
Ekspresiadalahsegalasesuatuyangmemilikinilai. Ekspresimeliputinilailiteral,pemanggilanfungsiyangmengembalikannilai,hasiloperasi, termasukassignment. AssignmentdalamPHPmemilikinilaidanadalahekspresijuga.Halinidapatmenjadi sumbererroryangtidakmudahditemukan,ketikayangingindilakukanadalahujikesamaan (equality==):
#programberikutinicontohpenggunaanekspresiyangSALAH $a=123; if($a =1 0){#selaluTRUE,seharusnya$a==1 00 000 echo$asamadengan1 000\n; } $b=0; if($b =0 ){#selaluFALSEseharusnya$b==0 echo$bsamadengan0\n; }

Padabagianberikutnyadibahasberbagaioperator,setiappenjelasanlangsungmenggunakan contoh.

3.5.1.Operatoraritmetika
Berlakuuntuktipedatabilangan. penjumlahan,perkalian,pembagian,pengurangan,modulus.
$a=1 0;$b=20; $c=$a+$b;//penjumlahan,hasil30 $c=$a$b;//pengurangan,hasil1 0 $c=$a*$b;//perkalian,hasil200 $c=$a/$b;//pembagian,hasil0.5 $c=$a%$b;//modulus,hasil1 0

20PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

3.5.2.Operatorincrementing/decrementing
Menambahataumengurangibilangandengan1,terdiriatas: postincrement,preincrement,postdecrement,predecrement.
$a=1 0; $b=$a++;//postincrement echo"b==$b,a==$a\n";//b==1 0,a==1 1 $b=++$a;//preincrement echo"b==$b,a==$a\n";//b==12,a==12 $b=$a;//postdecrement echo"b==$b,a==$a\n";//b==12,a==1 1 $b=$a;//predecrement echo"b==$b,a==$a\n";//b==1 0,a==1 0

3.5.3.Operatorassignment
Assignmentmenghasilkannilaibarusesuainilaiexpresidisebelahkananoperator=.
$a=1 0; $c=($b=1 0)+$a;//$c==20,$b==1 0 $a+=1 0;//$a==20 $c=($b+=1 0)+$a;//$c==40,$b==20,$c==20

3.5.4.OperatorPerbandingan
Membandingkanantara2nilai.Berikutinioperasidancontohnya:

3.5.4.1.Ternary
ekspresi1?ekspresi2:ekspresi3

Operator'?'inimengembalikannilaiekspresi2jikaekspresi1bernilaiTRUEdan mengembalikannilaiekspresi3jikaekspresi1bernilaiFALSE.
//ternary $hasil=true?'benar':'salah';

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource21

echo$hasil,"\n";//benar $hasil=false?'benar':'salah'; echo$hasil,"\n";//salah

3.5.4.2.Equal
ekspresi1==ekspresi2

Operator'=='inihanyamenghasilkannilaiTRUEjikanilaiekspresi1samadengannilai ekspresi2,jikatipedatakeduaekspresiberbedamakasebelumoperasidijalankanekspresi2 dikonversikantipedatanyaketipedataekspresi1.


//eq ual $a=1 0;$b='1 0'; echo$a==$b?'true':'false',"\n";//true

3.5.4.3.Identical
ekspresi1===ekspresi2

Operator'==='inihanyamenghasilkannilaiTRUEjikanilaiekspresi1samadengannilai ekspresi2dantipedatakeduanilaiekspresisama.
//identical $a=1 0;$b='1 0';$c=1 0; echo$a===$b?'true':'false',"\n";//false echo$a===$c?'true':'false',"\n";//true

3.5.4.4.NotEqual
ekspresi1!=ekspresi2 ekspresi1<>ekspresi2

Operator'!='dan'<>'inihanyamenghasilkannilaiTRUEjikanilaiekspresi1tidak samadengannilaiekspresi2,jikatipedatakeduaekspresiberbedamakasebelumoperasi dijalankanekspresi2dikonversikantipedatanyaketipedataekspresi1.


//noteq ual $a=1 0;$b='1 0';$c=1 1; echo$a!=$b?'true':'false',"\n";//false echo$a!=$c?'true':'false',"\n";//true //noteq ual $a=1 0;$b='1 0';$c=1 1; echo$a<>$b?'true':'false',"\n";//false

22PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

echo$a<>$c?'true':'false',"\n";//true

3.5.4.5.NotIdentical
ekspresi1!==ekspresi2

Operator'!=='hanyamenghasilkannilaiTRUEjikanilaiekspresi1tidaksamadengannilai ekspresi2dantipedatakeduanilaiekspresisama.
//notidentical $a=1 0;$b='1 0';$c=1 0; echo$a!==$b?'true':'false',"\n";//true echo$a!==$c?'true':'false',"\n";//false

Operatorgreaterthan(>),smallerthan(<),greaterequals(>=),smallerequals(<=)
ekspresi1>ekspresi2 ekspresi1<ekspresi2 ekspresi1<=ekspresi2 ekspresi1>=ekspresi2

Keempatoperatorinimembandingkannilaiekspresi1danekspresi2,operasibarudijalankan setelahmelakukankonversitipejikaekspresi2berbedatipedatadenganekspresi1
$a=1 0;$b=1 1;$c=1 0; echo$a>$b?'true':'false',"\n";//false echo$a<$b?'true':'false',"\n";//true echo$a<=$c?'true':'false',"\n";//true echo$a>=$c?'true':'false',"\n";//true

3.5.5.OperatorLogika 3.5.5.1.LogicalAND
ekspresi1andekspresi2

MenghasilkannilaiTRUEjikaekspresi1danekspresi2keduanyabernilaiTRUE.
//and echo(trueandtrue)?'true':'false',"\n";//TRUE echo(trueandfalse)?'true':'false',"\n";//FALSE echo(falseandfalse)?'true':'false',"\n";//FALSE

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource23

3.5.5.2.LogicalOR
ekspresi1orekspresi2

OperatorORmenghasilkannilaiTRUEjikaadasalahsatudariekspresi1danekspresi2 bernilaiTRUE.
//or echo(trueortrue)?'true':'false',"\n";//TRUE echo(trueorfalse)?'true':'false',"\n";//TRUE echo(falseorfalse)?'true':'false',"\n";//FALSE

3.5.5.3.LogicalXOR
ekspresi1xorekspresi2

OperatorXORmenghasilkannilaiTRUEjikasalahsatudariekspresi1danekspresi2bernilai TRUE,tapitidakkeduaduanya.
//xor echo(truexortrue)?'true':'false',"\n";//FALSE echo(truexorfalse)?'true':'false',"\n";//TRUE echo(falsexorfalse)?'true':'false',"\n";//FALSE

3.5.5.4.LogicalNOT
!ekspresi1

OperatorNOTmenghasilkannilaiTRUEjikaekspresi1bernilaiFALSE,danmenghasilkan nilaiFALSEjikaekspresi1bernilaiTRUE.

3.5.5.5.LogicalAND(&&)
SamadenganoperatorANDsebelumnyatapiprecedencenyalebihtinggi,
//&& echo(true&&true)?'true':'false',"\n";//TRUE echo(true&&false)?'true':'false',"\n";//FALSE echo(false&&false)?'true':'false',"\n";//FALSE

3.5.5.6.LogicalOR(||)
SamadenganoperatorORsebelumnyatapiprecedencenyalebihtinggi.
//|| echo(true||true)?'true':'false',"\n";//TRUE

24PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

echo(true||false)?'true':'false',"\n";//TRUE echo(false||false)?'true':'false',"\n";//FALSE

Operatir||lebihtinggiprecedencenyadarior
echo(truexorfalse||true)?'true':'false',"\n";//FALSE echo(truexorfalseortrue)?'true':'false',"\n";//TRUE

PHPmelakukanoptimasipadaekspresiyangmenggunakanoperatorlogika.Contoh:
ekspresi1&&ekspresi2&&ekspresi3

Padaekspresitersebutjikaekspresi1bernilaiFALSEmakaekspresi2danekspresi3tidak akandieksekusi.Begitujugapadacontohberikut:
ekspresi1||ekspresi2||ekspresi3

Padaekspresitersebutjikaekspresi1bernilaiTRUEmakaekspresi2danekspresi3tidakakan dieksekusi.

3.5.6.Operatorbit
OperatoriniberlakuuntukintegerdankarakterASCII.

3.5.6.1.BitwiseAND
b1&b2 Menghasilkanbityangdisetjikabit1danbit2jugadiset.
//9=1 1 00 //1 0=11 00 echo9&1 0,"\n";//8=1 000

3.5.6.2.BitwiseOR
b1|b2 Menghasilkanbityangdisetjikasalahsatudaribit1danbit2diset
echo9|1 0,"\n";//1 1=11 01

3.5.6.3.BitwiseXOR
b1^b2 Menghasilkanbityangdisetjikasalahsatudaribit1danbit2diset,tapitidakkeduanya.
echo9^1 0,"\n";//3=00 1 1

BitwiseNOT
~b1

Menghasilkanbityangdisetjikab1tidakdiset,dankebalikannya PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource25

Shiftleft(geserbitkekiri)
b1<<n

Menggeserbitb1sebanyaknkekiri. Setiappergeseransatubitsamadengankalikandengan2
echo1 0<<1 ,"\n";//20=11 000

Shiftright(geserbitkekanan)
b1>>n

Menggeserbitb1sebanyaknkekanan. Setiappergeseransatubitsamadenganbagidengan2
echo1 0>>1 ,"\n";//5=00 11

3.5.7.OperatorString
Operatordot(titik)digunakanuntukmenggabungkanstringdenganstringatautipedata lainnya. Contoh:
$a='saya...'; $b='bela jarphp'; $c=$a.$b;//'saya...bela jarphp'

3.6.KendaliAlurProgram 3.6.1.Conditional
Statemenifelseifelsedigunakanuntukmengujibeberapakondisi. Berikutinicontohprogrammembacabilangandaristdin(keyboard),lalumembandingkan denganyangadadiprogram:
$ditebak=123; echo"ayotebak:"; $tebak=chop(fgets(STDIN)); if($tebak==''){ echo("kosong!\n"); }elseif($tebak<$ditebak){ echo("terlalukecil\n"); }elseif($tebak>$ditebak){ echo("terlalubesar\n");

26PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

}else{ echo'benar ...',"\n"; }

3.6.2.switch
Switchdapatdigunakansebagaimanaifelseifelse,tapilebihtepatlagidigunakanuntuk mengevaluasisebuahkondisilalumembandingkanhasilevaluasitersebutdenganliteral integerataustring. Perhatikansetelahswitchdigunakanstatemenbreakuntukmencegahstatemenberikutnya dalamblokswitchdieksekusi:
echo"3rasaeskrim:\n\t1)moka\n\t2)stroberi\n\t3)mengkudu\n"; echo"pilih:"; $pilih=chop(fgets(STDIN)); switch($pilih){ case1: echo"yumyumyum\n"; break; case2: echo"slur p..slur p..\n"; break; case3: echo"yaak ..bleek ..\n"; break; default : echo'tidakada',"\n"; }

3.6.3.Strukturloop
Strukturloopadalahstrukturuntukmelakukaniterasiataupengulanganeksekusisatuatau beberapastatement. PHPmemilikibeberapastrukturloop:for,while,dowhile,foreach. for Menggunakan3blokekspresiyangdieksekusisecaraberbeda:

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource27

1. satukalidiawaleksekusistatemenfor 2. setiapkalidiawalloopdievaluasinilainyauntukmenentukanapakaheksekusiloop berikutnyaakandilakukan 3. setiapkalidiakhirloop

1 echo"hitungfaktorialdari:"; . 2. $n=chop(fgets(STDIN)); 3. $faktorial=1; 4. f or($a=$n;$a>0;$a) 5. { 6. $faktorial*=$a; . } 7 8. echo"$faktorial\n";

Statementfordieksekusidenganlangkahlangkahsebagaiberikut: 1. Padaawaleksekusistatemenfornilai$adisetsamadengan$n(baris4),langkahini hanyadilakukansatukalisaja. 2. Masihdibaris4:diperiksaapakah$amasihlebihbesardari0,jikabenarmakablok formulaidieksekusi(antarabaris5dan7),jikatidakbenarmakaeksekusistatemen forberakhir. 3. Sebelummengulangeksekusiloop,nilai$adikurangi1 4. Kembalikelangkah2. Ketigablokdapatterdirilebihdarisatuekspresi,yangdipisahkanolehkoma(,).Jikablok keduaterdirilebihdarisatuekpresimakablokekspresitersebutdiperlakukansepertihalnya jikakomadigantidenganoperator||(logicaloperatoror).
#pembangkitfibonacci echo"hitungfibonaccisampai:"; $maks=chop(fgets(STDIN)); f or($a=0,$b=1;$b<$maks;$tmp=$a,$a=$b,$b+=$tmp){ echo$b,""; }

Jikaekspresiblokkeduaadalahkosong,makaloopforakandieksekusitanpaberhenti,dan hanyadapatkeluardaridalamblokdenganstatemenbreak.

3.6.3.1.while
Statemenwhiledigunakanuntukmenjalankanpengulanganselamaekspresidalamwhile adalahTRUE. 28PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

Contohpadapenghitungfaktorialjikamenggunakanwhile:
echo"hitungfaktorialdari:"; $a=chop(fgets(STDIN)); $faktorial=1; while($a>0) { $faktorial*=$a; $a; } echo"$faktorial\n";

Pembangkitderetfibonaccimenggunakanstatementwhile:
#pembangkitfibonacci echo"hitungfibonaccisampai:"; $maks=chop(fgets(STDIN)); $a=0;$b=1; while($b<$maks){ echo$b,""; $tmp=$a;$a=$b;$b+=$tmp; }

3.6.3.2.dowhile
Loopdowhiledieksekusiminimumsatukali.Blokdalamloopakandieksekusiselama ekspresiyangdiujidalamwhilebernilaiTRUE.
$ditebak=123; do{ echo"ayotebak:"; $tebak=chop(fgets(STDIN)); if($tebak==''){ echo("kosong!\n"); }elseif($tebak<$ditebak){ echo("terlalukecil\n"); }elseif($tebak>$ditebak){ echo("terlalubesar\n"); }else{ echo'benar ...',"\n";

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource29

} }while($tebak!=$ditebak)

3.6.3.3.break
Statementbreakdigunakandidalamloopuntukmengubahalureksekusisehinggakeluardari looptersebut.Tapijikalooptersebutadadidalamloopyanglain,makaeksekusiberalihke loopluar,tepatsetelahakhirloopdalamtersebut.
1 $ditebak=123; . 2. while(true){#loop1 3. while(true){#loop2 4. echo"ayotebak:"; 5. $tebak=chop(fgets(STDIN)); 6. if($tebak==''){ . echo("kosong!\n"); 7 8. }elseif($tebak<$ditebak){ 9. echo("terlalukecil\n"); 1 0.}elseif($tebak>$ditebak){ 1. echo("terlalubesar\n"); 1 12.}else{ 1 3.echo'benar ...',"\n"; 1 break; 4. 1 5.} 1 }#akhirloop2 6. . echo"lanjut?"; 1 7 1 8.ya=chop(fgets(STDIN)); 1 9.if($ya=='n')break; 20.}#akhirloop1

Perhatikanpadacontohada2loop(dimulaidaribaris2dan3). Perintahbreakpadabaris14hanyamengalihkaneksekusidariloop2keloop1,tapitidak mengeluarkandariloop1.Diperlukanstatemenbreak(baris19)dariloop1untukdapat keluardarilooptersebut.

3.6.3.4.continue
Statemencontinuedigunakanuntukmengubahalureksekusiprogramagarsegera

30PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

menjalankaniterasiberikutnyasehinggastatemenstatemendibawahstatemencontinueini tidakdieksekusi.
$ditebak=123; $min_coba=3; $coba=0; while(true){ $coba++; echo"ayotebak:"; $tebak=chop(fgets(STDIN)); if($tebak==''){ echo("kosong!\n"); }elseif($tebak<$ditebak){ echo("terlalukecil\n"); }elseif($tebak>$ditebak){ echo("terlalubesar\n"); }else{ echo'benar ...',"\n"; break; } if($coba<$min_coba)continue; echo"menyerah?[y/n]:"; $insap=chop(fgets(STDIN)); if($insap=='y') break; else $coba=0; }

3.6.3.5.foreach
Statementforeachdigunakankhususuntukmengiterasiarray,ada2bentuk untukarraydenganindeksintegermulaidari0:
$array=array(1 0,20,30,40,50); f oreach($arrayas$value){ echo$value,"\n"; }

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource31

untukarrayasosiatif:
$hash=array('kode'=>'A123','nama'=>'sususapi','harga'=> 12000,'satuan'=>'liter'); f oreach($hashas$key=>$value){ echo$key,'=>',$value,"\n"; }

3.6.3.6.return
Mengubahalureksekusisehinggabarisbarisberikutnyatidakdijalankanlagi. Jikadigunakandalamfungsistatemenreturndapatdigunakanuntukmengembalikannilaike pemanggilfungsi.

3.6.3.7.Exception
Exceptionadalahobjectyangdigunakanuntukmengubahekselusiprogramketikaterjadi kesalahan(error). Untukmenanganiexceptiondigunakankonstruksibloktrydancatch. Konstruksibloktry{}berisistatemenyangdapatmengakibatkanterjadinyaexception, konstruksicatchterdiriatasbagiandeklarasiobjectexceptionyangditanganidanbagianblok statemenyangmenanganiobjekexceptiontersebut. Untukmengakibatkanexceptionprogrammenggunakanstatementthrow,yangmenjadi parameterdarithrowadalahobjekException. ExceptionbarudikenalpadaPHP5. Contoh:
try{ echo'barisberikutnyaakanmenghasilkanexception',"\n"; thrownewException('errorygdisenga ja'); echo'barisiniakandiabaikan',"\n"; }catch(Exception$e){ echo'adaexception..',$e,"\n"; }

Melaluipenggunaanexceptionsecaratepat,dapatmemudahkanpenangananerror. Exceptionadalahcaraalternatifuntukpensignalanerroryanglebihbaikdaricara konvensionalmenggunakanreturnvalue.Returnvalueseharusnyahanyadigunakanuntuk mengembalikanhasilkomputasi,dantidakpernahmengembalikansignal(kode)error.

32PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

3.7.Fungsi
PHPmengenal3jenisfungsi: 1. FungsiyangmerupakanbagiandariPHP(bultin) Fungsiiniselalutersediauntukdigunakan. 2. Fungsiyangdisediakanolehextensionmodule. Fungsijenisinibarutersediasetelahusermenginstalextensionmoduletertentu. 3. FungsiyangdidefinisikanolehpenggunabahasaPHP(userdefinedfunction) FungsijenisinidibuatsendiriolehpenggunabahasaPHP,barutersediajikadefinisi fungsidimasukkankedalamscopeprogrammelaluistatement:require,include,dan sejenisnya, Fungsiyangdibahaspadabagianiniadalahyangterakhir.

3.7.1.MendefinisikanFungsi
Fungsididefinisikanmenggunakankeywordfunction,diikutinamafungsi. Fungsidapatmenerimanolataulebihparameterfungsidandapatmenghasilkannilai keluaran,dapatpulatidak. Berikutinicontohfungsiyangtidakmenerimaparameterfungsi,dantidakmengembalikan nilai ,hanyamencetakbentukpiramidakestdout:
functionpiramida(){ $t=20; f or($i=$t,$j=0;$i>0;$i,$j++){ echostr_repeat('',$i); echostr_repeat('^',$j*2+1),"\n"; } }

Fungsipiramida,menggunakanfungsibuiltinstr_repeatuntukmenghasilkanstringyangber ulang.
piramida();

PHP5mendukungjumlahparameterfungsiyangpanjangnyatidaktertentu. Berikutinicontohfungsiyangmenghasilkanderetfibonacciyangdikembalikansebagai array,menerimaparameterfungsibilanganmaksimum:


functionfibonacci($max){

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource33

$a=array(1 ); , 1 $i=1; while(true){ $z=$a[$i]+$a[$i1]; echo$z,"\n"; if($z>$max)break; $a[++$i]=$z; } return$a;#mengembalikanarray }

Fungsiinimenerimaparameter$maxuntukmembatasibilanganterbesaryangakan dihasilkan,danmengembalikanderetanbilangandalambentukarray.Berikutcara pemanggilannya:


$deret=fibonacci(1 00); print_r($deret)#cetakarray

3.7.2.NilaiDefaultuntukparameter
Untukparameterfungsibertipeskalar(numerik,string,array,bukanobjek),dapatditentukan nilaidefaultnya,contohmencetakbilanganfibonaccisecararekursif:
functionfibonacci($max,$a=0,$b=1){ if($b<$max){ echo$b,""; fibonacci($max,$b,$b+$a);#rekursi } } fibonacci(1 00);

Parameterdefaultmemudahkanpenggunaanfungsi.

3.7.3.PemanggilanFungsi
Pemanggilanfungsiharusselalumenggunakankurung,baikuntukfungsiyangmenerima parametermaupunyangtidak. Padacontohcontohsebelumnyaechoseringkalidipanggiltanpakurung,halinikarenaecho sesungguhnyabukanlahfungsi,tapiechoadalahlanguageconstruct(sepertihalnyaif,for, while,return)

34PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

3.8.Class
PHPsebagaibahasayangmendukungpemrogramanberorientasiobjek(ObjectOriented Programming)mengenalstrukturclass. Classmemudahkanenkapsulasidatadanreusabilitaskodeprogram. Mendefinisikanclass Classdidefinisikanmenggunakankeywordclassdiikutinamaclassyangbiasanyadiawali denganhurufkapital,badan(implementasi)classdibatasiolehkurungkurawal. Sebuahclassdapatmemilikisatuataulebihmethod,yaitufungsiyangberasosiasidengan classatauobjekdariclasstersebut. Sebuahclassdapatmemilikimethodkhususuntukmenginisialisasikanobjekdariclass tersebutyangdisebutconstructor,constructoradalahmethodpertamadariclassyang dieksekusisebelumnyaobjektersebutdipanggil.Jikaconstructortidakdidefinisikanmaka PHPmenyediakandefaultconstructor. Classdapatmendefinisikanmembervariabel,yaituvariabelyanghanyadapatdiaksesmelalui objectdariclasstersebut.Membervariabeldapatdidefinisikanlangsungdalammethod melaluiobjekkhusus$this. BerikutiniclassVektor:
classVektor{//awaldefinisi /*constructor*/ functionVektor($i,$j){ $this>i=$i;//membervariablei $this>j=$j;//membervariablej } /*@returnvektor*/ functiontambah($v){ returnnewVektor($this>i+$v>i,$this>j+$v>j); } /*@returnvektor*/ functionkali($skalar){ returnnewVektor($this>i*$skalar ,$this>j*$skalar); } /*@returnpanjangvektor*/ functionto_skalar(){ returnsqrt($this>i*$this>i+$this>j*$this>j); } /*methodkhususuntukmerepresentasikansbgstring(hanyadiPHP

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource35

5)*/ function__toString(){ return"($this>i,$this>j)"; } }//akhirdefinisiclass

Untukmengaksesmembervariableataumembermethoddarisebuahclassmelaluiobjeknya makadigunakanoperator->. Objeksebuahclasshanyadapatdiadakanmelaluiconstructorclasstersebut,baiksecara langsungdipanggilmenggunakannewataumelaluimethodlain.


$v1=newVektor(3,4);//objek$v1diadakan $v2=newVektor(7 8);//objek$v2diadakan , $v3=$v1>tambah($v2); echo"$v1+$v2=$v3","\n"; echo$v1>to_skalar(),"\n"; echo'$v3>i==',$v3>i,"\n"; echo'$v3>j==',$v3>j,"\n";

3.9.Reusabilitas
PHPmenyediakankonstruksiuntukmendukungreusabilitaskodeprogramdalambentuk class,fungsi,konstantaatauvariabelglobal. Ada4statemenyangdigunakanuntukreusabilitaskodeprogram

3.9.1.include
Digunakanuntukmemasukkan(toinclude)filekebarisditempatkannyastatemenincludeini, statemenincludememerlukanparameterberupapathkefileyangakandiinclude. Pathdapatberupapathrelatifataupathabsolut.

3.9.2.require
Statemenrequirepersissamadenganincludehanyasajajikafileyangakandimasukkan tidakditemukandapatmenyebabkanfatalerrorsehinggamenghentikaneksekusiprogram. Menggunakanrequirelebihmenjamindisertakannyafileataudefinisifungsiyangdiperlukan.

3.9.3.include_once
Samadenganinclude,tapijikafilesudahpernahdiincludesebelumnyatidakakan 36PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

dimasukkanlagi.

3.9.4.require_once
Samadenganinclude_once,tapijikafileyangdiincludetidakditemukanmenyebabkanfatal error.

3.10.MenggunakanFungsidanClassdanfilelain
Agarsebuahfungsiatausebuahclassdapatdigunakanolehprogrampemanggilyangberbeda, makafungsiatauclasstersebutdisimpandalamfiletersendiri. Statemenrequire_oncesangattepatdigunakanuntukmenyertakandefinisifungsiatau classdarifiletersebut,karenamenjamindefinisifungsiatauclasshanyasatukalidipanggil. MisalclassVektordisimpandalamfileVektor.phpdidalamdirektori:/home/fadhilah/classes, makajikaprogramtestvektor1.phpperlumenggunakanclasstersebut,digunakan require_once:
1 req uire_once('/home/fadhilah/classes/V . ektor php'); . 2. $v1=newVektor(3,4); 3. $v2=newVektor(7 8); , 4. $v3=$v1>tambah($v2); 5. echo"$v1+$v2=$v3","\n"; 6. echo$v1>to_skalar(),"\n"; . echo'$v3>i==',$v3>i,"\n"; 7 8. echo'$v3>j==',$v3>j,"\n";

Dapatjugamengubahinclude_pathdariPHPdenganfungsiset_include_path,baris1 digantikanoleh2barisberikut:
set_include_path(get_include_path()./home/fadhilah/classes/); req uire_once('Vektor php'); .

Keuntunganmenggunakanset_include_pathadalahstatemenrequire_oncetidakperlu menyertakanpathkefilefiletersebut,hanyaperlumenyebutkannamafilenyasaja.

4.AplikasiWeb
BagianinimenjelaskanaspekaspekbahasaPHPyangkhususberhubungandengan pengembanganaplikasiWeb. Agarcontohcontohpadabagianinidapatdijalankan,diperlukanwebserver(misal:apache) yangmendukungaplikasiPHP. CaramensetupapacheagardapatmendukungPHPtidakdijelaskan.

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource37

4.1.MethodGETdanPOST
Aplikasiwebadalahberbasiskaninteraksiantara2program,yangmasingmasingberperan sebagaiclientdanserver. Dalamkonteksbahasanini,serveradalahwebserver(misal:apachehttpd2,apachehttpd1, tomcat,jetty)danclientadalahwebbrowser(misal:mozillafirefox,konqueror,epiphany, opera) Serveradalahprogrampertamayangberjalandanmenyediakanserviceyangdapatdirequest olehclient. Selanjutnyaclientberjalan,danmengirimkanrequestkepadaserver,servermenerimadan memprosesrequesttersebutdanmenghasilkanresponse. Clientmenerimaresponsedanmerepresentasikanresponsetersebutkepengguna. Webrequestdapatdikirimkandalam2method(cara)GETdanPOST. MethodGETdigunakanapabilaoperasiyangdiharapkanterjadidisisiserver,akibatadanya requestini,tidakakanmengakibatkanperubahan(padadataatausumberdata). MethodPOSTdigunakanapabilaoperasiyangdiharapkanterjadidisisiserver,akibatadanya requestini,akanmengakibatkanperubahan(padadataatausumberdata). Webrequestdapatmemilikiparameter,yangdiperlakukanolehaplikasisebagaidatastring. PadamethodGET,parametertersebutdikirimkansebagaibagiandariURL,danpanjang parameterdibatasiolehpanjangmaksimumURL. PadamethodPOST,parametertersebutdikirimkandalambodyrequest.Panjangparameter tidakterbatas.

4.2.Menanganirequest
AplikasiPHPyangbaik,dirancanguntukmenanganirequestdenganbenar.Menangani requestterdiriatas: membacadatadarirequestsebagaimasukan,termasukparameterrequest. Melakukanprosesuntukmenghasilkankeluaranberdasarkandatarequest mengirimkanresponse

4.2.1.RequestGET
PadaaplikasiPHP,parameterdarirequestGETdapatdiaksesmenggunakanvariabelkhusus $_GETyangsudahdidefinisikanolehPHP. Variabel$_GETiniadalaharrayassosiatif,semuavalueharusdiaksesmenggunakankey.

4.2.2.RequestPOST
ParameterdarirequestPOSTdiaksesmenggunakanvariabel$_POST. 38PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

Sepertihalnya$_GET,variabelinijugaarrayassosiatif. Contohaplikasiwebsederhana: Berikutinicontohaplikasiwebsederhanayangmenerapkanberbagaisubyekyangsudah dibahas.

4.3.PenjelasanProgram 4.3.1.Filehead.php
Berisiheaderuntuksetiaphalamanweb,agartampilankonsisten. Headerjugacocokuntukmenempatkanincludekefilefileyangmenyediakanclassclassatau fungsifungsiyangdiperlukanolehaplikasi.
<?php define("PEMILIK","IrfanMahdi"); req uire_once("ordersvc.php"); ?> <html><body> <h1>WarungWeb</h1>

4.3.2.Fileordersvc.php
Fileiniberisidefinisiclassyangdiperlakukanaplikasiuntukmemprosespesanan.
<?php classOrderSer vice{ private$produk=array('0 1'=>'Gadogado','02'=>'BakmiA yam', '03'=>'T ongSeng'); private$pilihan=array( '0 1'=>array( 'cabe&gt 0','banyaksayuran','ketupat','nasi' ;1 ), '02'=>array( 'pangsitkering','pangsitbasah','bakso' ), '03'=>array( 'banyaktulang','banyakdaging','banyakkuah' ) ); //constructor functionOrderSer vice(){

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource39

} //@returndaftarproduk functionproduk(){ return$this>produk; } //@returnpilihan functionpilihan($prod){ return$this>pilihan[$prod]; } //prosespesanan functionproses_pesanan($prod,$kirimke,$konfig) { echo'T erimakasih,',"\n"; echo"Kamisegeramengirimkanpesananke<em>$kirimke</em>, kalaukebetulanlewat..<br/>\n"; if($konfig){ echo'<ul>'; f oreach($konfigas$d){ echo'<li>',$this>pilihan[$prod][$d],"</li>\n"; } echo'</ul>'; }else{ echo"Andamemilihmenustandard<br>\n"; } } } ?>

4.3.3.Filemenu.php
Menampilkanmenupilihan:
<?php include('head.php') ?> Selamatdatangdiwarung<em><?phpechoPEMILIK?></em><br/> Apayangandainginkan:

40PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

<ol> <?php $os=newOrderSer vice(); f oreach($os>produk()as$key=>$value){ echo'<li><a href="pesan.php?prod=',$key ,'">',$value,'</li>',"\n"; } ?> </ol> <?php include('tail.php'); ?>

4.3.4.Filepesan.php
Untukmemprosespesanan,danmenampilkanresponse. Jikapesanansudahdiprosesformtidakditampilkanlagi
<?php include('head.php'); $os=newOrderSer vice(); if(!empty($_POST)){ $konfig=$_POST['konfig']; $kirimke=$_POST['kirimke']; $prod=$_POST['prod']; if(empty($kirimke)){ echo"maudikirimkemana?\n"; } else { $os>proses_pesanan($prod,$kirimke,$konfig); $sudahpesan=true; } } if(!$sudahpesan){

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource41

?> <f mmethod="post"> or <tablesty le="border :1pxsolid;padding:1 0px1 0px1 0px1 0px; backgroundcolor :lightgreen;"> <tr><td> Konfigurasi</td><td> <?php $prod=$_GET['prod']; $options=$os>pilihan($prod); $i=0; f oreach($optionsas$value){ echo'<inputtype="checkbox"name="konfig[]"value="', $i++,'">',$value,"</option>\n"; } ?> </td> <tr><td>kirimkealamat</td><td> <inputtype="text"name="kirimke"value=""></td> <tr><tdcolspan="2"> <inputtype="submit"name="ok"value="Pesan"> </td></tr> <inputtype="hidden"name="prod"value="<?phpecho$prod;?>"></td> </f m> or <?php } include('tail.php'); ?>

5.Penutup
PHPadalahbahasapemrogramanyangrelatifmudahdipelajari. PHPsaatiniadalahbahasapemrogramanwebpalingpopuler,sehinggadukunganlibrary untukaplikasiwebdenganPHPcukupkaya. Jikaandabarumulaimengembangkanaplikasiwebpastikanandalebihdahulumenguasai 42PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

HTML(HypertextMarkUpLanguage)dangunakanHTMLeditordanprevieweryangcerdas sehinggamembantudalammenemukankesalahankesalahansintakspenulisan.

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource43

44PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

III.MengenalPython
1.ApaituPython
Pythonadalahbahasapemrogramanyanginterpreted.Programpythondapatlangsung dieksekusimenggunakaninterpreter,tanpamelaluiproseskompilasitersendiri. Pythontelahdigunakanuntukberbagaiaplikasi,mulaidariutilitasuntukadministrasisistem, pemrogramangame,aplikasiwebterintegrasidengandatabasesampaiaplikasidesktop berbasisGraphicalUserInterface. Pythonadalahbahasatingkatlebihtinggi,lebihtinggidariC/C++,memilikistrukturdata builtindengankemampuanoperasiyangkayadanluwes,sehinggamemungkinkanprogram PythonlebihringkasdaripadajikaditulisdenganC/C++ataubahkanJava. Pythonadalahbahasayangmodular,setiapprogrampythonadalahmodule,yangdapat diimportolehprogramlainuntukdimanfaatkanobjekataufungsinya. Librarypythonsangatextensible,bagiandayangmenguasaipemrogramanC,tidaksulit untukmenambahfungsibaruataumodulekedalamlibrarypython.

2.MenjalankanInterpreterPython
Setelahinterpreterpythonterinstal,makadapatdijalankandengancaracaraberikutini: 1. Melaluishell,biasanyauntukmenjalankan1statemenpython:
bash$ python -c "print 'assalamu\'alaikum'"

2. eksekusistatemensecarainteraktif,menggunakanpythonsebagaimanashellsistem, setiapstatemendiketikpadapythonshellprompt,danlangsungdieksekusioleh interpreter,


bash$python >>>printassalamu'alaikum assalamu'alaikum >>>60*60*2 4 86400

Padatulisanini,beberapacontohdiberikandalammodeeksekusiinteraktif,baris contohtersebutdiawalidengan'>>>' 3. Menggunakanprogramatauscriptpython. Buatprogramsalam.py,sepertiberikut:


#!/usr/local/bin/python printassalamu'alaikum

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource45

1. Perhatikanbarispertamamengacukepathinterpreterpython,dijalankansebagai berikut:
bash$ chmod 755 salam.py bash$ ./salam.py

3.ProgramPython
ProgrampythonadalahprogramteksdenganencodingASCII,dandapatjugaditulisdengan encodinglain(misal:Unicode).PenulisanidentiferharusmenggunakanASCII.

4.Statemen
Statemendiakhiridenganbarisbaru,tapistatemendapatmelintasbarisjikainterpreter menganggapstatementersebutbelumsempurna. Tidakperlukarakterkhususuntukmengakhiristatemen. Pythonmemperlakukanindentasidiawalbarissecarakhusus,indentasidigunakansebagai penandablokstatemen.Padabagiantentangkendalialurprogramhaliniakandibahaslebih lanjut.

5.Komentar
Setiapbariskomentarharusdiawalidengan'#'.Komentartidakharusselaludiawalbaris. Contoh:
#rumusluaslingkaran #inikomentarbariskedua luas=22/7*1 4*1 4 sisa=1 06%3#menghitungsisapembagian

6.Objekdanvariabel
Objekadalahabstraksidata,setiapdatadalampythondiwakiliolehobjekatauolehrelasi antaraobjek. Setiapobjekmemilikiidyangunikdantidakberubah,idobjekdapatdiketahuimenggunakan fungsiid().Operatorisdapatdigunakanuntukmembandingkanidentitasobjek. Objectmemilikitipedannilai.Tipesebuahobjekdapatdiketahuimenggunakanfungsi type(),tipesebuahobjekjugatidakdapatdiubah. Variabeladalahreferensikeobjek,variabelmereferensikanobjeksetelahmelaluiassignment.

46PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

printtype(123)#123adalahobjek v1=123#assignment :variabelsebagairef erensikeobjek printtype(v1)#tipev1adalahtipeobjekygdiref erensikan printid(v1)#idobjek printv1#mencetaknilaiobjekyangdiref erensikanolehv1

Variabeldapatlangsungdiassigntanpadideklarasikanterlebihdahulu,ekspresiyang mengacukesebuahvariabelsebelumvariabeltersebutdiassignmenyebabkanerror.
a=1 00 printid(a) b=a printaisb#adanbmengacukeobjekyangsama del(a)#dimusnahkan #printaisb#menyebabkanerror ,atidakdidefinisikan printb#bdanobjekyangdiref erensikanmasihada printid(b)

Setelahassignment,sebuahvariabeldapatdimusnahkandenganfungsidel(), jikasebuah ekspresimencobamengacuvariabelyangsudahdidel()akanmenyebabkanerror. Variabeldapatdiassignkeobjekkhususyangmerepresentasikanketiadaan,yaituNone.

7.Tipedata,literaldanoperasi
Objekdibedakantipedatanyakarenasetiaptipedatamemilikioperasioperasitersendiri. Bagianinimenjelaskanberbagaitipedatadanoperasiyangberasosiasidengantipedata tersebut.

7.1.Bilangan
Pythonmendukungbilanganinteger,longintegerdanfloatingpoint. Penulisanliteralbilanganbulatdapatdenganinteger,longinteger,dankeduanyadapatditulis dalambasisoctal,desimaldanheksadesimal. Penulisanliteralfloatmenggunakantanda'.'(titik)desimal.
24 148364 7 7#integerterbesaruntuk32bitarithmetic 24 1483648L#long 7 0 1234567#octal 0x1234567 89abcdef#hexadecimal

Operasiaritmetikaantaraintegerdenganinteger,selalumenghasilkaninteger,operasiinteger

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource47

denganfloatakanmenghasilkandatafloat.Contoh:
>>>22/7*2 1*2 1#integerdaninteger 1 323 >>>22/70*2 . 1*2 1#integerdanfloat 1 386.0

Bilangandipythonadalahfirstclassobject,yangmemilikioperasioperasinyasendiri, contoh:
bil=1234 bil.__mod__(7) #samadengan bil%7

7.2.StringdanUnicodeString
SelainbilanganpythonjugadapatmemanipulasidataStringdenganpengkodeanASCII maupunUnicode. Penulisanstringliteralmenggunakanpetiktunggalataupetikganda.Pythontidak membedakankeduacaratersebut.Keduacarapenulisanmengenalkarakterkhususseperti barisbaru'\n'dantab'\t',penulisanliteralkarakterasciimenggunakanoctaldandecimaljuga didukung. Untukmenulisstringtanpapengenalankarakterkhusus,digunakanprefix'r'didepan string.
print'Assalamu\'alaikum' printWa'alaikumsalaam print'sayabilangPythonkeren' printsayabilang'Pythonasyik' print'barissatu\n bariskedua' print'barissatu\x 0A bariskedua' print'barissatu\012bariskedua' #rawstring printr'barissatu\n dibarissatujuga'

Python,sejakversi2.0sudahmengenalstringunicode,untukmendukunginternationalization (i18n). Penulisanstringunicodemenggunakanprefix'u',untukmenuliskanstringtanpa penerjemahankarakterkhususdigunakanprefix'ur'.


printu'barissatu\n bariskedua'

48PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

printu'barissatu\u0 00 Abariskedua' #unicoderawstring printur'barissatu\u000A bariskedua'

7.3.Boolean
Tipedatabooleanhanyamemiliki2nilai:TruedanFalse.BahkanhanyaTruedanFalse sajalahobjectyangadaditipedataBoolean.

7.4.Tipedatacontainer
Tipedatacontaineradalahtipedatayangdapatmenyimpanreferensikeobjeklainsebagai valuenya. Pythonmemilikitipedatacontaineryangbuiltin. Tipedatacontainerdalampythondapatmenyimpandatayangtipenyaberbedabeda.Bahkan datacontainerdipythondapatmemilikielemenberupadatacontainerjuga.

7.4.1.List
Listadalahhimpunanyangelemennyatersimpansecaraberurutan,sebuahlistdapatditambah elemenbaru,dikurangielemennya,ataudiubahnilaisetiapelemennya,listadalahsequence yangmutable.Elemenlistdiacumenggunakanindeksinteger. Listliteraldidefinisikanmenggunakan[]
[1 ,2,3,4,5,6,7 8] , [1 ,'senin',2,'selasa',3,'rabu'] [1 ,[2,3],4,5,[6,7 8,[9, 1 , 1 1]]] 0,

Berikutinibeberapaoperasiyangdapatdilakukanterhadaplist: add,remove,slice,del Perhatikanbahwalistmelakukanpengecekanindexrange,padaoperasibacamaupuntulis:

7.4.2.Tuples
Berbedadenganlist,makatuplesadalahsequenceyangimmutable.Persamaannyadenganlist adalahelemenelementuplesjugadiacumenggunakanindeksinteger. Tupledidefinisikanmenggunakan(),contoh:
(1 ,2,3,4,5,6,7 8) ,

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource49

(1 ,'senin',2,'selasa',3,'rabu') (1 ,(2,3),4,5,(6,7 8,(9, 1 , 1 1))) 0,

Berikutinibeberapaoperasiyangdapatdilakukanterhadaptupe: slice,packing,unpacking,butyoucan'tdel Sebagaimanalist,tuplesjugamelakukanpengecekanrangeindex.

7.4.3.Sets
Setadalahdatakontaineryangtidakberurutan(unordered)yangtidakmengandungduplikasi padaelemenelemennya. Setmemilikioperasiuntukpengecekanmembership,jugaoperasihimpunansepertiunion, intersection,dansymmetricdifference

7.4.4.Dictionary
Berbedadengankeduadatacontainersebelumnya,dictionarydiindeksmenggunakan key.Keyyangdigunakanharusdatayangimmutable.Jadistring,number,tupleyangtidak memilikivalueyangmutable,dapatdigunakansebagaikey.
d1={'kode':'000 1','nama':'SusuSapi','harga':12000,'stok': 12} printd1['kode']

Mengacukedictionarymenggunakankeyyangbelumdidefinisikanakanmenyebabkanerror, direpresentasikanolehexceptionKeyError,contoh:
printd1['satuan']#KeyError

8.Ekspresidanoperasi
8.1.EkspresiAtom
Atomadalahekspresipalingdasardalampython.Yangtermasukekspresiatomada3jenis:

8.1.1.Identifier
Identifieradalahnamayangmerupakanekspresiatom.Contohnyaadalahnamavariabel, namafungsi,namaclass,namamodule. Sebuahnamayangtelahdiasosiasikan(bound)denganobjek,jikadievaluasiakan menghasilkanobjektersebut,namayangbelumdiasosiasikan(unbound)denganobjekakan menghasilkanerrorNameErrorjikadievaluasi. Karakterpenyusunidentifierdalampythondapatterdiriataskombinasidarihurufbesardan kecil(azAZ),angka(09)dangarisbawah(underscore). 50PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

Pythonmembedakanhurufbesardankecilpadaidentifier. Panjangidentifieradalahtakterbatas

8.1.2.Literal
Pythonmendukungberbagailiteralstringdannumerik.Padabagiantypedatatelah diperkenalkanberbagaipenulisandatanumerikdanstringsecaraliteral.

8.1.3.Enclosure
Enclosureadalahbentukbentukekspresiyangdibatasiolehreversequote(tandapetik terbalik`),tandakurung,kurungsiku,dankurungkurawal.Berikutinibentukekspresiyang termasukenclosure: 1. Bentukandalamkurung(Parenthesizedforms) 2. Listdisplay 3. Generatorexpressions 4. Dictionarydisplay 5. Konversistring

8.1.3.1.BentukandalamKurung(Parenthesizedforms)
Bentukandalamkurungadalahlistekspresiyangopsionalditempatkandalamkurung(). Jikaberisisedikitnyasatukoma,akanmembentuktuple,jikatidakmengandungkomaakan membentukekspresitunggal.Contoh:
(1+2)#ekspresitunggal(atom) (1+2,)#tuples

8.1.3.2.Listdisplay
Ekspresilistdisplayakanmembentukobjeklistyangbaru.Ekspresilistdapatdibentuk menggunakanlistdariekspresiyangdipisahkankomaataudarisebuahlistcomprehension.
[1+2,3<4,5*6+7 8,9!=1 , 0]#commaseparatedexpression [a*2f orainrange(1 0)]#listcomprehension [af orainrange(20)ifa%3==0]#listcomprehension

8.1.3.3.Generatorexpressions
Generatorekspresionmenghasilkangeneratorobjek. Generatorekpressionadalahnotasigeneratordalamtandakurung().
(bf orbinrange(20))#generatorbilang0s/d1 9

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource51

(bf orbinrange(20)if(b%3==0andb>0))#generatorbilangan kelipatantiga (bf orbinrange(20)if(b%3==0)).next()#3

8.1.3.4.Dictionarydisplay
Dictionarydisplayadalahekspresiyangmenghasilkanobjekdictionarybaru.
{'python':'GUIapp','php':'webapp','java':'mobileapp','ruby':'web app'}

8.1.3.5.KonversiString
Konversikestringadalahekspresimenggunakantandakutiptunggalterbalik(reversequote). Yangmengubahekspresidaritipedatalainkestring.
`('a','b','c')` `[1 ,2,3,('a','b','c')]` `1+2+3`#6

8.2.EkspresiPrimer(Primaries)
Ekspresiprimeradalahekspresiyangmewakilioperasioperasiyangpalingmengikatdalam python.Meliputi: 1. EkspresiAtom(dibahaspadabagiansebelumnya), 2. Referensiatribut 3. Subskrip(subscription) 4. Slicing 5. pemanggilancallableobject(calls)

8.2.1.ReferensiAtribut(AttributeReference)
Referensiatributadalahekspresiyangmengacukepadaatributobjek.Contoh:
objek1 .atribut1

Padaekspresireferensiatribut,objekharusmendukungattributeyangdiacu,jikatidakmaka akanmenimbulkanAttributeError.Atributyangdirerensikandapatberupaobjekyang memilikiatributjuga,contoh:


objek2.atribut1 .atribut2

8.2.2.Subskrip
Ekspresisubskripberlakupadaobjeksequence(list,tuple,string)ataumapping(dictionary). 52PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

Subkripmenggunakan[]setelahobjek.
objek1[ekspresi1]

Jikaobjekbertipesequence,makaekspresi1haruslahinteger.Ekspresidalamsubskrippada objeksequencedapatberupabilangannegatif,untukpengindeksandaribelakang.Contoh:
list1=[5,1 ,8,1 1 6,7 0] list1[3]#bilangan8 string2='bismillah' string[3]#'m' string[6]#m tuple3=('hati','damai','ingat','ALLAH') tuple[3]#ALLAH tuple[1]#ALLAH

Untukobjekbertipemapping,ekspresiindeksharuslahsesuatuyangdapatdihash(hashable) dantidakdapatdiubah(immutable).
dict4={'python':'GUIapp','php':'webapp','java':'mobile app','ruby':'webapp'} dict4['python']#'GUIapp' dict4['java']#'mobileapp'

8.2.3.Irisan(Slicing)
ExpresislicingterdiriatasSimpleSlicingdanExtendedslicing. Ekspresisimpleslicingdigunakanpadaobjeksequence(atauekspresiyangmenghasilkan objeksequence)danmenghasilkanobjeksequencebaru.Berikutinicontohnya:
list1=[1 ,2,3,4,5,6,7 8,9] , list1[1:]#listbarudari2sampaidengan9 list1[1:5]#listbarudari2sampaidengan5 list1[:1]#listbarudari1sampaidengan8 list1[1:2]#listbarudari2sampaidengan7

Ekspresiextendslicing,digunakanpadaobjekmappingmenggunakantuplesebagaikey, contoh:
b={'a':1 ,'b':2,'c':3,'d':4,('e','f'):5,('g','h'):6,'h':7 'i':8} , print'e,f',b['e','f'] print'g,h',b['g','h']

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource53

8.2.4.Pemanggilancallable(calls)
Ekspresiinimemanggilcallableobjek(misalnyafungsi),denganmenggunakannolatau beberapaargumen. Yangdimaksudcallableobjekadalah:userdefinedfunctions,builtinfunctions,methoddari builtinobjects,classobjects,methodsofclassinstances,danbeberapaclassinstancessendiri adalahcallable. Argumendapatberupapositionalataukeywordargument. Semuaekspresipadaargumendievaluasisebelumnyapemanggilandilakukan.

8.3.OperasiPangkat
Operasipangkatberasosiasilebihkuatdarioperatorunarydisebelahkirinya,danberasosiasi lebihlemahdarioperatorunarydisebelahkanannya.Contoh:
2**2#4 2**2#4 (2)**2#4 (2)**3#8 2**2#0.25 2**2**3#256=2**8 2**2**2#0.0625=2**4=1/2**4 1 6**2**2#0.5=1 6**0.25=1/1 6**0.25

8.4.Operasiaritmetikaunary
Semuaoperasiunaryaritmetikadanbinermemilikiprioritasyangsama,terdiriatas: minus(),plus(+)danbitwiseinversion(~).

8.5.Operasiaritmetikabiner
Operasibinermeliputi:

8.5.1.Perkalian
Perkalian(*)memerlukanargumenbilangankeduanyaataujikasalahsatunyaintegermaka yanglainnyaharussequence.
2*3#6

54PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

3*'sip'#sipsipsip 3*(1 ,2,3)#(1 ,2,3, 1 ,2,3)

8.5.2.Pembagian
Terdiriatas'/'(division)dan'//'(floordivision). Floordivisionmengenakanfloor()padahasilpembagian.
#division 22/7*1 4#588 4*1 22./7*1 4#66.0 4*1 1 1/2*3*4#0 1 ./2*3*4#6.0 22./7#3. 1 4285 1 74286 22.//7#3.0

8.5.3.Modulus(%)
Menghitungsisahasilbagi.Operator%jugadioverloaduntukmelakukanpengformatan string,contoh:
22%7#1 '%dekor%s'%(3,'ayam')

8.5.4.Penjumlahan
Menjumlahkanbilangandanmenggabungkanconcatsequence.
22+1 0 'bela jar'+'python'

8.5.5.Pengurangan
Operatorinimenghitungselisihuntukbilangan.
221 0

8.6.OperasiPergeseran(shifting)
Operasishiftbitinimenerimaduaargumenbilanganintegerataulong,untukargumendikiri haruspositip. Argumendikananoperatoradalahbilanganyangdigeserbitnyadenganjumlahpergeseranbit sebesarnilaiargumendikiri. PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource55

MelakukanNpergeserankekanan(>>)samadenganmembagibilangandenganNpangkat2. MelakukanNpergeserankekiri(<<)samadenganmengalikanbilangandenganNpangkat 2.
4>>1#2=biner1 00shiftleft1>00 1 4<<1#8=biner1 00shiftright1>1 000 7>>1#3=biner1 1shiftleft1>0 1 1 1 7<<1#1 4=biner1 1shiftright1>1 1 1 10

8.7.OperasiBitBiner(binarybitwise)
OperasiinimeliputiAND,ORdanXOR,yangberoperasibitperbit. OperatorANDakanmensetbitjikadanhanyajikakeduabitdiset
1 5&8#8 3 1&8#8

OperatorORakanmensetbitjikasalahsatudarikeduabitdiset
1 5|8#1 5 3 1|8#3 1

OperatorXORakanmensetbitjikadanhanyajikasalahsatubitdiset.Urutanprecedence diamtaraketiganyamulaidariyangtertinggi:AND,XORdanOR
1 5^8#7=1 1 1 1^1 000=>0 1 1 1 1 5^1 5&8#7=1 1 1 1^1 000=>01 1 1 (1 5^1 5)&8#7=0&1 000=>0

8.8.OperasiPerbandingan(comparison)
OperasiperbandinganmenghasilkannilaibooleanTruedanFalse. Terdiriatas: Operator > < >= <= == Lebihbesardari Kurangdari Lebihdariatausamadengan Kurangdariatausamadengan Samadengan Deskripsi

56PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

!=atau<> is isnot in notin

Tidaksamadengan Samadenganidentitasobjek Tidaksamadenganidentitasobjek Bagiandari Bukanbagiandari

8.9.OperasiBoolean
OperasibooleanmengevaluasiekspresiberdasarkannilaiTruedanFalsedariekspresi,python mengenalaturanberikutiniuntukdefinisitentangtruedanfalse: NilaiFalse, None,numerik0untuksemuatipedata,danstringkosongdancontainer kosongadalahfalse,sedangkannilailainnyaadalahtrue. PerhatikanbahwadibedakanmenuliskanTruedengantruedanFalsedenganfalse,Truedan FalseadalahobjekatauinstancedaritipeBoolean,sedangkantruedanfalseadalahnilai abstrakyangdikenaldalamoperasiboolean. Ada4operasiboolean:
ekspresi1ifekspresi2elseekspresi3

Operasiinimengevaluasiekspresi2,jikabernilaitruemakamenghasilkanekspresi1,danjika ekspresi2bernilaifalsemenghasilkanekspresi3 and


ekspresi1andekspresi2

Operasiinimenghasilkantruejikaekspresi1danekspresi2keduanyabernilaitrue xor
ekspresi1xorekspresi2

Operasiinimenghasilkantruejikadanhanyajikasalahsatudariekspresi1danekspresi2 bernilaitrue or Operasiinimenghasilkantruejikasalahsatudariekspresi1danekspresi2bernilaitrue


ekspresi1orekspresi2

8.10.Lambda
Lambdaadalahekspresiyangmenghasilkanfungsianonim. PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource57

Fungsianonimtersebuttidakbolehberisistatemen,hanyaekspresi.
defpangkat(a): returnlambdab:a**b fa=pangkat(2) fa(2)#2pangkat2 fa(3)#2pangkat3 fa(4)#2pangkat4 fb=pangkat(3) fb(2)#3pangkat2 fb(3)#3pangkat3 fb(4)#3pangkat4

8.11.EkspresiLists
Ekspresilistterdiridarisatuataulebihekspresiyangdipisahkandengankoma. Ekspresilistdengansekurangnyasatukomadibelakangmenghasilkantuple.Contoh
a,b,c=1 ,2,3#a,b,cadalahekspresilist x=1 ,#xadalahtupledengan1elemen y=1#yBUKANtuple,yadalahvariabelinteger z=()#zadalahtuplekosong

9.Fungsi
Fungsidigunakanuntukmengenkapsulasikanoperasi. Fungsipythondidefinisikanmenggunakankeyworddefdiikutinamafungsi,selanjutnya fungsidapatmenerimanolataulebihparameter. Fungsidapatmengembalikanobjek(yangbukanNone)ataudapatmengembalikanNone. Pengembalianobjek(yangbukanNone)menggunakanstatementreturn.
#mendefinisikanfungsi #tidakmenerimaparam,returnNone defsalam(): print"Assalamu'alaikum"

58PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

#menerimaparam,returnNone defsalam1(m): print"Assalamu'alaikum"+m #tidakmenerimaparam,returnstring defsalam2(): return"Assalamu'alaikum" #menerimaparam,returnstring defsalam3(m): returnsalam2()+m#fungsidapatmemanggilfungsilain #pemanggilanfungsi salam() salam1('fadhilah') printsalam2() printsalam3('irfan')

Parameterfungsidapatmemilikinilaidefault,padacontohberikutberikutiniadanb memilikinilaidefaultmasingmasing0dan1:
#generatorbilanganfibonacciygkurangdarin,denganrekursi deffibonacci(n,a=0,b=1): ifb<n: printb,#cetaktanpagantibaris fibonacci(n,b,a+b) #panggilfungsi fibonacci(1 00)

10.StatemenKendaliAlur
10.1.Statemenif
Statemenifdigunakanuntukpencabanganeksekusistatemenataublokstatemenberdasarkan kondisiyangbernilaiTrueatauFalse.Untukpencabanganalternatifdarikondisipertama digunakankeywordelif,danuntukpencabanganalternatifterakhirdigunakanelse. PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource59

Pencabanganmenggunakanelifdapatlebihdarisatu.
importsys print'tebakinteger :', ditebak=67 #bacastdin1baris,potongwhitespacedepan&belakang, #lalukonversistringkeinteger a=int(sys.stdin.readline().strip()) ifditebak<a: print'terlalubesar' elifditebak>a: print'terlalukecil' else: print'pasbenar ...'

10.2.while
UntukmelakukanpengulanganselamaekspresidiwhilebernilaiTrue. Contoh:
importsys print'tebakintegersampaiketemu:', ditebak=67 a=int(sys.stdin.readline().strip()) whilea!=ditebak: ifditebak<a: print'terlalubesar' elifditebak>a: print'terlalukecil' print'tebaklagi:', a=int(sys.stdin.readline().strip()) print'pasbenar ...'

Untukkeluardariwhileloopdapatmenggunakanbreak,untukmelanjutkanlooptanpa mengeksekusistatemenberikutnyadigunakancontinue:
importsys

60PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

ditebak=67 minimum_coba=3 coba=0 whileT rue: coba+=1 print'tebakinteger :', a=int(sys.stdin.readline().strip()) ifditebak<a: print'terlalubesar' ifcoba<minimum_coba:continue elifditebak>a: print'terlalukecil' ifcoba<minimum_coba:continue else: print'pass' break print'menyerah?[y/n]:', nyerah=sys.stdin.readline().strip() ifnyerah=='y': break else: coba=0

10.3.for
Digunakanuntukmengiterasisequences(tuples,list,string):
stooges='timbul','kadir','doyox' f orguyoninstooges: printguyon

10.4.pass
Statemeninitidakmelakukanapapun,digunakanuntukmengisiblokprogramagarbenar secarasintaks. PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource61

10.5.exceptions
Pythonmengenalmekanismeyangelegandalammenanganierrorpadaprogram,yaitu menggunakanexception. Penangananexceptionterdiriatas2blok:trydancatch. Bloktryberisistatement(statement)yangdapatmengakibatkanterjadinyaerroratau exception. Jikasatustatementdalamblokmengakibatkanexceptionmakastatemenstatemenberikutnya tidakakandieksekusi,alurprogramsegeraberalihkeblokcatch. Blockcatchberisistatement(statemen)yangakanmenanganiexception. Contohberikutinimenganganiexceptionjikapenggunamenekanctrlcyangmenyebabkan exceptionKeyboardInterrupt:
importsys print'tebakintegersampaiketemu:', ditebak=67 tr y : a=int(sys.stdin.readline().strip()) whilea!=ditebak: ifditebak<a: print'terlalubesar' elifditebak>a: print'terlalukecil' print'tebaklagi:', a=int(sys.stdin.readline().strip()) print'pasbenar ...' exceptKeyb oar dIn ter r upt : print'\nhmm..menyerah?\n\ \rsmogalebihlainkalilebihberuntung,bye!'

11.Modules
Modulememudahkanpemakaianulangberbagaisumberdayaprogram(fungsi,class, variabel),danmenyediakannamespaceuntukmenghindarikonflikpenamaan.Sebuahmodule 62PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

dapatberisibeberapafungsiataubeberapaclass.

11.1.MendefinisikanModule
Sebagaicontoh,pembangkitbilanganfibonacciingindisimpansebagaifungsidalammodule pembangkit.Yangdiperlukanadalahmendefinisikanfungsitersebutdalamfile pembangkit.py.
#modulepembangkitfibonacci #returnlistbilanganfibonacci deffibonacci(n,a=0,b=1 ,hasil=None): ifhasil==None:hasil=[] ifb<n: hasil.append(b) fibonacci(n,b,a+b,hasil) returnhasil

Perhatikanbahwatidakadastatementdiluardefinisifungsidalamfilepembangkit.py.

11.2.MenggunakanModule
Berikutiniadalahprogramfib.py,yangmenggunakanmodulepembangkit. Programinimenggunakanstatementimport,sehinggafungsifibonacci()dapatdiakses melaluiobjectpembangkit.Perhatikanbahwanamaobjectyangdiimportsamadengannama filemodule.
importpembangkit f orxinpembangkit.fibonacci(1 00): printx,

11.3.Modulesearchpath
Secarapraktismodulemoduleditempatkandalamdirektoriterpisahdariprogrampengguna modul. Sebagaicontohmodulepembangkit.pydisimpandalamdirektori/home/hafizh/modulku. Supayaprogramfib.pydapatmenemukanmodulepembangkit,direktori /home/hafizh/modulkuharusdimasukkandalammodulesearchpath. SalahsatuyangtermasukmodulesearchpathadalahenvironmentvariablePYTHONPATH. DirektoritempatmoduleharusmasukkePYTHONPATH:
exportPYTHONP ATH=/home/hafizh/modulku:$PYTHONP ATH

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource63

pythonfib.py

Yangjugatermasukmodulesearchpathadalahlistsys.path,dapatdigunakanjikatidak mungkinmendefinisikanPYTHONPATH. Programpemanggildiubahsebagaiberikut:


importsys sys.path.append('/home/hafizh/modulku') importpembangkit f orxinpembangkit.fibonacci(1 00): printx,

12.Class
Classdidefinisikanmenggunakankeywordclass. Dalamclassdapatdidefinisikanmethodatauoperator.Padaclassinididefinisikan constructor,operator+,operator,methoduntukmenampilkanrepresentasistring,dan menghitungbesarvektor. Pythonmengenalnamanamamethodkhususyangdapatdigunakanuntuk mengimplementasikanoperatorbagiclasstersebut. Dalamcontohinimethodkhususyangdiimplementasikanadalah__add__untukoperator+, __sub__untukoperator
classVektor : #constructor def__init__(self,x,y ,z): self.x,self.y ,self.z=x,y ,z #menghitungbesarvektor defto_skalar(self): importmath returnmath.sqrt(self.x*self.x+self.y*self.y+self.z *self.z) #operator+ def__add__(self,v): returnVektor(self.x+v x,self.y+v y . . ,self.z+v z) . #operator def__sub__(self,v):

64PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

returnVektor(self.xv x,self.yv y . . ,self.zv z) . #representasistring def__repr__(self): return'(%d,%d,%d)'%(self.x,self.y ,self.z)

Berikutiniprogrampemakaiclasstersebut:
fromvektorimportVektor a=Vektor(1 ,2,3) b=Vektor(4,5,6) c=a+b print'%s+%s=%s'%(a,b,c) print'besarc:%.2f'%c.to_skalar() c=ab print'%s%s=%s'%(a,b,c) print'besarc:%.2f'%c.to_skalar()

13.Penutup
Pythonadalahbahasascriptingyangsangatmenarikuntukditekunidanditerapkandalam berbagaiaplikasi. Beberapakeunggulanyangmenarikdarisisipotensiuntukmenggunakanpythonpada aplikasibisnisdiantaranyaadalah: Pythonmelakukanpengecekanbounddanunboundvariabel,tidakseperti,misalnya,PHP4 yangmembiarkanprogramermelakukankesalahandenganmengevaluasivariabelyangbelum diberinilai(unassigned). Pythonjugamelakukanpengecekanbatasarray(indexboundarychecking)danjugaindex keychecking,tidaksepertimisalnya,PHPatauPERL. Sintakspythonyangmemperhitungkanindentasijugamenuntutkerapihansourcecodeyang diperlukanuntukmemaintainprogramdalamjangkapanjang.

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource65

IV.MengenalRuby
1.ApakahRuby
Rubyadalahbahasapemrogramanscriptingyangdinamisdanobjectoriented,semuadatadi Rubyadalahinstancedarisebuahclass. RubydikembangkanpertamakaliolehYukihiroMatsumoto('Matz')padatahun1995. SudahbeberapatahunbelakanganiniRubydipakaiuntukmengembangkanaplikasiwebyang komersialmaupunnonkomersial.libraryRubyuntukaplikasiberbasisGUInonwebjuga tersedia.

2.MendapatkandanMengintalRuby
1. Downloadsourcehttp://www.rubylang.org 2. Uncompressdisembarangdirektori:
bash$tarzxvfruby1 .8.5.tar gz .

3. Sebagaiuserbiasalakukanconfiguredanmake,lalumake installsebagai superuser:


bash$cdruby1 .8.5 bash$./configure bash$make bash$su bash$makeinstall

3.MenjalankanRuby
Palingsedikit,ada3caramengeksekusiinterpreterruby.

3.1.Menggunakanfileskrip
Berikutinifilesalam.rb,mencetaksalamdiakhiribarisbaru
puts"assalamu'alaikum"

dieksekusidenganinterpreterruby:
bash$rubysalam.rb

Satusatunyastatemenpadaprogramtersebutmemanggilmethodputs,yangmencetak objekkestandardoutput(stdout)dandiakhiridenganbarisbaru.

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource67

3.2.Menggunakancommandline
bash$rubyeputs\assalamu'alaikum\

3.3.SecaraInteraktif
bash$irb irb(main):00 1:0>puts"assalamu'alaikum" assalamu'alaikum =>nil

4.StrukturProgramRuby
4.1.Fileprogramatauskrip
ProgramRubyadalahfileteksdenganencodingASCII7bit,yangdapatdibuatdengantext editoryangbiasaandadigunakan. NamafileprogramRubybiasanyadiakhiridengan'.rb',inibukankeharusan,hanyakebiasaan umum.Namafileyangsahpadafilesistemdapatdigunakansebagainamafileprogram (walaudemikian,bukanideyangbaikmenamakanfileprogramanda'~@~.rb') Sebuahfileprogramdapatdieksekusidarishellsecaralangsungtanpamenuliskaninterpreter ruby,denganmenambahkanbariskhususdiawalprogram,barisiniharusmengacukepath rubyinterpreter,berikutinifilehalo1.rbsebagaicontoh:
#!/usr/local/bin/ruby puts'HaloRuby!'

Ubahfiletersebutsehinggaexecutable,daneksekusidishell(perhatikan./dibariskedua):
bash$chmod7 55halo1 .rb bash$./halo1 .rb

Beberapaoptiondiinterpreterjugadapatdituliskan,misalnyawuntukwarning:
#!/usr/local/bin/rubyw whilegets.chop if/ruby/i puts'ya,andaketik'+$_+'...' end end

andaakanmendapatwarningkarenapenggunaanvariabelkhusus$_tidakdisarankanlagi. Rubyjugamengenalbariskhususyangopsionaluntukmengakhiriprogram,yaitubarisyang hanyaberisikeyword__END__yangtidakdiawalidandiakhiriwhitespace.Barisbaris 68PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

apapunsetelahbarisinitidakakandieksekusiolehinterpreter.

4.2.Statement
ProgramRubyadalahlineoriented,terdiridaristatementyangdiakhiricukupdenganakhir baris(endofline),tidakperlukarakterkhusus(semisaltitikkoma)untukmenandaiakhir statement. Rubyjugatidakmemperlakukankarakterindentasi(tab)atauspasisecaraistimewauntuk awalstatement,contoh:
puts'inibarispertama' puts'iniyangkedua' puts'daniniyangterakhir'

Sebuahstatemendapatditulisdalambeberapabaris,contoh:
#statemendapatmultiline puts'rubyadalahbahasapemrograman yangdinamikdanobjectoriented dikembangkanpertamakali olehYukihiroMatsumoto,a.k .a\'Matz\'' #multilinememudahkanpenulisanq ueryygpanjang q uery=' selectp.nama,p.stok ,s.namafromprodukp,suppliers p.idsup=s.idandp.stok>1 00 orderbyp.nama limit1 0offset2 1' putsq uery

beberapastatemenditulissatubarisjikadipisahkanolehtitikkoma,contoh:
p=1 0;l=20;t=1 5;volume=p*l*t ;puts"volume#{volume}"

4.3.Komentar
Sepertisudahandalihatpadacontohcontohsebelumnya,Rubymenggunakan'#'sebagai penandaawalkomentar,dansetiapbariskomentarharusdiawalidengan'#'. Khususuntukbarispertama,jika'#'diikutidengan'!'makabarisinidigunakanuntuk mengeksekusiinterpreterjikaprogramdijalankanlangsungdaricommandline.

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource69

4.4.Class
Sebagaibahasaobjectoriented,dataRubyadalahinstancedarisuatuclass.Class merepresentasikansebuahkonsepyangmeliputistrukturdatadanoperasioperasiyang berasosiasidenganstrukturdatatersebut. Classmemberikansebuahnamespacetersendiribagioperasioperasidanvariabelvariabeldi dalamclasstersebut. SemuaclassyangdidefinisikandalamRubymemilikisatuclassindukyaituclassObject. Sebuahclassbiasanyadidefinisikandalamsatufiletersendiri,walautidakadakeharusan sepertiitu. Namaclassbiasanyadiawalidenganhurufkapital.Selanjutnyaclassakandibahasdibagian tersendiri.

4.5.Module
Moduleadalahsebuahcaramengumpulkanclassclass,methodmethoddankonstanta konstantadalamsebuahnamespace. Modulememudahkanpemakaianbersamadanberulangberbagaikonseptersebut(class, method,konstanta). Denganadanyamodule,kemungkinankonfliknama(nameconflictataunamecollision) dapatdiminimalkan.Moduleakandibahaslebihlengkappadabagiantersendiri.

5.TipeDataDasar,LiteraldanVariabel
Rubymendukungberbagaitipedatadasaryaitu:numerik,string,range,array,hashesdan regularexpression.SemuadataRubyadalahobjekatauinstancedarisuatuclass.

5.1.Numerik
Numerikterdiriatasintegerdanfloatingpoint.Integerdapatmenampungjumlahdigityang hampirtakterbatas(dibatasiolehjumlahfreememorydisistem).Integerpadarangetertentu adalahobjekdariclassFixNumdanpadarangelainnyaadalahdariclassBigNum. Rubymendukungoptionalbaseindicatoruntukpenulisanliteralinteger:

70PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

Baseindicator 0 Octal

Base 0d Desimal(default) 0x Hexadesimal 0b Binary

Contoh 01234567 0d123456789 0x123456789abcdef 0b1110010010011

Penulisannumerikdapatmenggunakanunderscore(garisbawah)untukmemudahkan pembacaan,contoh:
123_456_7 89=>123 4567 89 0b1 1_11_11=>0b1 10 11 1 0 0 1 110

Floatingpointditulismenggunakan.(titik)untukseparatordesimalbulatdanpecahan, contoh:
0. 467 123 89 3. 1 4285 1 74285 1 74

Datanumerikadalahobjeksejati,sebagaicontoh,daridataintegerdapatdipanggilmethod:
#representasil1 398634dalamstringhexadesimal 1 l1 398634.to_s(1 1 6)

5.2.String
StringdalamRubyadalahsederetanbytesyangtiapbytenyaterdiridari8bit. Stringliteraldinyatakandalamkutiptunggalataukutipganda,contoh:
'SayasukacodingdenganRuby.' . 'Sayabilang\'SayasukacodingdenganRuby.\'' . Sayabilang\SayasukacodingdenganRuby.\ .

Padastringliteralmenggunakankutipganda,interpreterrubyakanmelakukaninterpolasi ekspresijikaekspresiditulisdalam#{},sehinggamemudahkanandamenggabungkan (concat)stringdenganekspresi:


Luaslingkaran=#{22.0/7*1 4*1 4}

Stringliteraldiatasbernilai'Luas lingkaran = 588'. KutipgandapadastringliteraljugamenyebabkaninterpreterRubyakanmengevaluasi berbagaikarakterkhusus(misal:controlcharacters). Ada3caralainuntukmendefinisikanstringliteral:%q,%Qdanheredocuments. Prefix%qsamadengankutiptunggaldan%Qsamadengankutipganda(menyebabkan interpolasiekspresi),keduanyamenggunakandelimiter!,/,{,(,<.dan[. Contoh: PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource71

%q{selectindexfromtablewherecolumn='area'} %Q/selecttypefromobjectwherearea>#{22.0/7*2 1*2 1}/

Literaldenganheredocumentsmenggunakanstringpembatas,cocokuntukmendefinisikan stringliteralyangpanjang(misal:codejavascript),yangmungkinmemuatkarakterkarakter khususpembatasstringyangdikenalRuby,contohberikutmenggunakanstringpembatas KODE_JAVASCRIPT:


js1=<<KODE _JAVAS CR IPT window .onload=function(){ document.f m2.text5.onchange=function(){ or //preventuserfromenteringinvalidcustomercode }; } KODE _JAVA SCR IP T

5.3.nil
Rubymengenalsebuahobjekkhususuntukmenyatakanketiadaanyaitunil,jadinil bukanlah'tidakadaobjek'.

6.Variabel
SepertidijelaskansebelumnyasemuadataRubyadalahobjekatauinstancesuatuclass,dan variabeladalahreferencekeobjektersebut.Variabelbukanlahobjekitusendiri,haltersebut akandibahaslebihlanjutpadaakhirbagianini. Variabellangsungdidefinisikanmenggunakanassignmentkeekspresiatauliteral.Contoh:
#variabelstring nama1='hafizhamrullah' #variabelnumerik ,jugadapatdiassigndariekspresi size1=nama1 .length

Tapivariabelyangbelumpernahdidefinisikantidakdapatdievaluasi,interpreterruby menganggaphalinisebagaierroryangmenghentikaneksekusiprogram.Contoh:
#error :'blah'belumdidefinisikan putsblahblah #error :'alas'dan'tinggi'belumdidefinisikan luas=alas*tinggi/2

7.VariabeladalahReference
Variabelmerupakanreferencekeobject,objectdapatdiubahmenggunakanvariabel,misalnya denganmemanggilmethodmelaluivariabeltersebut.Berikutinicontohnya: 72PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

nama2='irfanmahdi' nama3=nama2 puts">#{nama2}<" nama3.strip!#hilangkanwhitespacediawaldanakhirmelalui nama3 puts">#{nama2}<"

Variabelnama2menyimpanreferensikeobjekstring,variabelnama3diassignkenama2, sehinggamenunjukkeobjekstringyangsama.Jikasemuasemuaspasidiawaldanakhir stringdihapusmelaluivariabelnama3,makaperubahaninijugadapatdilihatmelaluivariabel nama2.Berikutinicontohyanglain:


k1=codingRubysungguhtiDaKasik'kali k2=k1 k2.slice!(/tidak/i)#hilangkan'tidak' putsk1

Namamethodyangdiakhiri'!'

Sedikitpenjelasantentangnamamethodpadaduacontohdiatas.Contohpertama menggunakanmethod'strip!'dankeduamenggunakan'slice!',keduamethoddiakhiritanda '!' DokumentasiRubymenyarankannamamethodyangmengubahstateobjekreceiver(objek yangdipanggilmethodnya)diakhiritanda'!'.Konvensipenamaanmethodinibertujuan memudahkanpenggunamethodmembedakanantaramethodyangmengubahobjectreceiver danyangtidak.

8.Scopevariabeldanpenamaannya
Rubymengenal4jenisvariabel:

8.1.Variabelglobal
Variabelglobaldapatdiaksesdariclasslainataumodulelain,namavariabelglobaldiawali dengan$,contoh:
$debug=false

8.2.Variabellokal
Variabellokalhanyadapatdiaksesdaridalammethod,namavariabelglobaldiawalihuruf kecil,contoh:
hitung=1 0 array1=[2,3,,34,300] 1 1

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource73

8.3.Variabelinstance
Variabelinstancehanyadapatdiaksesdaridalammethodinstance.Namavariabelinstance diawalidengan@,contoh,classVektorberikutmemilikivariabelinstance@idan@j:
classVektor definitialize(i,j) @i=i @j=j end end

8.4.Variabelclass
Variabelclassdapatdiaksesdaridalammethodinstancemaupunmethodclass.Namavariabel classdiawalidengan@@,contoh,classVektorberikutmemilikivariabelclass @@totalcount:
classVektor @@totalcount=0 definitialize(i,j) @i=i @j=j @@totalcount=@@totalcount+1 end end

8.5.ArraydanHash
ArraydanHashadalahobjekyangmerupakankoleksidatasecaraterindeks(indexed). Arraydiindeksdengankeyinteger,Hashdiindeksmenggunakansembarangobjeksebagai key. Arraydanhashdapatberisielemenelemenyangberbedatipedatanya. Arraydapatdidefinisikansecaraliteral,denganmenggunakanoperatorkurungsikuberisi elemenelemenarray,contoh:
a1=[1 ,'senin',2,'selasa',3,'rabu',4,'kamis',5,'jumat']

Mengaksesarraya1menggunakankeyinteger:
putsa1[0]#1 putsa1[1]#'senin' putsa1[2]#2

Arraydapatberisiarraylain,membentukarraymultidimensi:
a2=[['a','b','c'],['d','e','f'],['g','hihi','i']] #mengakses putsa2[2][1]#'hihi'

74PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

Hashdidefinisikanmenggunakankurawal{},contoh:
produk1={'p00 1'=>'SusuSapi','p002'=>'T elurA yam','p003'=> 'GulaPasir'} putsproduk1['p002']#'T elurA yam' #nestedhash produk2={ 'p00 1'=>{ 'nama'=>'SusuSapi', 'harga'=>1 0000}, 'p002'=>{ 'nama'=>'T elurA yam','harga'=>12000}, 'p003'=>{ 'nama'=>'GulaP asir','harga'=>6000} } putsproduk2['p003']['harga']#6000

Elemenhashyangbelumdidefinisikankeynyabernilainil.Tapi,hashdiRubydapatdiset nilaidefaultnya.Misal,mendefinisikanvariabelhashuntukmenghitungsesuatuyang diindeksdengannama,defaultnya100:


hitung1=Hash.new(1 00) putshitung1['p00 1']#1 00

9.EkspresidanStrukturkendali
9.1.Ekspresimelibatkanstringdannumerik
JikaandaterbiasadenganbahasascriptlainnyasepertiPHPatauPERL,mungkinanda mengalamikesulitanmenuliskanekspresiyangmelibatkanvariabelstringdanvariabel numerik,karenaRubytidakmelakukankonversiotomatisdariekspresinumerikkestringatau sebaliknyasepertiyangmungkinandaharapkan,objekharusdiparsemenghasilkanobjek barudengantipeyangsesuaisecaraeksplisitmenggunakanmethodyangtepat,contoh:
num1=2000 str1='1 000' #BARISBERIKUTERROR:operator+num1butuhoperanddariclassFixNum num2=num1+str1 #str1diparsemenghasilkannumerik num2=num1+str1 .to_i

Begitujugakebalikannya,jikamenggabungkanstringdengannumeriktanpa#{}:
str1='Biayanya...' num1=2000 #BARISBERIKUTERROR:operator+str1butuhoperanddariclassString str2=str1+num1 #num1diparsemenghasilkanstring str2=str1+num1 .to_s

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource75

#ataumenggunakan#{}dandoubleq uote str2=#{str1}#{num1}

Perhatikandalamkeduapemanggilanmethodto_idanto_str,objekdaristr1dannum1 tidakberubah,tapimenghasilkanobjekbaru.

9.2.EksekusiConditional
Eksekusiconditionaldidasarkannilaiboolean(trueataufalse)suatuekspresi. Rubymenganggapsemuanilaiyangtidaksamadengankonstantafalseatautidaksama denganniladalahtrue.

9.2.1.If...then...end
Rubymengenalekspresiconditionalif..then..enduntukmengevaluasisatukondisidan if..then..elsif..then..else..enduntuklebihdarisatukondisi.Contoh:
1 . 2. 3. 4. 5. 6. . 7 8. ditebak=123 tebakan=gets.chop.to_i iftebakan>ditebak puts'terlalubesar' elsiftebakan<ditebak puts'terlalukecil' else puts'pasbenar...'

Penjelasan:baris2menggunakanmethodgetsyangmengambilinputdaristdin,input diterimasebagaistringdanmenyertakankarakterendofline,agardapatdibandingkansecara benarterhadapdatanumerikdivariabelditebakmakakarakterendoflineharusdipotong (=chopped)dariinputini,danhasilnyadiparsekeintegerdenganmethodto_i. Sebagaikebalikannyadapatjugadigunakanekspresunless..then..else..end, contohsebelumnyaditulismenggunakanunless:


1 ditebak=123 . 2. tebak=gets.chop.to_i 3. unlesstebak==ditebakthen 4. unlesstebak<ditebakthen 5. puts'terlalubesar' 6. else . puts'terlalukecil' 7 8. end 9. else 1 0.puts'pasbenar' 1. end 1

9.2.2.ConditionalTernary
Rubyjugamengenalekspresiternary,bentuknya: 76PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

expr0?expr1:expr2

Jikaexpr0bernilaitruemakadikembalikanexpr1,jikasalahdikembalikanexpr2. Ternarymemungkinkanekpresinested,contoh:
bil=123;print'tebaklah:';tebak=gets.chop.to_i putstebak==bil?'benar ..':tebak>bil?'kebesaran':'kekecilan'

9.3.Loop
Loopmengenalwhile..enduntukmengeksekusistatemenstatemendalamloopselama kondisiyangdievaluasipadabagianwhileadalahtrue.Programberikutiniakanterus memintainputselamatebakanyangmasukbelumbenar:
1 ditebak=123 . 2. print'tebak:' 3. tebakan=gets.chop.to_i 4. whileditebak!=tebakan 5. ifditebak<tebakanthen 6. puts'terlalubesar' . else 7 8. puts'terlalukecil' 9. end 1 0.print'tebaklagi:' 1. tebakan=gets.chop.to_i 1 12.end 1 3.puts'benarsekali!'

Baris4sampaidengan11akandieksekusiselamatebakanbelumbenar. Kebalikandariwhileadalahuntil,yangterusmengulangstatemendalamloopsampaikondisi yangdievaluasiadalahtrue.Contoh:


1 . 2. 3. 4. 5. 6. . 7 ditebak=123 print'tebak:' tebakan=gets.chop.to_i untilditebak==tebakan #samadengansebelumnya end puts'benarsekali!'

10.Method
Methoddapatberdirisendiriataumerupakanbagiandariclass. Methoddidefinisikanmenggunakankeyworddef,dandiakhiriend. PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource77

Namamethoddimulaidenganhurufkecil,namamethodyangmelakukanquerybiasanya diakhiridengan'?' Namamethodyangmengubahobjekreceiverbiasanyadiakhiri'!'. Methoddapatmenerimaparameter,untukmethodyangmenerimaparameter,biasanya digunakankarakterkurung().Penggunaan()untukdefinisimethodmaupunpemanggilan tidakdiharuskan. Jikamethodmengembalikannilai,dapatmenggunakankeywordreturndapatjugatidak,Ruby mengembalikannilaiekspresidaristatementerakhirdaridefinisimethod(sebelumend) Contohmethoddanpemanggilannya:


defluas_segitiga(alas,tinggi) alas*tinggi/2.0 end luas1=luas_segitiga(20,30) luas2=luas_segitiga20,30#memanggilmethodtanpa() #parametertanpa() defvolume_bolajari2 return4.0/3*22/7*jari2*jari2*jari2 end volum1=volume_bola(1 4)

Rubymembolehkanpemberiannilaidefaultpadaparameterdefault. Parameterrekurispadacontohberikutini,disettruejikapemanggilanmethodtidak menyertakanparametertersebut.


defbuatdir(path,rekursi=true,mode=055) 7 if!File.exists?(path)&&rekursithen d=File.dirname(path) buat_dir(d,rekursi,mode) Dir .mkdir(path,mode) elsif!File.exists?(path) Dir .mkdir(path) else puts"#{path}sudahada" end end #createdirrecursivel y buatdir('/home/didi/dir/yg/belum/ada') #createdirNOTrecursivel y ,possibl yerror buatdir('/home/didi/dir/yg/sdh/ada/dirbaru',false,0 7 7 7)

78PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

10.1.BlokdanIterator
Blokadalahsederetanbarisstatemenyangdapatdiasosiasikandenganpemanggilanmethod. Blokbiasadigunakansebagaicallback,jikaandapernahbelajarJava,kegunaanblokdapat disejajarkansepertianonymousclassyangdigunakansebagaicallback.TapibloknyaRuby lebihluweskarenatidakperluadaclassyangdidefinisikan. Blokdimulaidengankeyworddodandiakhiridenganend,ataumenggunakan{}. Delimiterblokdo...enddigunakanjikastatemendalambloklebihdarisatubaris,jika hanyasatubarismakadigunakan{},halinibukankeharusan,hanyasesuatuyangtelah menjadistandard. Berikutinicontohblock:
#blokdo..end do puts'statement1' puts'statement2' puts'statement3' end #blok{} {puts'statementunggal'}

Blokbarubergunajikadipanggildariiterator,yaitusebuahmethodyangdidefinisikanuntuk memanggilblok. Iteratormemanggilblokmenggunakanstatemenyield. Berikutinicontohiteratoryangmemanggilblok3kali:


#iteratoryangmemanggilblok3kali defpanggil3x yield yield yield end #panggilblok panggil3x{puts'ding...'}

Statemenyielddapatmengirimkanparameterkeblok,asalkanblokdidefinisikandapat menerimaparameter. Sebuahblokdapatmenerimalebihdarisatuparameter.Parameteryangditerimablok didefinisikandiantara||(duapipe),jikaadalebihdarisatuparameterdipisahkantanda koma. Berikutinicontohblokyangmenerima2parameter:


defpanggil4x

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource79

yield'ding...',2#memanggilblok ,passing2parameter yield'...dong',3 yield'ding...',4 yield'...dong',5 end #blokmendefinisikanparameterpara1 ,para2sebagaiparameterblok panggil4xdo|para1 ,para2| n=0 whilen<para2 printpara1#'print'tidakmencetakbarisbaru n=n+1 end puts''#gantibaris end

Perhatikanprogramdiatasmenggunakando...endsebagaipembatasblok.Andadapat menggunakan{}sebagaipenggantido...end.

11.Class
Berikutinicontohclassyangdigunakandalampenjelasanselanjutnya:
1 classVektor . 2. #variabelclass 3. @@totalobj=0 4. 5. #constructor 6. definitializei,j . 7 @i=i 8. @j=j 9. @@totalobj=@@totalobj+1 1 0. end 1. 1 12. #operator+sebagaimethodinstance 1 3. def+(v) 1 4. Vektor new(@i+v i,@j+v j) . . . 1 5. end 1 6. . #besar/magnitudevektor(methodinstance) 1 7 1 8. defto_skalar 1 9. Math.sqrt(@i*@i+@j*@j) 20. end 2. 1 22.#attributei(methodinstance) 23.defi 2 4. @i 25.end

80PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

26. 2 #attributej(methodinstance) . 7 28.defj 29.@j 30.end 3. 1 32.#representasistring(methodinstance) 33.defto_s 34. "(#{@i},#{@j})" 35.end 36. 3 #methodclass, . 7 38.#mengembalikantotalobjekvektorygsdhdicreate 39.defVektor totalobj . 40.@@totalobj 4. end 1 42.end#akhirdefinisiclassV ektor 43. 4 4.x=Vektor new(1 . ,2)#panggilconstructor 45.y=Vektor new(2,2)#panggilconstructor . 46.z=x+y#panggilmethod+ 4 puts"vektorz#{z}"#panggilmethodto_s . 7 48.puts"magnitudevektorz:#{z.to_skalar}"#panggilmethod to_skalar 49.#memanggilmethodclass 50.putsVektor ::totalobj

11.1.MendefinisikanClass
ClassdiRubydidefinisikandalamfileprogramsepertiprogramRubylainnya.Tidakada aturanpenamaankhususuntuknamafile. Definisiclassdiawalidengankeywordclassyangdiikutinamaclass,namaclassdiRuby biasanyadiawalidenganhurufkapital.(contoh:baris1classVektor) Definisiclassdiakhiridengankeywordend.(contoh:baris34classVektor)

11.1.1.Bagianbagianclass 11.1.1.1.Constructor
Constructoradalahmethodkhususyangdigunakanuntukmenginisialisasistateobjek instancedariclass.MethodconstructordiRubyharusdinamakaninitialize,methodini dapatmenerimanolataulebihparameter.

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource81

11.1.1.2.MethodInstance
Adalahmethodyanghanyadapatdipanggilmelaluiclassinstanceatauobjek. Diantaramethodinstanceadayangdigunakanmengaksesvariabelinstance(akandijelaskan kemudian),methodsepertiinidisebutjugaattribut. PadacontohclassVektorada5methodinstance,yaitu:operator +, to_skalar, attribute i, attribute j dan to_s

11.1.1.3.MethodClass
Adalahmethodyanghanyadapatdipanggilmelaluiclass,tidakdapatdipanggilmelaluiclass instance. Penamaannyadiawalidengannamaclassdiikuti'.'dannamamethoddimulaidenganhuruf kecil. PadacontohclassVektorada1methodclass,yaitu:totalobj. Pemanggilanmethodclassmenggunakannamaclassdiikuti'::'dannamamethod.

11.1.1.4.VariabelInstance
Variabelyangdidefinisikandalamclassdanhanyadapatdiaksesdarimethodinstance,dan hanyadapatdiaksesmelaluiobjekitusendiri,tidakdapatdiaksesmelaluiobjeklain. Setiapobjekmemilikivariabelinstancenyasendirisendiri. Penamaannyadiawalidengan@diikutinamavariabelyangdimulaidenganhurufkecil. PadacontohclassVektorada2variabelinstance:@idan@j

11.1.1.5.Variabelclass
Variabelyangdidefinisikandalamclassdandapatdiaksesdarimethodclassmaupunmethod instance. Variabelclassdapatdiaksesbersamasamaolehsemuainstancedariclasstersebut. Penamaannyadiawalidengan@@diikutinamavariabelyangdimulaidenganhurufkecil. PadacontohclassVektorada1variabelclass:@totalobj

11.1.2.Inheritance(classturunan)
Sebuahclassdapatdidefinisikansebagaiturunandariclasslain.Classturunanakanmewarisi methoddanvariabeldariclassinduknya. BerikutinididefinisikanclassBalok
classBalok definitializepanjang,lebar ,tinggi

82PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

@panjang=panjang @lebar=lebar @tinggi=tinggi end defvolume @panjang*@lebar*@tinggi end defto_s "(#{@panjang},#{@lebar},#{@tinggi})" end end#akhirclassBalok

BerikutnyadidefinisikanclassKubussebagaiturunandariBalok,karenakubusdapat dianggapsebagaibalokyangkhusus,yaituketigasisinyasamapanjang. Rubymenggunakan'<'untukmenyatakansebuahclassadalahturunanclasslainnya. PerhatikanconstructorKubusmemanggilconstructorclassinduknyadenganmethodkhusus super(). Selanjutnyamethodto_sdiredefinisikandiclasKubus.


classKubus<Balok definitialize(sisi) super(sisi,sisi,sisi) end defto_s "(#{@panjang})" end end#akhirclassKubus z=Kubus.new(4) putsz.volume

12.Modules
KetikasebuahprogramRubysudahmenjadiaplikasiyangcukupbesar,makaaspek reusabilitymenjadisangatpenting.Bahkanuntukaplikasiyangkecilpunsebaiknyaaspek reusabilitydiperhatikan. Modulesmemungkinkansuatufungsionalitas,baikdalambentukclass,methodatau konstanta,dipakaibersamadanberulangkalidenganmudah. Modulememberikannamespacetersendiriyangmemudahkanpengembanglibrary

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource83

menghindarikonfliknama(nameconflict/namecollision)diantaraclass,method,atau konstanta.

12.1.MendefinisikanModule
Sebuahmoduledapatdidefinisikandalamfiletersendiri,ataubersamamodulelain. Definisimoduledimulaidengankeywordmodulediikutinamamoduleyangdiawalidengan hurufkapital,definisimodulediakhiriolehkeywordend,padabaristersendiri. Berikutinicontohmendefinisikanmodules,difilemod1.rb:
#modulecontoh moduleModSatu KONSTAN_1=123 #methoddalammodule defModSatu.method1 puts'method1 ...' end end#akhirmodule

12.2.Menggunakanmodule
Agarprogramdapatmengaksesmodule,moduleharusdimuatkedalamprogram menggunakanstatemenrequire. Ada4caramenggunakanrequire:

12.2.1.Menggunakanpath
Statemenrequirediikutirelativepathatauabsolutepathfilemodule.Namafiledapat menyertakanextension.rb,dapatjugatidak.MisalsebuahmoduleMod1didefinisikandi dalamfile/home/irfan/moddir/mod1.rb Sebuahprogramusemod1.rb,disebarangdirektoriyangberbedadenganmodule,akan mengaksesMod1sebagaiberikut:
#loadmodule req uire'/home/irfan/moddir/mod1' #panggilmethoddimodule ModSatu.method1 putsModSatu::KONSTAN_1

12.2.2.Menggunakanvariabelkhusus$:
Rubymencarimoduledalamfilefileyangterdapatdalamdirektoridirektoriyangtersimpan diarray$: , padaarray$:tersebutdapatditambahkandirektoribaru.

84PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

AndadapatmenampilkandirektoridirektoritersebutdenganinterpreterRuby,sbb:
bash$rubyeputs$:

Berikutcontohpenggunaan$:untukmeloadmodule,diprogramusemod2.rb:
#masukkandirektorikedalamarray $:.push('/home/irfan/moddir') #loadmodule req uire'mod1' #panggilmethoddimodule ModSatu.method1 putsModSatu::KONSTAN_1

12.2.3.MenggunakanrubyoptionI
Keduacarasebelumnyamemerlukanpenyebutandirektorimodulesecaraeksplisitdalam programpemanggil.DenganmenggunakanoptionIdiinterpreterruby,filepemanggil moduletidakharusmenyebutkanpathkedirektorimodule,berikutinifilepemanggilmodul, usemod3.rb:
#load req uire'mod1' #panggilmethod ModSatu.method1 putsModSatu::KONSTAN_1

dieksekusidengan:
bash$rubyI/home/irfan/moddirusemod1 .rb

12.2.4.MenggunakanvariabelenvironmentRUBYLIB
Programusemod3.rbyangsamadapatdieksekusitanpaperlumenambahoptionIdi interpreterruby,denganmenambahkandirektorimodule,kedalamvariabelenvironment RUBYLIB:
bash$exportRUBYLIB=/home/irfan/moddir :$RUBYLIB bash$rubyusemod1 .rb

12.3.Mixin
SalahsatufiturRubyyangmenarikyangberhubungandenganmoduleadalahmixin,yaitu methoddidalamsebuahmoduledapatdijadikanmethodinstancedarisebuahclasslain. Sebuahclassdapatmengasosiasikandiridenganmodulemenggunakanstatemeninclude, sehinggamethodmethoddalammoduletersebuttersediaseolahmethodtersebutterdefinisi dalamclasstersebut. PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource85

BerikutinididefinisikanmoduleBandingV olume,difilebanding.rb,yangmembandingkan volume,perhatikansemuamethodmembandingkanoperanddenganself,variabelini adalahreferencedariinstanceclassyangmengincludemodule.


moduleBandingV olume #apakahvolumeb1lebihbesar? def<(b1) self.volume<b1 .volume end #apakahvolumeb1lebihkecil? def>(b1) self.volume>b1 .volume end #apakahvolumesama? def==(b1) self.volume==b1 .volume end end#akhirmodule

BerikutiniclassBalokmemanfaatkanmoduleBandingVolumedenganmixin,perhatikan bahwamethodyangdimixinjugadiwariskankeclassKubus:
req uire'banding.rb' classBalok includeBandingV olume#mixinBandingV olume definitializepanjang,lebar ,tinggi @panjang=panjang @lebar=lebar @tinggi=tinggi end defvolume @panjang*@lebar*@tinggi end defto_s "(#{@panjang},#{@lebar},#{@tinggi})" end end#akhirBalok classKubus<Balok definitializesisi super(sisi,sisi,sisi) end defto_s "(#{@panjang})"

86PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

end end#akhirKubus a=Balok .new(8,2,2) b=Balok .new(8,2,4) z=Kubus.new(4) putsz.volume #semuaoperasiperbandinganiniadadimoduleBandingV olume putsz<a#false putsz>a#true putsz==b#true

13.Penutup
Rubycukupmudahdigunakan,sangatberdayagunadanlibrarynyasangatlengkap. Rubysiapuntukmenjadialternatifdaribahasapemrogramanopensourceyangpopuler lainnyasepertiPERL,pythonatauPHP.

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource87

88PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

90PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

V.MengenalGCC(GNUCompilerCollection)
1.ApakahGCCitu?
GCCadalahkumpulankompilerkompiler,termasukcompilerbahasaC,C++,Fortrandan Java. BeberapakemampuanGCCantaralain:

GCCadalahcompileryangmendukungbanyakplatforms,termasukmicrocontroller. GCCmendukungcrosscompilation,yaituprogramyangdicompilepadasatuplatform untukagardapatdieksekusipadaplatformyanglain.Inisangatbergunauntuksistem embedded.

PadabahasaniniakandiperkenalkanprogramyangpalingumumdigunakandariGCCyaitu compilerbahasaC.

2.Mengcompilesatufilesourcekefileexecutable
BerikutiniadalahcontohsourcecodeprogramCyangakandicompile,namafilenyasalam.c :
#include<stdio.h> intmain(intargc,char**arg){ /*mencetaksalam*/ if(argc>1){ fprintf(stdout,"assalamu'alaikum%s\n",arg[1]); } else{ fprintf(stdout,"assalamu'alaikum\n"); } }

Makacaramengcompilenyamenjadifileexecutable,menggunakangcc:
bash#gccsalam.c

Perintahinimenghasilkanfilea.out,yangdieksekusidengancara:
bash#./a.outfadhilah assalamu'alaikumfadhilah

Apabiladiinginkannamafileexecutable,yangberbedadapatmenggunakanoptiono,contoh:
bash#gccsalam.cosalam_ku

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource91

bash#./salam_kufadhilah assalamu'alaikumfadhilah

3.Mengcompilekefileobject
Dalampraktekseharihari,untukmembangunsebuahaplikasi,berbagaifungsiyang diperlukanolehaplikasidisimpanpadabeberapafilesourcecode.Filefileinibiasanyatidak dapatlangsungdieksekusi,karenatidakmemilikifungsimain(). Untukfilefilesepertiinimakadilakukankompilasikefileobject,bukankefileexecutable. Berikutinicontohsourcecodevektor1.cberisifungsioperasivektorsederhana:
#include<stdio.h> typedefstructt_vektor{ inti; intj; }vektor; voidvektor_cetak(FILE*out,constvektor*vek){ fprintf(out,"vektor(%d,%d)\n",vek>i,vek>j); } vektorvektor_tambah(constvektor*v1,constvektor*v2){ vektorh; h.i=v1>i+v2>i; h.j=v1>j+v2>j; returnh; }

Selanjutnyafiletersebutdicompilemenggunakanopsi-c:
bash#gcccvektor1 .c

Makaakandihasilkanfileobjectvektor1.o Beberapafilesekaligusdapatdicompiledengancarayangsama.Misal,adafilevektor1.c, vektor2.c,vektor3.c:


bash#gcccvektor1 .cvektor2.cvektor3.c

4.Menggunakanfileheader
Padakenyataanseharihari,filesourcecodeyanghanyaberisifungsi(bukanprogramutama) akandibagimenjadisedikitnya2file,yaitufileheaderyangberisideklarasifungsidanfile sourceyangberisiimplementasifungsi.Dapatjugafilesourcedibagimenjadibeberapafile, 92PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

misalnyajikadikerjakanolehprogrammeryangberbeda. Padabahasaninidicontohkan,filevektor1.csebelumnyadibagimenjadi1fileheader,yaitu vektor1.h,serta2filesourcecode,yaituvektor1.cdanvektor2.c Berikutfilevektor1.h


#ifndef_VEKTOR_H #define_VEKTOR_H1 #include<stdio.h> typedefstructt_vektor{ inti; intj; }vektor; voidvektor_cetak(FILE*out,constvektor*v); vektorvektor_tambah(constvektor*v1,constvektor*v2); #endif/*_VEKTOR_H*/

Lebihjauhlagi,headerfilebiasanyadisimpanpadadirektoritersendiri,dalamcontohini misalkanvektor1.hdisimpandidirectori/usr/local/inc_ku/math
bash#mkdirp/usr/local/inc_ku/math bash#mvvektor1 .h/usr/local/inc_ku/math

Daninifilesourcevektor1.c:
#include<stdio.h> #include"math/vektor1.h" voidvektor_cetak(FILE*out,constvektor*vek){ /*cetakdgbarisbaru*/ fprintf(out,"vektor(%d,%d)\n",vek>i,vek>j); }

Daninifilesourcevektor2.c:
#include<stdio.h> #include"math/vektor1.h" vektorvektor_tambah(constvektor*v1,constvektor*v2){ vektorh; h.i=v1>i+v2>i; h.j=v1>j+v2>j;

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource93

returnh; }

Makauntukmengcompilevektor1.cmenjadifileobject,gunakanoption-Iuntuk menginformasikanlokasifileheaderyangdiperlukankepadacompiler:
bash#gccI/usr/local/inc_kucvektor1 .cvektor2.c

Jikaadabeberapaheaderfileyangtersimpandidirectoryyangberbeda,misaldi/usr/local dandi/home/local/includemakaoptions-Idapatdiulang:
bash#gccI/usr/local/inc_kuI/home/local/includecvektor1 .c vektor2.c

Jikainginmengcompilesemuasourcecodecdalamcurrentdirectory,dapatjugadigunakan *.csebagaipenggantinamafile,sebagaiberikut:
bash#gccI/usr/local/inc_kuI/home/local/includec*.c

5.Linkingdariobjectfilemenjadiexecutable
Proseslinkingdiperlukanuntukmenghasilkanfileexecutable.PadabahasaC,fileyang executabledihasilkandarisourcecodeyangmendefinisikanfungsimain(). Berikutinifileprogramutamayangmenggunakankeduafungsivektoryangadadivektor1.h, didirektori/usr/local/include/math,namafilenyatestv1.c
#include<stdio.h> #include"math/vektor1.h" intmain(intargc,char**arg){ vektorv1,v2,v3; v1.i=10; v1.j=20; v2.i=30; v2.j=40; v3=vektor_tambah(&v1,&v2); vektor_cetak(stdout,&v1); vektor_cetak(stdout,&v2); vektor_cetak(stdout,&v3); return0; }

94PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

1. Compilesourcecodemenjadifileobject
bash# gcc -I/usr/local/inc_ku -c vektor1.c vektor2.c testv1.c

2. Linkobjectfilemenjadifileexecutabletestv1 :
bash# gcc vektor1.o vektor2.o testv1.o -o testv1

3. Eksekusi
bash# ./testv1 vektor (10, 20) vektor (30, 40) vektor (40, 60)

6.Menggunakanlibrary
Libraryadalahkumpulanfungsifungsi.Librarydibuatagarfungsifungsilebihmudah dipergunakanberulangkali,bahkanuntukprogramaplikasiyangberbeda. Berbagaiaplikasiterkenaldiduniaopensourcedimudahkanpengembangannyakarena ketersediaanlibraryyanghandal,misal:libraryopenSSL,openGL,Gzip,PNG,GPGdan sebagainya. Librarytersediadalam2format,yaitustaticdandynamic. Perbedaanutamaterletakpadapenggunaanyapadasebuahprogram:

Programyangmenggunakanstaticlibrary,memuatkodemesindariprogramitusendiri dankodemesinfungsifungsiyangberasaldarifileobjectlain,yangdigunakanoleh programtersebut Programyangmenggunakandynamiclibrary,hanyamemuatreferensikefungsifungsi darifileobjectlainyangdigunakan,disampingtentusajakodemesindariprogramitu sendiri.Dynamiclibraryjugabiasadisebutsharedlibrary.

6.1.Membuatstaticlibrary
Darisekumpulanfileobjectdapatdibuatfilestaticlibrary,berdasarkankonvensi,filelibrary berawalanlibdanberekstensi.a,contoh:libssl.a,libz.alibmath.a,libsocket.a,libvektor.a Staticlibrarydibuatmenggunakanprogramar,yangsebenarnyabukanbagiandariGCC, tapitermasukdiantaraprodukproyekGNU,Berikutinicaramembuatstaticlibrary:
bash#arrclibvektor1 .avektor1 .ovektor2.o bash#ranliblibvektor1 .a

Fileberakhiran.ainijugabiasadisebutfilearsip.Programranlibdigunakanuntuk PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource95

membuatindeksdariisifilearsipini,yangmerupakansimbolsimbol(antaralain:nama fungsi)yangdidefinisikandalamfileobject.Olehranlib,indeksinidisimpandidalamfile arsip.

6.2.Linkingkestaticlibrary
Sepertihalnyafileheader,makafilearsipataufilelibraryjugabiasadisimpandalamdirektori khusus,misalpadacontohdiatas,didirektori/usr/local/lib_ku
bash#mkdirp/usr/local/lib_ku bash#mvlibvektor1 .a/usr/local/lib_ku

Makajikainginmenlinkprogramutamakelibrarytersebut,gunakanoption-Lsebagai berikut:
bash#gccI/usr/local/inc_kuL/usr/local/lib_kutestv1 .cl vektor1 otestv1 bash#./testv1

Sepertihalnyaoption-I,makaoption-Ljugadapatdigunakanberulangkaliuntukmelink kedirektorilibraryyanglain.

6.3.Membuatdynamiclibrary
Gccjugadapatdigunakanmembuatdynamiclibrary.Caranya: 1. Mengcompilesourcecodemenjadiobjectfile,denganmenggunakanoption-fPIC untukmenghasilkanfileobjectdenganPositionIndependenceCode(PIC).Contoh:
bash# gcc -I/usr/local/inc_ku -fPIC -c vektor1.c vektor2.c

2. Membuatdynamiclibrary(sharedobjectlibrary)denganmenggunakanoption-shared danoptions-o ,contoh:


bash# gcc -shared -o libvektor1.so vektor1.o vektor2.o

Makadihasilkanfilelibvektor1.soyangmerupakanfiledynamiclibrary. Sepertihalnyastaticlibrary,makafiledynamiclibraryjugaditempatkanpadadirektori tersendiri,biasanyasamadengandirektoristaticlibrary,pindahkanlibrarykedirectori /usr/local/lib_ku:


bash# cp libvektor1.so /usr/local/lib_ku

6.4.Menggunakandynamiclibrary
Selanjutnyadynamiclibrary,dapatdigunakanolehprogramlainnya,denganmenghasilkan fileexecutable,langkahnya: 96PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

1. Compileprogramutamakefileobject,selainoption-cuntukcompile,tambahkanoption -fPIC,karenaakanmenggunakandynamiclibrary,contoh:
bash# gcc -I/usr/local/inc_ku -fPIC -c testv1.c

2. Buatexecutabledenganoption-odanlinkingdengankelibrary(denganoption -lnama_library)jikadiperlukanmenambahkanpathdirektorikelibrarygunakan option-L,contoh:


bash# gcc -o testv1 -L/usr/local/lib_ku -lvektor1 testv1.o

Selanjutnyafileoutputdapatdieksekusi,lihatbagianberikutnya.

6.5.Menjalankanprogramyangmenggunakandynamiclibrary
Untukmenjalankanprogramyangmenggunakandynamiclibrary,kitaperlumenambahkan direktorilibraryyangakandigunakan,kevariabelenvironmentLD_LIBRARY_PATH, sehinggapadasaatprogramdieksekusi,libraryyangdiperlukandapatditemukandi LD_LIBRARY_PATHtersebut:
bash#exportLD_LIBRARY_P ATH=/usr/local/lib_ku:$LD_LIBRARY_P ATH bash#./testv1

7.Penutup
Tutorialsingkattentanggccinimasihjauhdarilengkap,namundemikiandiharapkandapat menjadititikawaluntukpenggunaanyanglebihmaksimal. BerikutinireferensikesitussitusyangberhubungandenganGCC,untukpembahasanlebih mendalam:

Situsgcc:http://gcc.gnu.org

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource97

98PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

VI.PengenalanAplikasiEclipse
EclipseadalahIDE(IntegratedDevelopmentEnvironment)yangsangatpopuleruntukJava danC++,denganmenggunakanEclipsepengembanganaplikasiakanlebihmudahdan mempercepatpengerjaandarisisiwaktu. Eclipsetersediadalamberbagaiplatform,danjugatersediapluginsuntukberbagai pengguananaplikasidalamberbagaiindustri. BerikutwebsiteyangpopulerberhubungandenganEclipse: DownloadEclipse:http://www.eclipse.org DownloadToolsEclipse:http://www.eclipse.org/tools EclipseJBoss:http://www.jboss.com EclipseObjectWebLomboz:http://lomboz.objectweb.org

1 Instalasi
1. PastikansudahmenginstalJavaDevelopmentKit(JDK),JDKversiterakhirJDK1.6 dapatdidownloaddihttp://java.sun.com 2. TentukanlokasidirektoriuntukinstalEclipse,biasanyauntukaplikasidiletakanpada direktori/opt. #cd/opt 3. Ekstrakfile #tarxvzfeclipseSDK3.2.2linuxgtk.tar.gz 4. SetingPATHaplikasi Editfile/etc/profile tambahkanbarisberikutini:
JAVA_HOME="/opt/jdk1.6.0" ECLIPSE_HOME="/opt/eclipse" PATH="$JAVA_HOME/bin:$ECLIPSE_HOME:$PATH" export JAVA_HOME ECLIPSE_HOME PATH

JalankanperintahberikutuntukmengupdatePATH #source/etc/profile

2 MenjalankanEclipse
Jalankanperintahberikutdalamterminalprogram: $eclipse

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource99

Gambar1.0.MemulaiEclipse

3 MemilihWorkspace
WorkspaceadalahlokasidirektoridarifilefileaplikasiketikabekerjadenganEclipsepada saat membuat project, workspace berisi filefile kode program aplikasi, direktori utama aplikasidanfilefilekonfigurasiaplikasi.

Gambar1.1.MemilihWorkspace

4 Mematikanaplikasieclipse
Clicktanda'X'(closewindown)dipojokkananataswindowIDEEclipseuntukkeluar,atau darimenuFile>Exit GUIEclipse EclipsemempunyaistyletampilanuntukGUIsesuaidengankebutuhanprogrammer,adatiga jenistampilan(perspective):MenuWindow>OpenPerspective> Debug Java 100PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

JavaBrowsing

Gambar1.2.PerspectiveJava DalampilihanstyleperspectiveJava: Windowinformasiproject,strukturdirektori(package):terletakdisebelahkiri Windowuntukkodeprogram:terletakditengah Windowinformasiclass(memberclass:variabeldanfungsi):terletakdisebelah kanan WindowLoghasilcompileprogram:terletakdibawah

5 ProjectPertama
PastikanJDKsudahdiinstalldandisetpadaEclipsedenganbenar.KonfigurasiJDKbisadi lihatdalamMenuWindow>Preferences,PilihJavakemudianpilihInstalledJRE'S.Kita jugabisamensetANTHome,CVS. Membuatsebuahproject PilihFile>New>ProjectdanpilihJavaProject,dankemudianpilihNext.

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource101

Gambar1.3.ProjectWizard

6 Memberinamaproject
BerinamaprojectHelloDuniakemudianclikNext

Gambar1.4.PerspectiveJava 102PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

7 SetingProject
DalamwizardsetingJavaini,kitabisamenentukandirektorioutputproject, paket library ( *.jar) yang ingin disertakan, misalnya library koneksi database (JDBC Driver), libraryaplikasiwebdenganServletatauJSP(j2ee.jar).

Gambar1.5.SettingProject PilihFinish,projectjavatelahdibuatdanakanmunculWindowPerspectiveJava.

8 MembuatAplikasiJavaSederhana
BerikuttahapmembuataplikasisederhanauntukmencetakStringkeouputdengan menggunakanEclipse. MenbuatClassJava PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource103

PilihFile>New>Class:

Gambar1.6.WizardmembuatClassJava Isifielddengan: Packgae:contoh Name:Salam Checklist:publicstaticvoidmain(String[]args) KemudianclikFinish,danakanmunculclassJavadalamWindowKodeprogram.

9 EditdanCompileKodeProgram
EditclassSalam.javadenganmenambahkanbariskodeberikutpada:
System.out.println ( Selamat Belajar Java)

dalammethodmain. Dengan menyimpanfile, secara otomatis Eclipse akan mencompileclassJava. Andabisa mengabaikanfiturinidenganmemilihmenuProject>BuildAutomaticallydankemudian secaramanualcompileclassjavadenganmemilihmenuProject>BuildAll

104PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

Gambar1.7.Salam.javadenganEclipse

10 Menjalankanaplikasi
PilihRun>RunAs>JavaApplication EclipseakanmengeksekusifileSalam.javadanoutputakanditampilkandalamwindow consoledibagianbawahwindowEclipse. MendapatkanHelp JikaandainginmendapatkaninformasiatauHelpdariEclipsepilihHelp>HelpContents

11 Referensi
Eclipse:http://www.eclipse.org Jboss:http://www.jboss.com Java:http://java.sun.com

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource105

106PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

VII.PengenalanAplikasiNetbeans
NetBeansadalahIDE(IntegratedDevelopmentEnvironment)opensourceyangberbasisJava dan dikeluarkan oleh Sun Microsystem (http://java.sun.com). NetBeans berjalan diatas programGUI denganmenggunakanSwing.SwingsendiriadalahpaketlibraryJavauntuk aplikasidesktopataugrafis. NetbeansdidistribusikandenganduaversiyaituNetbeansplatformdanNetbeansIDE,dalam NetbeansIDEtelahterintegrasidenganmodulmodulpengembanganstandardJava.Netbeans terbaru dapat di download di http://www.netbeans.org. Dalam website tersedia paket tambahan(addon): MobilePack :Mobileapplication(TeknologiJ2MEuntukHP,PDA) VisualWebPack:Komponenaplikasiuntukweb EnterprisePack:KomponendanModelaplikasiSOA(XML,WSDL,Web Service,UML) Profiler:Untukmemoryaplikasi(Bottleneck&MemoryLeak) C/C++Pack:MembuataplikasiC/C++denganIDENetBeans

1. Instalasi
1.1InstalasiJava
PastikansudahmenginstalJavaStandardDevelopmentKit(JavaSDK),versiterakhir JavaSDK1.6dapatdidownloadhttp://java.sun.com.

1.2InstalasiNetbeans
1. DownloadbinaryNetbeansversiterakhirnetbeans5_5_1linux.bindari http://www.netbeans.org. 2. Sebagairootubahfilenetbeans5_5_1linux.binmenjadifileyangbisadiekseksusi #chmod755netbeans5_5_1linux.bin 3. Mulaiprosesinstalasi: #./netbeans5_5_1linux.bin

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource107

Gambar1.0:MemulaiinstalasiNetBeans 1. TentukanlokasidirektoriuntukinstalNetbeans,biasanyauntukaplikasidiletakan padadirektori/opt.

Gambar1.1:Memilihlokasiinstalasi 2. PilihJavaSDKyangakandigunakanoleh

108PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

Gambar1.2:MemilihJavaSDK 3. SetingPATHaplikasi Editfile/etc/profile,untukmengsetPATHaplikasiNetBeansyangdiinstaldalam direktori/opt/netbeans5.5.1 tambahkanbarisberikutini:

JAVA_HOME="/opt/jdk1.6.0" NETBEANS_HOME="/opt/netbeans-5.5.1" PATH="$JAVA_HOME/bin:$NETBEANS_HOME/bin:$PATH" export JAVA_HOME NETBEANS_HOME PATH

JalankanperintahberikutuntukmengupdatePATH #source/etc/profile

.2.UnInstalNetBeans
UntukmelakukanuninstalasiNetBeans,jalankanperintahberikut: #/opt/netbeans5.5.1/_uninst/uninstaller

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource109

Gambar1.3:UninstalNetBeans

MemulaiNetbeans

Jika PATH aplikasi NetBeans telah di set, untuk memanggil aplikasi NetBeans jalankan perintahberikut:
$ netbeans

Atau
$ opt/netbeans-5.5.1/bin/netbeans

110PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

Gambar1.4:MemulaiNetBeans

3.1MemulaiProjek
Sebelummemulaiprojek,kitaharusmenentukankategoriprojekyangakankitabuat,ada beberapapilihankategoriprojek: General: MembuataplikasiyangmenggunakanlibraryJ2SEdenganmainclass Membuatclassclassuntuklibraryaplikasi Membuataplikasidenganmengimportdirektoriberisisumberkodeprogram MembuataplikasidenganperintahANTyangdidefinisikansendiri. Web Membuataplikasiwebstandard. Membuataplikasiwebdenganmengimportaplikasiwebkedalamprojekweb. MembuataplikasiwebdenganperintahANTyangdidefinisikansendiri Enterprise MembuataplikasiaplikasienterprisedenganmenggunakanclassclassEJB MembuatmodulmodulclassEJB NetBeansPluginModules MembuatmodulmoduluntukNetBeans

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource111

PilihdariMenu:File>NewProject:

Gambar1.5:MemulaiProjekdenganNetBeans Setelahmenentukankategoriprojekyangdibuat,kemudianklikNext.

3.2MembuatProjek

Gambar1.6:MemberiNamaProjek

112PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

Padastep2ini,andadimintauntukmengisinamadanlokasiprojek: ProjectName:HelloDunia ProjectLocation:/home/rojul/labs

3.3WindowKerjaNetBeans

Gambar1.7.WindowKerjaNetBeans

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource113

3.4MembuatClass
File>NewFile

Gambar1.8.MembuatClass Dariwindow,pilihKategoriJavaClassdanTipeFileJavaClass,kemudianpilihNext

Gambar1.9.MemberiNamaClass

IsiNama,LokasidanPaketdariFile,kemudianpilihtombolFinish. 114PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

3.5CompiledanRunningProgram

CompileProject CompileProjectdigunakanuntukcompileseluruhfileyangadadalamproject. Build>MainProject CompileFileJava CompileFiledigunakanuntukcompilesatufiletertentu

Build>CompileNamaFile.java

RunningProject RunningFileJava

Run>RunMainProject

Run>RunFile>NamaFile

AplikasiDekstop

Anda bisa membuat sebuah project Dekstop atau Aplikasi Web dengan NetBeans, untuk graphicbisadipilihjenisfiledarikategoriJavaGUIFormspadasaatinginmembuatfile.

Gambar1.10:TampilanIDENetBeansuntukaplikasiDekstop DalamwindowNetBeansketikamembuatGUItersediawindowpropertyyangdigunakan PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource115

untukmensetnilaipropertydariobject.

5.

AplikasiWeb

NetBeansjugadilengkapidenganTomcatWebServer,Konfigurasitomcatserverbisadilihat denganmemilihtabruntime:

Gambar1.11:RuntimeExplorer Untukmengubahkonfigurasitomcatserverdenganmemilih: ClickKananpadaBundledTomcat>pilihProperties

Gambar1.12:TomcatServerManager Konfigurasifiletomcatserveruntukusersistemberadadalamdirektori: /home/NAMA_USER/.netbeans/5.5.1/apachetomcat5.5.17_base/

116PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource

Referensi
NetBeansIDE:http://www.netbeans.org/products/ Java:http://java.sun.com

PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource117

You might also like