0% menganggap dokumen ini bermanfaat (0 suara)
449 tayangan119 halaman

Bahasa Pemrograman Open Source (Uli)

Teks tersebut membahas tentang bahasa pemrograman Perl, meliputi pengenalan Perl, cara menjalankan program Perl dari file dan command line, serta dasar-dasar Perl seperti program Perl, variabel, tipe data, operator, dan lainnya.

Diunggah oleh

Edi Mahdi
Hak Cipta
© Attribution Non-Commercial (BY-NC)
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
449 tayangan119 halaman

Bahasa Pemrograman Open Source (Uli)

Teks tersebut membahas tentang bahasa pemrograman Perl, meliputi pengenalan Perl, cara menjalankan program Perl dari file dan command line, serta dasar-dasar Perl seperti program Perl, variabel, tipe data, operator, dan lainnya.

Diunggah oleh

Edi Mahdi
Hak Cipta
© Attribution Non-Commercial (BY-NC)
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 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

Anda mungkin juga menyukai