I.MengenalPERL1.TentangPERLPERLadalahbahasapemrogramanyangmenggunakantipedatadinamis,programPERLdapatlangsungdieksekusitanpaharusmelaluiproseskompilasitersendirikeformatbinaryyangdapatdieksekusi.
PERLbanyakdigunakanpadaaplikasimanajemensistemdanjaringan,pemrogramanweb,manipulasiteks,akseskedatabase.
BerikutinibeberapaaplikasiyangmenggunakanPERLyangcukupdikenal:mrtg,SQLLedger(aplikasiakunting),Webmin(aplikasiadmin),spamassasin(antispam).
2.MenjalankanProgramPERL
2.1.EksekusidarifileBerikutinisebuahprogramPERLsalam.pl,yangmencetaksalamuniversaldikonsol,jikaadaargumenpadacommandlinemakaditampilkansetelahsalam.
#!/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.plperludisetpermissionnya.Misalkandenganperintah:
bash%chmod755salam.pl
bash%./salam.plHafizh
assalamu'alaikumHafizh
PastikanprogramPERLdiawalidenganpathlengkapkeinterpreterperlyangterinstaldisistemoperasianda,untuksistemberbasisLinuxdanUnix,pathtersebutharusdiawalidengankarakter'#!',seperticontoh:
#!/usr/local/bin/perl
PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource1
2.2.EksekusidaricommandlinePERLdapatmengeksekusiperintahsecaralangsungdaricommandline,tanpaperlumembuatfileprogram,menggunakanoptionsediinterpreterperl,contoh:
bash%perle'printAssalamu''alaikum\n'
Perhatikanduakutiptunggalditengahkata,karenakutiptunggaldigunakanuntukmembatasiperintah.
Jikamenggunakankutipgandauntukmembatasiperintah:
bash%perleprint\Assalamu'alaikum\n\
3.DasardasarPERL
3.1.ProgramPERLProgramPERLatauskripPERL,biasadisimpandalamfileteksberakhiran.pl.WalaupundemikianperlinterpretertetapakanmengeksekusiprogramPERLyangtidakmenggunakanekstensi.pl.
SebuahprogramPERLyangexecutabledapatmenggunakanhanyastatement,tanpaperlumendefinisikanfungsikhusussepertimain()dalamprogrambahasaC.
ProgramPERLdapatterdiriatasstatemen,deklarasisubroutine,konstruksikondisional,konstruksiloop,konstruksiblock.
3.1.1.StatemenStatemendiakhiridengantandatitikcoma.Statemendapatberbentukdeklarasivariabel,assignmentvariabeldanpemanggilanfungsi.Whitespace(spasi,barisbaru)diabaikan.
print"opensourcesoftware?!",
"it'samiracle",
",doyoubelievemiracle?\n";
3.1.2.KomentarSebagaimanabahasapemrogramanlainnya,programmerPERLdapatmenuliskankomentardalamkodeprogram,denganmenempatkankarakter'#'sebelumbariskomentar,contoh:
#menghitunghitungluas
$area=$pi*$radius*$radius;
Ataudapatjugasetelahbagiankode:
$area=$pi*$radius*$radius;#menghitunghitungluas
2PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
Komentardiperlakukansebagaimanawhitespace.
3.2.VariabeldanTipedataVariabeldigunakanuntukmenyimpandata.PERLmemiliki3tipevariabelutama:skalar,arraydanhash.Namanamavariabel,danidentifierlainnyadalamPERLadalahcasesensitive.
3.2.1.SkalarVariabelskalarmenyimpandatabernilaitunggal,tipedatadapatberupastringataubilangan.Tipedatasecaraotomatisditentukanpadasaatassignmentvariabel.tidakperlumendeklarasikantipedatasebelumassignment.
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,tidakadainterpretasiterhadapkarakterkarakterpadastring.
StringdenganpetikgandamenyatakanbahwainterpreterPERLharusmelakukaninterpretasiterhadapkarakterkarakterpadastringtersebut.
Contoh:
#dicetakdalamsatubaris,karakter\ntidakdiinterpretasikan
$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,dansebagainyayangdijelaskandimanperlvar
3.2.2.ArrayArraymenyimpansekumpulannilaisecaraberurutan(sekuensial),yangbiasadisebutlist,nilainilaiyangdisimpandapatberbedabedatipedatanya.Untukmembacanilaianggotaarraydigunakannomorindeksintegerdimulaidarinol.
Variabelarraydideklarasikanmenggunakankarakter@didepannamavariabel,dataanggotaarrayditempatkandalamkurung(),nilainilaianggotadipisahkanolehkoma.
Nilaianggotaarraydibacamenggunakanoperator[]dannomorindeks.Contoh:
@prima1=(2,3,5,7,11,13,17);
#mencetak'5'
print$prima1[2];
Untukmendapatkanjumlahanggotaarraydigunakanvariabel$#diikutinamavariabel,tapinilainyaadalahjumlahanggotaarraydikurangisatu.Nilaiinijugadapatdigunakanuntukmembacaelementerakhir.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;
Jikasebuahprogrammencobamenulisanggotaarraypadaposisiindeksyanglebihbesardariukuranarray,makaPERLsecaraotomatismenambahukuranarraysampaiposisibarutersebut.Contoh:
@bil3=(10,20,30,40);
#mencetak'ukuranarray:3'
4PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
printukuranarray:$#bil3\n;
$bil3[110]=1234;
#mencetak'ukuranarray:110'
printukuranarray:$#bil3\n;
Membacadariarraydenganindeksyanglebihbesartidakakanmenyebabkanerrordantidakakanmenambahukuranarray.Contoh:
@bil4=(10,20,30,40);
$t1=$bil4[89];
#mencetak'ukuranarray:3'
print"ukuranarray:$#bil4\n";
Jikavariabelarraydievaluasidalamkonteksnilaiskalar(scalarcontext)makavariabeltersebutdievaluasisebagaijumlahanggotaarray,contoh:
#dievaluasidalamscalarcontext
@arr=(10,20,6,19,11,22);
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.HashHashmenyimpansekumpulannilaiyangmenggunakanpasangannamakuncidannilai.Namakuncidalamsebuahvariabelhashharuslahunik,tidakbolehada2pasanganyangmenggunakannamakunciyangsama.
Variabelhashdidefinisikanmenggunakankarakter%diikutinamavariabel.
Nilainilaianggotahashterdiriataspasangannamakuncidannilaiyangdipisahkanolehkoma.Namakuncidanpasangandituliskanberurutan,dapatdipisahkantandakomaataudapatjugadipisahkanolehkarakter'=>'.
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.OperatorPERLmemilikibanyakoperatordanfungsiyangbuiltin,berikutinibeberapaoperatoryangumumdigunakan,selengkapnyadapatdilihatdenganmanperlop.
ManipulasiString
. Concat(penggabungan)
Aritmetika
+ Penjumlahan
Pengurangan
* Perkalian
/ Pembagian
PerbandinganBilangan
'== kesamaan
'!= Ketidaksamaan
< Kurangdari
> Lebihdari
= Lebihdariatausamadengan
PerbandinganString
eq kesamaan
6PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
ne Ketidaksamaan
lt Kurangdari
gt Lebihdari
le Kurangdariatausamadengan
ge LebihdariatausamadenganPerhatikanbahwaPERLmenyediakanoperasipembandingstringdanpembandingbilangan.Stringdibandingkansecaraalpabetis.Secaraalpabetis,string'100'lebihkecildari'8'.Contoh:
$a=100;$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.FungsiPERLmemilikifungsibuiltinyangkaya,salahsatuyangsudahdiperkenalkanadalahprint.
Fungsidapatmenerimanolataulebihargumen.Argumensebuahfungsidapatberupaskalar,list,ataukeduanya.
Pemanggilanfungsidapatmenggunakantandakurung()diantaraargumen,dapatjugatidak.Fungsiprintadalahfungsiyangmenerimaargumenlist.Contoh:
printsaya,belajar,PERL;
#samadengan
PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource7
print(saya,belajar,PERL);
Fungsiprintjugadapatmenerimaargumenskalarberupafilehandledanlist.TentangfilehandleakandijelaskandibagianFileInputdanOutput.
Fungsidapatmengembalikannilaiskalarataulist.
Berikutinifungsilocaltime,yangmengembalikanlistberisidatawaktu,dipanggiltanpaargumen:
@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",1900+$year,"\n";
PerludiingatbahwaPERLpertamakalidikembangkandilingkunganUnix,jadiakanbanyakditemukanfungsifungsiyangfamiliardengansistemoperasiini,misalnyayangberhubungandenganfilesystem,socket,network,interprocesscommunication,danprocesscontrol.
Daftarfungsibuiltinsecaralengkapdapatdibacadenganman perlfunc.
Penjelasanuntukfungsitertentudapatdicaridenganperldoc -f . Contoh:bash% perldoc -f localtime
3.5.KonstruksiKondisionalBerikutinikonstruksikondisionalyangdisediakanPERL
3.5.1.ifMengeksekusistatemenjikakondisibernilaibenar.Untukpercabanganmenggunakanelsif danelse.Bentuknya:
if(kondisi1){
#statemenstatemen
}
elsif(kondisi2){
#statemenstatemen
}elsif(kondisi3){
#statemenstatemen
}else{
8PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
#statemenstatemen
}
3.5.2.unlessAdalahkebalikandariif.
3.6.KonstruksiLoopPERLmengenalbeberapajenisloop:
3.6.1.forDigunakanuntukmelakukanpengulanganberdasarkan3ekspresiyangmasingmasinguntuk:memulailoop,menentukanapakahmelanjutkaneksekusiloop,dieksekusipadaakhirloopsupayakondisiuntukmengakhiriloopdapatdicapai.Bentuknya:
for(;;){
#statemenstatemen
}
Ekspresiyangumumdigunakanadalahsebagaiberikut:
for($i=0;$i
}print"faktorial6=$p\n";
#atauterhadaparrayslice
foreach$q(@hari[2..5]){
print"$q\n";
}
3.6.3.whileLoopdieksekusiselamakondisiadalahTRUE.Untukkeluardariloopharusdenganmengubahkondisimenjadifalseataumenggunakanstatementlast;
Bentuknya:
while(kondisi){
#statemen
}
3.7.InputdanOutputkefile
3.7.1.MembacadarifileteksSebelumfiledapatdibacamakaharusfiledibukadenganfungsiopen,denganmodebaca,contoh:
open($fh,'/etc/passwd');
Variable$fhadalahfilehandleyangdiperlukanuntukmembacadanmenutupfile.
Selanjutnyasetiapbarisdibacadenganoperator.sebagaiberikut:
while($line=){
#memproses$line
}
Setelahselesaifileditutupdenganfungsiclose,contoh:
close($fh)
3.7.2.MenuliskefileteksPerintahyangsamadenganprogramdiatasdapatdigunakanuntukmenuliskefile.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=){
print$fh2$line;
}
close($fh1);
close($fh2);
Ekspresior die ... digunakansebagaierrorhandlerjikafiletidakdapatdibuka.Variabelkhusus$!digunakanuntukmenampilkanpesanerrordarisistem.
3.8.SubrutinPadaprogramaplikasiumumnya,kumpulanstatemenyangmengimplementasikansebuahoperasitertentudidefinisikandalamsebuahsubrutin.
Beberapasubrutinbiasanyadidefinisikandalamsebuahfiletersendiri,sehinggadapatdigunakanolehberbagaiprogrampemanggil.
Berikutinibentukpendefinisiansubrutin:
sub{
}
Subrutindapatmenerimaparameter,tapiPERLtidakmengenalnamedformalparameter,parameteryangdikirimkankesubrutindapatdiaksesdalamsubrutinmelaluiarraykhusus@_,berikutinicontohsubrutinsederhanayangmenghitungnilaifaktorial:
subfaktorial{
my($num)=@_;
my$res=1;
foreachmy$a(1..$num){
$res*=$a;#atau$res=$res*a
}
return$res;
PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource11
}#returnTRUEvalue
1;
Perhatikanbahwajikasubrutindidefinisikandifiletersendiri,makafiletersebutharusmengembalikannilaiTRUE,dalamprogramdiatasdigunakanbilangan1.
Jikasubrutintersebutdisimpandifile/home/didi/mylib/math.pl,makadapatdipanggildariprogramlainnyasebagaiberikut:
require/home/didi/mylib/math.pl
print"Faktorial6=",faktorial(6),"\n";
Penjelasanlebihlengkaptentangsubrutindapatdibacadarimanperlsub
4.PenutupPERLadalahbahasapemrogramanyangberdayagunatinggi,yangterusdigunakandandikembangkanolehkomunitasopensource.
Sepertihalnyabahasaopensourcelain,PERLmemilikisistemdokumentasiyangsangatlengkap,pembacasangatdianjurkanmenelaahmanualPERLyangterdistribusibersamasourcecodePERL.
12PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
II.MengenalPHPPHPadalahbahasapemrogramanscriptyangdinamis.ProgramPHPdapatdijalankansebagaiaplikasiwebyangmemerlukanwebserverdandapatjugadijalankanmenggunakaninterpreterPHP,sebagaiaplikasikonsolataudesktopbased.
PHPadalahbahasapemrogramanyangkayadenganlibraryuntukpengembanganaplikasimulaidaridukungankeberbagaidatabasemanagementsystem,dukunganlibraryGraphicalUserInterface,sampailibraryuntuksistemadministrasi.
1.MenginstalPHPPHPdiinstalsebagaimoduleapachedansekaligusmenginstalPHPCLI(commandlineinterpreter),namanamadirektori(misal:/dir/instalasi/xxx/anda)dapatandaubahsesuaidengankeinginananda.
Karenanyaharusmenginstalapacheterlebihdahulujikaapachebelumterinstal.
BerikutinicarainstalasiPHP5darisourcecode.
1.1.InstalasiApache1. InstalApache,pertamadownloaddarihttpd.apache.org,dalamhalinikami
menggunakanapache1.3.37
2. Uncompressdisembarangdirektori
bash%tarzxvfapache_1.3.37.tar.gz
3. Konfigurasidankompilasi
bash%cdapache_1.3.37
bash%./configureprefix=/dir/instalasi/apache/andaenableshared=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=/dir/instalasi/php/andawithapxs=/dir/instalasi/apache/anda/bin/apxswithconfigfilepath=/etc
bash%make
4. Instal
bash%makeinstall
5. Instalasimodulephpdanphpcliselesai
2.MenjalankanProgramPHPProgramPHPdapatdijalankandengan2modus:
2.1.AplikasiKonsolBuatprogramsalam.phpberikutinidisebarangdirektori:
3.1.ProgramPHPFileprogramPHPadalahfileteksyangdapatdibuatdenganeditorteksbiasa(misal:vim,gedit,kedit).
SebuahfileprogramPHPpalingsedikitterdiriatassatubarisstatemenyangdibatasiolehtagpembukablokstatemendantagpenutupblokstatemen.
Tagpembukablokadalah.PHPmengenal3jenistagpembukalainnyayangtidakdirekomendasikanpadamanualPHP,dankarenanyatidakdibahasdisini.
SebuahprogramPHPdapatterdiri2jenisstatemen:
statemenPHPyangdibatasiolehtagtersebut
statementnonPHP(misal:HTML,WML,XML)
Keduajenisstatemendapatberselangselinglebihdarisatukalidalamprogram.
PHPmengabaikanwhitespace(spasi,tab,barisbaru)sebelumdansesudahstatemen,jugawhitespacediantaratokentokendalamstatemen.
Semuacontohprogramdalamtulisaninitidakmenuliskantagpembukauntukmenghematruang/kertas,kecualijikaadabagianprogramyang menggunakanstatemennonPHP.
3.2.KomentarPHPMengenal3jeniskomentar:
1. Diawalidengan//,berlakuhanyauntuk1baris
2. Diawalidengan#,berlakuhanyauntuk1baris
3. Diawalidengan/*dandiakhiri*/,berlakuuntuklebihdari1baris,dapatjugadigunakanuntukmenyisipkankomentardiantaratoken.
Ketigajeniskomentardapatberadapadabaristersendiriataudibelakangstatement.Contoh:
//komentar1
echo'stringsatu',"\n";//komentar2
echo'stringdua',"\n";#komentar3
/*
komentar4,komentarini
melintasbeberapabaris
*/
echo/*komentar5,diantaratoken*/'stringtiga',"\n";
PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource15
3.3.TipeDataPHPmembedakanoperasiyangdapatdilakukanterhadapsetiaptipedata.
3.3.1.TipePrimitifTipeprimitifadalahtipedatadasaryangtidakdapatdibagilagi(decompose)atastipedatayanglebihdasarlainnya.
3.3.1.1.BooleanPHPmengenaltipebooleanyaitu:TRUEdanFALSE,keduanyacaseinsenstive.
JadiTrue,true,atauTRUEadalahsama.
3.3.1.2.IntegerIntegerataubilanganbulatdiPHPtidakmembedakanpanjangbyte(longatauintegerbiasa),keduanyaadalahinteger.Integerliteraldapatdituliskansebagaidesimal(default,tanpaprefiks),octal(denganprefix'0')atauhexadecimal(denganprefix0x).Contoh:1234567890#desimal
01234567#octal
0x123456789abcdef#hexadecimal
3.3.1.3.floatLiteralfloatmenggunakan'.'untukpembataspecahandesimal,danmenggunakansimboleuntukpangkatdesimal.Padacontohberikutinike4bilanganyangditulisdengancaraberbedaadalahsamabesarnya:.123456789
0.123456789
123456789e9
123.456789e4
3.3.1.4.stringStringdalamPHPadalahderetenkarakter.Literalstringdapatditulisdengan3cara:
16PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
3.3.1.4.1.PetikgandaStringdenganpetikgandamengenalkarakterkhusus(barisbaru,tab)danmelakukanekspansivariabel
3.3.1.4.2.PetikTunggalStringdenganpetiktunggaltidakmengenalkarakterkhusus(barisbaru,tab)dantidakmelakukanekspansivariabel
3.3.1.4.3.HeredocSintakheredocmemperlakukanstringsepertidoublequote,hanyasajamenggunakandelimiteryangberbeda,yaituderetankarakteralpahanumericataugarisbawah,yangdimulaihanyadengankarakternondigitataugarisbawah.Contoh:'otomatisasisysadmin',
'c'=>'aplikasisystem',
PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource17
'ruby'=>'aplikasiweb',
'java'=>'aplikasienterprise'
);
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.ObjekTipedatainimenyimpanreferensikeinstanceclass.Tipedataobjekdibuatmenggunakanconstructorclass.PembahasanselengkapnyaadadibagianClass.
3.3.3.TipeKhusus
3.3.3.1.ResourceResourceadalahtipekhususyangmenyimpanreferensikeresourceeksternal.
3.3.3.2.NULLMenyatakanketiadaannilai,tipedatainihanyamemilikisatunilai:NULL
3.3.4.KonversikebooleanPHPmelakukankonversidaritipedatalainkebooleandalamkonteksyangmemerlukantipebooleanberdasarkanaturanyangjelas.Salahsatukonteksyangmemerlukantipebooleanadalahstatemenkondisional(misal:if).SemuanilaiberikutiniakandianggapFALSEolehPHP:
booleanFALSE integer0(nol) float0.0(zero) stringkosong,danstring"0" arrayyangtidakmempunyaielemen. objectyangtidakmempuyaivariabelmember(PHP4) tipekhususNULL semuavariabelyangdiunset
18PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
3.4.VariabelVariabeldigunakanuntukmenyimpandata,selanjutnyadatadimanipulasimelaluivariabel.
3.4.1.AssignmentVariabeldiberinilai(=data)melaluiassignment.
Variabeltidakperludideklarasikansebelumdiberinilai.
$a=1000;
$b='iniadalahstring';
$c=stringinibergabungdengan'$b';
Jikaekspresimengacukevariabelyangbelumdidefinisikantidakmenyebabkanerror.
echo$a,$b,$c,\n;
Assignmentkevariabeldapatmenghasilkandatabaru(dengannilaiyangsama),atautidakmenghasilkandatabarutapihanyamenghasilkanreferensibaru.
$a=1234;
$b=$a;#$bberisisamadengana
PadaPHP5,assignmentdarivariabel(yangdiassignke)objekkevariabellain,tidakmenyebabkanadanyadatabaru,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);
10.$k2=$k1;
11. $k2>X+=222;#Xdi$k2diubah=227
12.echo$k1>X,"\n";#X$k1jugaberubah=227
UntukmendapatkanhasilyangsamadiPHP4,perlumenggunakanreferenceassignment=&,baris10ditulissbb:
$k2=&$k1;
Referenceassignment=&,jugadapatdigunakanuntukvariabelprimitif:
PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource19
$x=200;
$y=&$x;
$y+=300;
echo$x,\n;#500
3.5.EkspresidanOperatorEkspresiadalahsegalasesuatuyangmemilikinilai.
Ekspresimeliputinilailiteral,pemanggilanfungsiyangmengembalikannilai,hasiloperasi,termasukassignment.
AssignmentdalamPHPmemilikinilaidanadalahekspresijuga.Halinidapatmenjadisumbererroryangtidakmudahditemukan,ketikayangingindilakukanadalahujikesamaan(equality==):
#programberikutinicontohpenggunaanekspresiyangSALAH
$a=123;
if($a=1000){#selaluTRUE,seharusnya$a==1000
echo$asamadengan1000\n;
}
$b=0;
if($b=0){#selaluFALSEseharusnya$b==0
echo$bsamadengan0\n;
}
Padabagianberikutnyadibahasberbagaioperator,setiappenjelasanlangsungmenggunakancontoh.
3.5.1.OperatoraritmetikaBerlakuuntuktipedatabilangan.
penjumlahan,perkalian,pembagian,pengurangan,modulus.$a=10;$b=20;
$c=$a+$b;//penjumlahan,hasil30
$c=$a$b;//pengurangan,hasil10
$c=$a*$b;//perkalian,hasil200
$c=$a/$b;//pembagian,hasil0.5
$c=$a%$b;//modulus,hasil10
20PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
3.5.2.Operatorincrementing/decrementingMenambahataumengurangibilangandengan1,terdiriatas:
postincrement,preincrement,postdecrement,predecrement.
$a=10;
$b=$a++;//postincrement
echo"b==$b,a==$a\n";//b==10,a==11
$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==11
$b=$a;//predecrement
echo"b==$b,a==$a\n";//b==10,a==10
3.5.3.OperatorassignmentAssignmentmenghasilkannilaibarusesuainilaiexpresidisebelahkananoperator=.$a=10;
$c=($b=10)+$a;//$c==20,$b==10
$a+=10;//$a==20
$c=($b+=10)+$a;//$c==40,$b==20,$c==20
3.5.4.OperatorPerbandinganMembandingkanantara2nilai.Berikutinioperasidancontohnya:
3.5.4.1.Ternaryekspresi1?ekspresi2:ekspresi3
Operator'?'inimengembalikannilaiekspresi2jikaekspresi1bernilaiTRUEdanmengembalikannilaiekspresi3jikaekspresi1bernilaiFALSE.//ternary
$hasil=true?'benar':'salah';
PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource21
echo$hasil,"\n";//benar
$hasil=false?'benar':'salah';
echo$hasil,"\n";//salah
3.5.4.2.Equalekspresi1==ekspresi2
Operator'=='inihanyamenghasilkannilaiTRUEjikanilaiekspresi1samadengannilaiekspresi2,jikatipedatakeduaekspresiberbedamakasebelumoperasidijalankanekspresi2dikonversikantipedatanyaketipedataekspresi1.
//equal
$a=10;$b='10';
echo$a==$b?'true':'false',"\n";//true
3.5.4.3.Identicalekspresi1===ekspresi2
Operator'==='inihanyamenghasilkannilaiTRUEjikanilaiekspresi1samadengannilaiekspresi2dantipedatakeduanilaiekspresisama.
//identical
$a=10;$b='10';$c=10;
echo$a===$b?'true':'false',"\n";//false
echo$a===$c?'true':'false',"\n";//true
3.5.4.4.NotEqualekspresi1!=ekspresi2
ekspresi1ekspresi2
Operator'!='dan''inihanyamenghasilkannilaiTRUEjikanilaiekspresi1tidaksamadengannilaiekspresi2,jikatipedatakeduaekspresiberbedamakasebelumoperasidijalankanekspresi2dikonversikantipedatanyaketipedataekspresi1.
//notequal
$a=10;$b='10';$c=11;
echo$a!=$b?'true':'false',"\n";//false
echo$a!=$c?'true':'false',"\n";//true
//notequal
$a=10;$b='10';$c=11;
echo$a$b?'true':'false',"\n";//false
22PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
echo$a$c?'true':'false',"\n";//true
3.5.4.5.NotIdenticalekspresi1!==ekspresi2
Operator'!=='hanyamenghasilkannilaiTRUEjikanilaiekspresi1tidaksamadengannilaiekspresi2dantipedatakeduanilaiekspresisama.
//notidentical
$a=10;$b='10';$c=10;
echo$a!==$b?'true':'false',"\n";//true
echo$a!==$c?'true':'false',"\n";//false
Operatorgreaterthan(>),smallerthan(=),smallerequals(ekspresi2
ekspresi1$b?'true':'false',"\n";//false
echo$a
3.5.5.2.LogicalORekspresi1orekspresi2
OperatorORmenghasilkannilaiTRUEjikaadasalahsatudariekspresi1danekspresi2bernilaiTRUE.
//or
echo(trueortrue)?'true':'false',"\n";//TRUE
echo(trueorfalse)?'true':'false',"\n";//TRUE
echo(falseorfalse)?'true':'false',"\n";//FALSE
3.5.5.3.LogicalXORekspresi1xorekspresi2
OperatorXORmenghasilkannilaiTRUEjikasalahsatudariekspresi1danekspresi2bernilaiTRUE,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,danmenghasilkannilaiFALSEjikaekspresi1bernilaiTRUE.
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
Padaekspresitersebutjikaekspresi1bernilaiFALSEmakaekspresi2danekspresi3tidakakandieksekusi.Begitujugapadacontohberikut:
ekspresi1||ekspresi2||ekspresi3
Padaekspresitersebutjikaekspresi1bernilaiTRUEmakaekspresi2danekspresi3tidakakandieksekusi.
3.5.6.OperatorbitOperatoriniberlakuuntukintegerdankarakterASCII.
3.5.6.1.BitwiseANDb1&b2Menghasilkanbityangdisetjikabit1danbit2jugadiset.//9=1001
//10=1010
echo9&10,"\n";//8=1000
3.5.6.2.BitwiseORb1|b2Menghasilkanbityangdisetjikasalahsatudaribit1danbit2diset
echo9|10,"\n";//11=1011
3.5.6.3.BitwiseXORb1^b2Menghasilkanbityangdisetjikasalahsatudaribit1danbit2diset,tapitidakkeduanya.
echo9^10,"\n";//3=0011
BitwiseNOT~b1
Menghasilkanbityangdisetjikab1tidakdiset,dankebalikannya
PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource25
Shiftleft(geserbitkekiri)b11,"\n";//5=0101
3.5.7.OperatorStringOperatordot(titik)digunakanuntukmenggabungkanstringdenganstringatautipedatalainnya.Contoh:$a='saya...';
$b='belajarphp';
$c=$a.$b;//'saya...belajarphp'
3.6.KendaliAlurProgram
3.6.1.ConditionalStatemenifelseifelsedigunakanuntukmengujibeberapakondisi.Berikutinicontohprogrammembacabilangandaristdin(keyboard),lalumembandingkandenganyangadadiprogram:$ditebak=123;
echo"ayotebak:";
$tebak=chop(fgets(STDIN));
if($tebak==''){
echo("kosong!\n");
}elseif($tebak$ditebak){
echo("terlalubesar\n");
26PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
}else{
echo'benar...',"\n";
}
3.6.2.switchSwitchdapatdigunakansebagaimanaifelseifelse,tapilebihtepatlagidigunakanuntukmengevaluasisebuahkondisilalumembandingkanhasilevaluasitersebutdenganliteralintegerataustring.Perhatikansetelahswitchdigunakanstatemenbreakuntukmencegahstatemenberikutnyadalamblokswitchdieksekusi: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"slurp..slurp..\n";
break;
case3:
echo"yaak..bleek..\n";
break;
default:
echo'tidakada',"\n";
}
3.6.3.StrukturloopStrukturloopadalahstrukturuntukmelakukaniterasiataupengulanganeksekusisatuataubeberapastatement.PHPmemilikibeberapastrukturloop:for,while,dowhile,foreach.forMenggunakan3blokekspresiyangdieksekusisecaraberbeda:
PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource27
1. satukalidiawaleksekusistatemenfor2. setiapkalidiawalloopdievaluasinilainyauntukmenentukanapakaheksekusiloop
berikutnyaakandilakukan3. setiapkalidiakhirloop
1. echo"hitungfaktorialdari:";
2. $n=chop(fgets(STDIN));
3. $faktorial=1;
4. for($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),jikatidakbenarmakaeksekusistatemenforberakhir.
3. Sebelummengulangeksekusiloop,nilai$adikurangi14. Kembalikelangkah2.
Ketigablokdapatterdirilebihdarisatuekspresi,yangdipisahkanolehkoma(,).Jikablokkeduaterdirilebihdarisatuekpresimakablokekspresitersebutdiperlakukansepertihalnyajikakomadigantidenganoperator||(logicaloperatoror).
#pembangkitfibonacci
echo"hitungfibonaccisampai:";
$maks=chop(fgets(STDIN));
for($a=0,$b=1;$b
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
}
}while($tebak!=$ditebak)
3.6.3.3.breakStatementbreakdigunakandidalamloopuntukmengubahalureksekusisehinggakeluardarilooptersebut.Tapijikalooptersebutadadidalamloopyanglain,makaeksekusiberalihkeloopluar,tepatsetelahakhirloopdalamtersebut.
1. $ditebak=123;
2. while(true){#loop1
3. while(true){#loop2
4. echo"ayotebak:";
5. $tebak=chop(fgets(STDIN));
6. if($tebak==''){
7. echo("kosong!\n");
8. }elseif($tebak$ditebak){
11. echo("terlalubesar\n");
12.}else{
13.echo'benar...',"\n";
14.break;
15.}
16.}#akhirloop2
17. echo"lanjut?";
18.ya=chop(fgets(STDIN));
19.if($ya=='n')break;
20.}#akhirloop1
Perhatikanpadacontohada2loop(dimulaidaribaris2dan3).Perintahbreakpadabaris14hanyamengalihkaneksekusidariloop2keloop1,tapitidakmengeluarkandariloop1.Diperlukanstatemenbreak(baris19)dariloop1untukdapatkeluardarilooptersebut.
3.6.3.4.continueStatemencontinuedigunakanuntukmengubahalureksekusiprogramagarsegera
30PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
menjalankaniterasiberikutnyasehinggastatemenstatemendibawahstatemencontinueinitidakdieksekusi.$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("terlalubesar\n");
}else{
echo'benar...',"\n";
break;
}
if($coba
untukarrayasosiatif:$hash=array('kode'=>'A123','nama'=>'sususapi','harga'=>12000,'satuan'=>'liter');
foreach($hashas$key=>$value){
echo$key,'=>',$value,"\n";
}
3.6.3.6.returnMengubahalureksekusisehinggabarisbarisberikutnyatidakdijalankanlagi.Jikadigunakandalamfungsistatemenreturndapatdigunakanuntukmengembalikannilaikepemanggilfungsi.
3.6.3.7.ExceptionExceptionadalahobjectyangdigunakanuntukmengubahekselusiprogramketikaterjadikesalahan(error).Untukmenanganiexceptiondigunakankonstruksibloktrydancatch.Konstruksibloktry{}berisistatemenyangdapatmengakibatkanterjadinyaexception,konstruksicatchterdiriatasbagiandeklarasiobjectexceptionyangditanganidanbagianblokstatemenyangmenanganiobjekexceptiontersebut.Untukmengakibatkanexceptionprogrammenggunakanstatementthrow,yangmenjadiparameterdarithrowadalahobjekException.ExceptionbarudikenalpadaPHP5.Contoh:try{
echo'barisberikutnyaakanmenghasilkanexception',"\n";
thrownewException('errorygdisengaja');
echo'barisiniakandiabaikan',"\n";
}catch(Exception$e){
echo'adaexception..',$e,"\n";
}
Melaluipenggunaanexceptionsecaratepat,dapatmemudahkanpenangananerror.
Exceptionadalahcaraalternatifuntukpensignalanerroryanglebihbaikdaricarakonvensionalmenggunakanreturnvalue.Returnvalueseharusnyahanyadigunakanuntukmengembalikanhasilkomputasi,dantidakpernahmengembalikansignal(kode)error.
32PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
3.7.FungsiPHPmengenal3jenisfungsi:
1. FungsiyangmerupakanbagiandariPHP(bultin)
Fungsiiniselalutersediauntukdigunakan.
2. Fungsiyangdisediakanolehextensionmodule.
Fungsijenisinibarutersediasetelahusermenginstalextensionmoduletertentu.
3. FungsiyangdidefinisikanolehpenggunabahasaPHP(userdefinedfunction)
FungsijenisinidibuatsendiriolehpenggunabahasaPHP,barutersediajikadefinisifungsidimasukkankedalamscopeprogrammelaluistatement:require,include,dansejenisnya,
Fungsiyangdibahaspadabagianiniadalahyangterakhir.
3.7.1.MendefinisikanFungsiFungsididefinisikanmenggunakankeywordfunction,diikutinamafungsi.
Fungsidapatmenerimanolataulebihparameterfungsidandapatmenghasilkannilaikeluaran,dapatpulatidak.
Berikutinicontohfungsiyangtidakmenerimaparameterfungsi,dantidakmengembalikannilai
,hanyamencetakbentukpiramidakestdout:
functionpiramida(){
$t=20;
for($i=$t,$j=0;$i>0;$i,$j++){
echostr_repeat('',$i);
echostr_repeat('^',$j*2+1),"\n";
}
}
Fungsipiramida,menggunakanfungsibuiltinstr_repeatuntukmenghasilkanstringyangberulang.
piramida();
PHP5mendukungjumlahparameterfungsiyangpanjangnyatidaktertentu.
Berikutinicontohfungsiyangmenghasilkanderetfibonacciyangdikembalikansebagaiarray,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$maxuntukmembatasibilanganterbesaryangakandihasilkan,danmengembalikanderetanbilangandalambentukarray.Berikutcarapemanggilannya:
$deret=fibonacci(100);
print_r($deret)#cetakarray
3.7.2.NilaiDefaultuntukparameterUntukparameterfungsibertipeskalar(numerik,string,array,bukanobjek),dapatditentukannilaidefaultnya,contohmencetakbilanganfibonaccisecararekursif:
functionfibonacci($max,$a=0,$b=1){
if($b
3.8.ClassPHPsebagaibahasayangmendukungpemrogramanberorientasiobjek(ObjectOriented Programming)mengenalstrukturclass.Classmemudahkanenkapsulasidatadanreusabilitaskodeprogram.MendefinisikanclassClassdidefinisikanmenggunakankeywordclassdiikutinamaclassyangbiasanyadiawalidenganhurufkapital,badan(implementasi)classdibatasiolehkurungkurawal.Sebuahclassdapatmemilikisatuataulebihmethod,yaitufungsiyangberasosiasidenganclassatauobjekdariclasstersebut.Sebuahclassdapatmemilikimethodkhususuntukmenginisialisasikanobjekdariclasstersebutyangdisebutconstructor,constructoradalahmethodpertamadariclassyangdieksekusisebelumnyaobjektersebutdipanggil.JikaconstructortidakdidefinisikanmakaPHPmenyediakandefaultconstructor.Classdapatmendefinisikanmembervariabel,yaituvariabelyanghanyadapatdiaksesmelaluiobjectdariclasstersebut.Membervariabeldapatdidefinisikanlangsungdalammethodmelaluiobjekkhusus$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
Untukmengaksesmembervariableataumembermethoddarisebuahclassmelaluiobjeknyamakadigunakanoperator->.
Objeksebuahclasshanyadapatdiadakanmelaluiconstructorclasstersebut,baiksecaralangsungdipanggilmenggunakannewataumelaluimethodlain.
$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.ReusabilitasPHPmenyediakankonstruksiuntukmendukungreusabilitaskodeprogramdalambentukclass,fungsi,konstantaatauvariabelglobal.Ada4statemenyangdigunakanuntukreusabilitaskodeprogram
3.9.1.includeDigunakanuntukmemasukkan(toinclude)filekebarisditempatkannyastatemenincludeini,statemenincludememerlukanparameterberupapathkefileyangakandiinclude.
Pathdapatberupapathrelatifataupathabsolut.
3.9.2.requireStatemenrequirepersissamadenganincludehanyasajajikafileyangakandimasukkantidakditemukandapatmenyebabkanfatalerrorsehinggamenghentikaneksekusiprogram.
Menggunakanrequirelebihmenjamindisertakannyafileataudefinisifungsiyangdiperlukan.
3.9.3.include_onceSamadenganinclude,tapijikafilesudahpernahdiincludesebelumnyatidakakan
36PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
dimasukkanlagi.
3.9.4.require_onceSamadenganinclude_once,tapijikafileyangdiincludetidakditemukanmenyebabkanfatalerror.
3.10.MenggunakanFungsidanClassdanfilelainAgarsebuahfungsiatausebuahclassdapatdigunakanolehprogrampemanggilyangberbeda,makafungsiatauclasstersebutdisimpandalamfiletersendiri.
Statemenrequire_oncesangattepatdigunakanuntukmenyertakandefinisifungsiatauclassdarifiletersebut,karenamenjamindefinisifungsiatauclasshanyasatukalidipanggil.
MisalclassVektordisimpandalamfileVektor.phpdidalamdirektori:/home/fadhilah/classes,makajikaprogramtestvektor1.phpperlumenggunakanclasstersebut,digunakanrequire_once:
1. require_once('/home/fadhilah/classes/Vektor.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";
7. echo'$v3>i==',$v3>i,"\n";
8. echo'$v3>j==',$v3>j,"\n";
Dapatjugamengubahinclude_pathdariPHPdenganfungsiset_include_path,baris1digantikanoleh2barisberikut:
set_include_path(get_include_path()./home/fadhilah/classes/);
require_once('Vektor.php');
Keuntunganmenggunakanset_include_pathadalahstatemenrequire_oncetidakperlumenyertakanpathkefilefiletersebut,hanyaperlumenyebutkannamafilenyasaja.
4.AplikasiWebBagianinimenjelaskanaspekaspekbahasaPHPyangkhususberhubungandenganpengembanganaplikasiWeb.Agarcontohcontohpadabagianinidapatdijalankan,diperlukanwebserver(misal:apache)yangmendukungaplikasiPHP.CaramensetupapacheagardapatmendukungPHPtidakdijelaskan.
PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource37
4.1.MethodGETdanPOSTAplikasiwebadalahberbasiskaninteraksiantara2program,yangmasingmasingberperansebagaiclientdanserver.
Dalamkonteksbahasanini,serveradalahwebserver(misal:apachehttpd2,apachehttpd1,tomcat,jetty)danclientadalahwebbrowser(misal:mozillafirefox,konqueror,epiphany,opera)
Serveradalahprogrampertamayangberjalandanmenyediakanserviceyangdapatdirequestolehclient.
Selanjutnyaclientberjalan,danmengirimkanrequestkepadaserver,servermenerimadanmemprosesrequesttersebutdanmenghasilkanresponse.
Clientmenerimaresponsedanmerepresentasikanresponsetersebutkepengguna.
Webrequestdapatdikirimkandalam2method(cara)GETdanPOST.
MethodGETdigunakanapabilaoperasiyangdiharapkanterjadidisisiserver,akibatadanyarequestini,tidakakanmengakibatkanperubahan(padadataatausumberdata).
MethodPOSTdigunakanapabilaoperasiyangdiharapkanterjadidisisiserver,akibatadanyarequestini,akanmengakibatkanperubahan(padadataatausumberdata).
Webrequestdapatmemilikiparameter,yangdiperlakukanolehaplikasisebagaidatastring.
PadamethodGET,parametertersebutdikirimkansebagaibagiandariURL,danpanjangparameterdibatasiolehpanjangmaksimumURL.
PadamethodPOST,parametertersebutdikirimkandalambodyrequest.Panjangparametertidakterbatas.
4.2.MenanganirequestAplikasiPHPyangbaik,dirancanguntukmenanganirequestdenganbenar.Menanganirequestterdiriatas:
membacadatadarirequestsebagaimasukan,termasukparameterrequest. Melakukanprosesuntukmenghasilkankeluaranberdasarkandatarequest mengirimkanresponse
4.2.1.RequestGETPadaaplikasiPHP,parameterdarirequestGETdapatdiaksesmenggunakanvariabelkhusus$_GETyangsudahdidefinisikanolehPHP.
Variabel$_GETiniadalaharrayassosiatif,semuavalueharusdiaksesmenggunakankey.
4.2.2.RequestPOSTParameterdarirequestPOSTdiaksesmenggunakanvariabel$_POST.
38PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
Sepertihalnya$_GET,variabelinijugaarrayassosiatif.
Contohaplikasiwebsederhana:Berikutinicontohaplikasiwebsederhanayangmenerapkanberbagaisubyekyangsudahdibahas.
4.3.PenjelasanProgram
4.3.1.Filehead.phpBerisiheaderuntuksetiaphalamanweb,agartampilankonsisten.Headerjugacocokuntukmenempatkanincludekefilefileyangmenyediakanclassclassataufungsifungsiyangdiperlukanolehaplikasi.
WarungWeb
4.3.2.Fileordersvc.phpFileiniberisidefinisiclassyangdiperlakukanaplikasiuntukmemprosespesanan.
}
//@returndaftarproduk
functionproduk(){
return$this>produk;
}
//@returnpilihan
functionpilihan($prod){
return$this>pilihan[$prod];
}
//prosespesanan
functionproses_pesanan($prod,$kirimke,$konfig)
{
echo'Terimakasih,',"\n";
echo"Kamisegeramengirimkanpesananke$kirimke,kalaukebetulanlewat..\n";
if($konfig){
echo'';
foreach($konfigas$d){
echo'',$this>pilihan[$prod][$d],"\n";
}
echo'';
}else{
echo"Andamemilihmenustandard\n";
}
}
}
?>
4.3.3.Filemenu.phpMenampilkanmenupilihan:
Selamatdatangdiwarung
Apayangandainginkan:
40PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
4.3.4.Filepesan.phpUntukmemprosespesanan,danmenampilkanresponse.
Jikapesanansudahdiprosesformtidakditampilkanlagi
?>
Konfigurasi
kirimkealamat
HTML(HypertextMarkUpLanguage)dangunakanHTMLeditordanprevieweryangcerdassehinggamembantudalammenemukankesalahankesalahansintakspenulisan.
PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource43
44PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
III.MengenalPython1.ApaituPythonPythonadalahbahasapemrogramanyanginterpreted.Programpythondapatlangsungdieksekusimenggunakaninterpreter,tanpamelaluiproseskompilasitersendiri.
Pythontelahdigunakanuntukberbagaiaplikasi,mulaidariutilitasuntukadministrasisistem,pemrogramangame,aplikasiwebterintegrasidengandatabasesampaiaplikasidesktopberbasisGraphicalUserInterface.
Pythonadalahbahasatingkatlebihtinggi,lebihtinggidariC/C++,memilikistrukturdatabuiltindengankemampuanoperasiyangkayadanluwes,sehinggamemungkinkanprogramPythonlebihringkasdaripadajikaditulisdenganC/C++ataubahkanJava.
Pythonadalahbahasayangmodular,setiapprogrampythonadalahmodule,yangdapatdiimportolehprogramlainuntukdimanfaatkanobjekataufungsinya.
Librarypythonsangatextensible,bagiandayangmenguasaipemrogramanC,tidaksulituntukmenambahfungsibaruataumodulekedalamlibrarypython.
2.MenjalankanInterpreterPythonSetelahinterpreterpythonterinstal,makadapatdijalankandengancaracaraberikutini:
1. Melaluishell,biasanyauntukmenjalankan1statemenpython:bash$ python -c "print 'assalamu\'alaikum'"
2. eksekusistatemensecarainteraktif,menggunakanpythonsebagaimanashellsistem,setiapstatemendiketikpadapythonshellprompt,danlangsungdieksekusiolehinterpreter,
bash$python
>>>printassalamu'alaikum
assalamu'alaikum
>>>60*60*24
86400
Padatulisanini,beberapacontohdiberikandalammodeeksekusiinteraktif,bariscontohtersebutdiawalidengan'>>>'
3. Menggunakanprogramatauscriptpython.
Buatprogramsalam.py,sepertiberikut:
#!/usr/local/bin/python
printassalamu'alaikum
PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource45
1. Perhatikanbarispertamamengacukepathinterpreterpython,dijalankansebagaiberikut:bash$ chmod 755 salam.pybash$ ./salam.py
3.ProgramPythonProgrampythonadalahprogramteksdenganencodingASCII,dandapatjugaditulisdenganencodinglain(misal:Unicode).PenulisanidentiferharusmenggunakanASCII.
4.StatemenStatemendiakhiridenganbarisbaru,tapistatemendapatmelintasbarisjikainterpretermenganggapstatementersebutbelumsempurna.
Tidakperlukarakterkhususuntukmengakhiristatemen.
Pythonmemperlakukanindentasidiawalbarissecarakhusus,indentasidigunakansebagaipenandablokstatemen.Padabagiantentangkendalialurprogramhaliniakandibahaslebihlanjut.
5.KomentarSetiapbariskomentarharusdiawalidengan'#'.Komentartidakharusselaludiawalbaris.
Contoh:
#rumusluaslingkaran
#inikomentarbariskedua
luas=22/7*14*14
sisa=106%3#menghitungsisapembagian
6.ObjekdanvariabelObjekadalahabstraksidata,setiapdatadalampythondiwakiliolehobjekatauolehrelasiantaraobjek.
Setiapobjekmemilikiidyangunikdantidakberubah,idobjekdapatdiketahuimenggunakanfungsiid().Operatorisdapatdigunakanuntukmembandingkanidentitasobjek.
Objectmemilikitipedannilai.Tipesebuahobjekdapatdiketahuimenggunakanfungsitype(),tipesebuahobjekjugatidakdapatdiubah.
Variabeladalahreferensikeobjek,variabelmereferensikanobjeksetelahmelaluiassignment.
46PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
printtype(123)#123adalahobjek
v1=123#assignment:variabelsebagaireferensikeobjek
printtype(v1)#tipev1adalahtipeobjekygdireferensikan
printid(v1)#idobjek
printv1#mencetaknilaiobjekyangdireferensikanolehv1
Variabeldapatlangsungdiassigntanpadideklarasikanterlebihdahulu,ekspresiyangmengacukesebuahvariabelsebelumvariabeltersebutdiassignmenyebabkanerror.
a=100
printid(a)
b=a
printaisb#adanbmengacukeobjekyangsama
del(a)#dimusnahkan
#printaisb#menyebabkanerror,atidakdidefinisikan
printb#bdanobjekyangdireferensikanmasihada
printid(b)
Setelahassignment,sebuahvariabeldapatdimusnahkandenganfungsidel(), jikasebuahekspresimencobamengacuvariabelyangsudahdidel()akanmenyebabkanerror.
Variabeldapatdiassignkeobjekkhususyangmerepresentasikanketiadaan,yaituNone.
7.Tipedata,literaldanoperasiObjekdibedakantipedatanyakarenasetiaptipedatamemilikioperasioperasitersendiri.
Bagianinimenjelaskanberbagaitipedatadanoperasiyangberasosiasidengantipedatatersebut.
7.1.BilanganPythonmendukungbilanganinteger,longintegerdanfloatingpoint.
Penulisanliteralbilanganbulatdapatdenganinteger,longinteger,dankeduanyadapatditulisdalambasisoctal,desimaldanheksadesimal.
Penulisanliteralfloatmenggunakantanda'.'(titik)desimal.
2147483647#integerterbesaruntuk32bitarithmetic
2147483648L#long
01234567#octal
0x123456789abcdef#hexadecimal
Operasiaritmetikaantaraintegerdenganinteger,selalumenghasilkaninteger,operasiinteger
PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource47
denganfloatakanmenghasilkandatafloat.Contoh:
>>>22/7*21*21#integerdaninteger
1323
>>>22/7.0*21*21#integerdanfloat
1386.0
Bilangandipythonadalahfirstclassobject,yangmemilikioperasioperasinyasendiri,contoh:
bil=1234
bil.__mod__(7)
#samadengan
bil%7
7.2.StringdanUnicodeStringSelainbilanganpythonjugadapatmemanipulasidataStringdenganpengkodeanASCIImaupunUnicode.
Penulisanstringliteralmenggunakanpetiktunggalataupetikganda.Pythontidakmembedakankeduacaratersebut.Keduacarapenulisanmengenalkarakterkhusussepertibarisbaru'\n'dantab'\t',penulisanliteralkarakterasciimenggunakanoctaldandecimaljugadidukung.
Untukmenulisstringtanpapengenalankarakterkhusus,digunakanprefix'r'didepanstring.
print'Assalamu\'alaikum'
printWa'alaikumsalaam
print'sayabilangPythonkeren'
printsayabilang'Pythonasyik'
print'barissatu\nbariskedua'
print'barissatu\x0Abariskedua'
print'barissatu\012bariskedua'
#rawstring
printr'barissatu\ndibarissatujuga'
Python,sejakversi2.0sudahmengenalstringunicode,untukmendukunginternationalization(i18n).
Penulisanstringunicodemenggunakanprefix'u',untukmenuliskanstringtanpapenerjemahankarakterkhususdigunakanprefix'ur'.
printu'barissatu\nbariskedua'
48PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
printu'barissatu\u000Abariskedua'
#unicoderawstring
printur'barissatu\u000A bariskedua'
7.3.BooleanTipedatabooleanhanyamemiliki2nilai:TruedanFalse.BahkanhanyaTruedanFalsesajalahobjectyangadaditipedataBoolean.
7.4.TipedatacontainerTipedatacontaineradalahtipedatayangdapatmenyimpanreferensikeobjeklainsebagaivaluenya.
Pythonmemilikitipedatacontaineryangbuiltin.
Tipedatacontainerdalampythondapatmenyimpandatayangtipenyaberbedabeda.Bahkandatacontainerdipythondapatmemilikielemenberupadatacontainerjuga.
7.4.1.ListListadalahhimpunanyangelemennyatersimpansecaraberurutan,sebuahlistdapatditambahelemenbaru,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,10,11]]]
Berikutinibeberapaoperasiyangdapatdilakukanterhadaplist:
add,remove,slice,del
Perhatikanbahwalistmelakukanpengecekanindexrange,padaoperasibacamaupuntulis:
7.4.2.TuplesBerbedadenganlist,makatuplesadalahsequenceyangimmutable.Persamaannyadenganlistadalahelemenelementuplesjugadiacumenggunakanindeksinteger.
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,10,11)))
Berikutinibeberapaoperasiyangdapatdilakukanterhadaptupe:
slice,packing,unpacking,butyoucan'tdel
Sebagaimanalist,tuplesjugamelakukanpengecekanrangeindex.
7.4.3.SetsSetadalahdatakontaineryangtidakberurutan(unordered)yangtidakmengandungduplikasipadaelemenelemennya.
Setmemilikioperasiuntukpengecekanmembership,jugaoperasihimpunansepertiunion,intersection,dansymmetricdifference
7.4.4.DictionaryBerbedadengankeduadatacontainersebelumnya,dictionarydiindeksmenggunakankey.Keyyangdigunakanharusdatayangimmutable.Jadistring,number,tupleyangtidakmemilikivalueyangmutable,dapatdigunakansebagaikey.
d1={'kode':'0001','nama':'SusuSapi','harga':12000,'stok':12}
printd1['kode']
Mengacukedictionarymenggunakankeyyangbelumdidefinisikanakanmenyebabkanerror,direpresentasikanolehexceptionKeyError,contoh:
printd1['satuan']#KeyError
8.Ekspresidanoperasi
8.1.EkspresiAtomAtomadalahekspresipalingdasardalampython.Yangtermasukekspresiatomada3jenis:
8.1.1.IdentifierIdentifieradalahnamayangmerupakanekspresiatom.Contohnyaadalahnamavariabel,namafungsi,namaclass,namamodule.
Sebuahnamayangtelahdiasosiasikan(bound)denganobjek,jikadievaluasiakanmenghasilkanobjektersebut,namayangbelumdiasosiasikan(unbound)denganobjekakanmenghasilkanerrorNameErrorjikadievaluasi.
Karakterpenyusunidentifierdalampythondapatterdiriataskombinasidarihurufbesardankecil(azAZ),angka(09)dangarisbawah(underscore).
50PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
Pythonmembedakanhurufbesardankecilpadaidentifier.
Panjangidentifieradalahtakterbatas
8.1.2.LiteralPythonmendukungberbagailiteralstringdannumerik.Padabagiantypedatatelahdiperkenalkanberbagaipenulisandatanumerikdanstringsecaraliteral.
8.1.3.EnclosureEnclosureadalahbentukbentukekspresiyangdibatasiolehreversequote(tandapetikterbalik`),tandakurung,kurungsiku,dankurungkurawal.Berikutinibentukekspresiyangtermasukenclosure:
1. Bentukandalamkurung(Parenthesizedforms)
2. Listdisplay
3. Generatorexpressions
4. Dictionarydisplay
5. Konversistring
8.1.3.1.BentukandalamKurung(Parenthesizedforms)Bentukandalamkurungadalahlistekspresiyangopsionalditempatkandalamkurung().
Jikaberisisedikitnyasatukoma,akanmembentuktuple,jikatidakmengandungkomaakanmembentukekspresitunggal.Contoh:
(1+2)#ekspresitunggal(atom)
(1+2,)#tuples
8.1.3.2.ListdisplayEkspresilistdisplayakanmembentukobjeklistyangbaru.Ekspresilistdapatdibentukmenggunakanlistdariekspresiyangdipisahkankomaataudarisebuahlistcomprehension.
[1+2,3
(bforbinrange(20)if(b%3==0andb>0))#generatorbilangankelipatantiga
(bforbinrange(20)if(b%3==0)).next()#3
8.1.3.4.DictionarydisplayDictionarydisplayadalahekspresiyangmenghasilkanobjekdictionarybaru.
{'python':'GUIapp','php':'webapp','java':'mobileapp','ruby':'webapp'}
8.1.3.5.KonversiStringKonversikestringadalahekspresimenggunakantandakutiptunggalterbalik(reversequote).
Yangmengubahekspresidaritipedatalainkestring.
`('a','b','c')`
`[1,2,3,('a','b','c')]`
`1+2+3`#6
8.2.EkspresiPrimer(Primaries)Ekspresiprimeradalahekspresiyangmewakilioperasioperasiyangpalingmengikatdalampython.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,jikatidakmakaakanmenimbulkanAttributeError.Atributyangdirerensikandapatberupaobjekyangmemilikiatributjuga,contoh:
objek2.atribut1.atribut2
8.2.2.SubskripEkspresisubskripberlakupadaobjeksequence(list,tuple,string)ataumapping(dictionary).
52PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
Subkripmenggunakan[]setelahobjek.
objek1[ekspresi1]
Jikaobjekbertipesequence,makaekspresi1haruslahinteger.Ekspresidalamsubskrippadaobjeksequencedapatberupabilangannegatif,untukpengindeksandaribelakang.Contoh:
list1=[51,16,7,8,10]
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':'mobileapp','ruby':'webapp'}
dict4['python']#'GUIapp'
dict4['java']#'mobileapp'
8.2.3.Irisan(Slicing)ExpresislicingterdiriatasSimpleSlicingdanExtendedslicing.
Ekspresisimpleslicingdigunakanpadaobjeksequence(atauekspresiyangmenghasilkanobjeksequence)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),denganmenggunakannolataubeberapaargumen.
Yangdimaksudcallableobjekadalah:userdefinedfunctions,builtinfunctions,methoddaribuiltinobjects,classobjects,methodsofclassinstances,danbeberapaclassinstancessendiriadalahcallable.
Argumendapatberupapositionalataukeywordargument.
Semuaekspresipadaargumendievaluasisebelumnyapemanggilandilakukan.
8.3.OperasiPangkatOperasipangkatberasosiasilebihkuatdarioperatorunarydisebelahkirinya,danberasosiasilebihlemahdarioperatorunarydisebelahkanannya.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
16**2**2#0.5=16**0.25=1/16**0.25
8.4.OperasiaritmetikaunarySemuaoperasiunaryaritmetikadanbinermemilikiprioritasyangsama,terdiriatas:
minus(),plus(+)danbitwiseinversion(~).
8.5.OperasiaritmetikabinerOperasibinermeliputi:
8.5.1.PerkalianPerkalian(*)memerlukanargumenbilangankeduanyaataujikasalahsatunyaintegermakayanglainnyaharussequence.
2*3#6
54PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
3*'sip'#sipsipsip
3*(1,2,3)#(1,2,3,1,2,3)
8.5.2.PembagianTerdiriatas'/'(division)dan'//'(floordivision).
Floordivisionmengenakanfloor()padahasilpembagian.
#division
22/7*14*14#588
22./7*14*14#616.0
1/2*3*4#0
1./2*3*4#6.0
22./7#3.14285714286
22.//7#3.0
8.5.3.Modulus(%)Menghitungsisahasilbagi.Operator%jugadioverloaduntukmelakukanpengformatanstring,contoh:
22%7#1
'%dekor%s'%(3,'ayam')
8.5.4.PenjumlahanMenjumlahkanbilangandanmenggabungkanconcatsequence.
22+10
'belajar'+'python'
8.5.5.PenguranganOperatorinimenghitungselisihuntukbilangan.
2210
8.6.OperasiPergeseran(shifting)Operasishiftbitinimenerimaduaargumenbilanganintegerataulong,untukargumendikiriharuspositip.
Argumendikananoperatoradalahbilanganyangdigeserbitnyadenganjumlahpergeseranbitsebesarnilaiargumendikiri.
PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource55
MelakukanNpergeserankekanan(>>)samadenganmembagibilangandenganNpangkat2.
MelakukanNpergeserankekiri(1#2=biner100shiftleft1>010
4>1#3=biner111shiftleft1>011
70111
15^15&8#7=1111^1000=>0111
(15^15)&8#7=0&1000=>0
8.8.OperasiPerbandingan(comparison)OperasiperbandinganmenghasilkannilaibooleanTruedanFalse.
Terdiriatas:
Operator Deskripsi
> Lebihbesardari
< Kurangdari
>= Lebihdariatausamadengan
!=atau Tidaksamadengan
is Samadenganidentitasobjek
isnot Tidaksamadenganidentitasobjek
in Bagiandari
notin Bukanbagiandari
8.9.OperasiBooleanOperasibooleanmengevaluasiekspresiberdasarkannilaiTruedanFalsedariekspresi,pythonmengenalaturanberikutiniuntukdefinisitentangtruedanfalse:
NilaiFalse, None,numerik0untuksemuatipedata,danstringkosongdancontainerkosongadalahfalse,sedangkannilailainnyaadalahtrue.
PerhatikanbahwadibedakanmenuliskanTruedengantruedanFalsedenganfalse,TruedanFalseadalahobjekatauinstancedaritipeBoolean,sedangkantruedanfalseadalahnilaiabstrakyangdikenaldalamoperasiboolean.
Ada4operasiboolean:
ekspresi1ifekspresi2elseekspresi3
Operasiinimengevaluasiekspresi2,jikabernilaitruemakamenghasilkanekspresi1,danjikaekspresi2bernilaifalsemenghasilkanekspresi3
and
ekspresi1andekspresi2
Operasiinimenghasilkantruejikaekspresi1danekspresi2keduanyabernilaitrue
xor
ekspresi1xorekspresi2
Operasiinimenghasilkantruejikadanhanyajikasalahsatudariekspresi1danekspresi2bernilaitrue
or
Operasiinimenghasilkantruejikasalahsatudariekspresi1danekspresi2bernilaitrue
ekspresi1orekspresi2
8.10.LambdaLambdaadalahekspresiyangmenghasilkanfungsianonim.
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.EkspresiListsEkspresilistterdiridarisatuataulebihekspresiyangdipisahkandengankoma.
Ekspresilistdengansekurangnyasatukomadibelakangmenghasilkantuple.Contoh
a,b,c=1,2,3#a,b,cadalahekspresilist
x=1,#xadalahtupledengan1elemen
y=1#yBUKANtuple,yadalahvariabelinteger
z=()#zadalahtuplekosong
9.FungsiFungsidigunakanuntukmengenkapsulasikanoperasi.
Fungsipythondidefinisikanmenggunakankeyworddefdiikutinamafungsi,selanjutnyafungsidapatmenerimanolataulebihparameter.
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,padacontohberikutberikutiniadanbmemilikinilaidefaultmasingmasing0dan1:
#generatorbilanganfibonacciygkurangdarin,denganrekursi
deffibonacci(n,a=0,b=1):
ifb
Pencabanganmenggunakanelifdapatlebihdarisatu.
importsys
print'tebakinteger:',
ditebak=67
#bacastdin1baris,potongwhitespacedepan&belakang,
#lalukonversistringkeinteger
a=int(sys.stdin.readline().strip())
ifditebaka:
print'terlalukecil'
else:
print'pasbenar...'
10.2.whileUntukmelakukanpengulanganselamaekspresidiwhilebernilaiTrue.
Contoh:
importsys
print'tebakintegersampaiketemu:',
ditebak=67
a=int(sys.stdin.readline().strip())
whilea!=ditebak:
ifditebaka:
print'terlalukecil'
print'tebaklagi:',
a=int(sys.stdin.readline().strip())
print'pasbenar...'
Untukkeluardariwhileloopdapatmenggunakanbreak,untukmelanjutkanlooptanpamengeksekusistatemenberikutnyadigunakancontinue:
importsys
60PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
ditebak=67
minimum_coba=3
coba=0
whileTrue:
coba+=1
print'tebakinteger:',
a=int(sys.stdin.readline().strip())
ifditebak
10.5.exceptionsPythonmengenalmekanismeyangelegandalammenanganierrorpadaprogram,yaitumenggunakanexception.
Penangananexceptionterdiriatas2blok:trydancatch.
Bloktryberisistatement(statement)yangdapatmengakibatkanterjadinyaerroratauexception.
Jikasatustatementdalamblokmengakibatkanexceptionmakastatemenstatemenberikutnyatidakakandieksekusi,alurprogramsegeraberalihkeblokcatch.
Blockcatchberisistatement(statemen)yangakanmenanganiexception.
ContohberikutinimenganganiexceptionjikapenggunamenekanctrlcyangmenyebabkanexceptionKeyboardInterrupt:
importsys
print'tebakintegersampaiketemu:',
ditebak=67
try:
a=int(sys.stdin.readline().strip())
whilea!=ditebak:
ifditebaka:
print'terlalukecil'
print'tebaklagi:',
a=int(sys.stdin.readline().strip())
print'pasbenar...'
exceptKeyboardInterrupt:
print'\nhmm..menyerah?\n\
\rsmogalebihlainkalilebihberuntung,bye!'
11.ModulesModulememudahkanpemakaianulangberbagaisumberdayaprogram(fungsi,class,variabel),danmenyediakannamespaceuntukmenghindarikonflikpenamaan.Sebuahmodule
62PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
dapatberisibeberapafungsiataubeberapaclass.
11.1.MendefinisikanModuleSebagaicontoh,pembangkitbilanganfibonacciingindisimpansebagaifungsidalammodulepembangkit.Yangdiperlukanadalahmendefinisikanfungsitersebutdalamfilepembangkit.py.
#modulepembangkitfibonacci
#returnlistbilanganfibonacci
deffibonacci(n,a=0,b=1,hasil=None):
ifhasil==None:hasil=[]
ifb
pythonfib.py
Yangjugatermasukmodulesearchpathadalahlistsys.path,dapatdigunakanjikatidakmungkinmendefinisikanPYTHONPATH.
Programpemanggildiubahsebagaiberikut:
importsys
sys.path.append('/home/hafizh/modulku')
importpembangkit
forxinpembangkit.fibonacci(100):
printx,
12.ClassClassdidefinisikanmenggunakankeywordclass.
Dalamclassdapatdidefinisikanmethodatauoperator.Padaclassinididefinisikanconstructor,operator+,operator,methoduntukmenampilkanrepresentasistring,danmenghitungbesarvektor.
Pythonmengenalnamanamamethodkhususyangdapatdigunakanuntukmengimplementasikanoperatorbagiclasstersebut.
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.PenutupPythonadalahbahasascriptingyangsangatmenarikuntukditekunidanditerapkandalamberbagaiaplikasi.
Beberapakeunggulanyangmenarikdarisisipotensiuntukmenggunakanpythonpadaaplikasibisnisdiantaranyaadalah:
Pythonmelakukanpengecekanbounddanunboundvariabel,tidakseperti,misalnya,PHP4yangmembiarkanprogramermelakukankesalahandenganmengevaluasivariabelyangbelumdiberinilai(unassigned).
Pythonjugamelakukanpengecekanbatasarray(indexboundarychecking)danjugaindex keychecking,tidaksepertimisalnya,PHPatauPERL.
Sintakspythonyangmemperhitungkanindentasijugamenuntutkerapihansourcecodeyangdiperlukanuntukmemaintainprogramdalamjangkapanjang.
PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource65
IV.MengenalRuby1.ApakahRubyRubyadalahbahasapemrogramanscriptingyangdinamisdanobjectoriented,semuadatadiRubyadalahinstancedarisebuahclass.
RubydikembangkanpertamakaliolehYukihiroMatsumoto('Matz')padatahun1995.
SudahbeberapatahunbelakanganiniRubydipakaiuntukmengembangkanaplikasiwebyangkomersialmaupunnonkomersial.libraryRubyuntukaplikasiberbasisGUInonwebjugatersedia.
2.MendapatkandanMengintalRuby1. Downloadsourcehttp://www.rubylang.org
2. Uncompressdisembarangdirektori:
bash$tarzxvfruby1.8.5.tar.gz
3. Sebagaiuserbiasalakukanconfiguredanmake,lalumake installsebagaisuperuser:
bash$cdruby1.8.5
bash$./configure
bash$make
bash$su
bash$makeinstall
3.MenjalankanRubyPalingsedikit,ada3caramengeksekusiinterpreterruby.
3.1.MenggunakanfileskripBerikutinifilesalam.rb,mencetaksalamdiakhiribarisbaruputs"assalamu'alaikum"
dieksekusidenganinterpreterruby:
bash$rubysalam.rb
Satusatunyastatemenpadaprogramtersebutmemanggilmethodputs,yangmencetakobjekkestandardoutput(stdout)dandiakhiridenganbarisbaru.
PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource67
3.2.Menggunakancommandlinebash$rubyeputs\assalamu'alaikum\
3.3.SecaraInteraktifbash$irb
irb(main):001:0>puts"assalamu'alaikum"
assalamu'alaikum
=>nil
4.StrukturProgramRuby
4.1.FileprogramatauskripProgramRubyadalahfileteksdenganencodingASCII7bit,yangdapatdibuatdengantexteditoryangbiasaandadigunakan.
NamafileprogramRubybiasanyadiakhiridengan'.rb',inibukankeharusan,hanyakebiasaanumum.Namafileyangsahpadafilesistemdapatdigunakansebagainamafileprogram(walaudemikian,bukanideyangbaikmenamakanfileprogramanda'~@~.rb')
Sebuahfileprogramdapatdieksekusidarishellsecaralangsungtanpamenuliskaninterpreterruby,denganmenambahkanbariskhususdiawalprogram,barisiniharusmengacukepathrubyinterpreter,berikutinifilehalo1.rbsebagaicontoh:#!/usr/local/bin/rubyputs'HaloRuby!'
Ubahfiletersebutsehinggaexecutable,daneksekusidishell(perhatikan./dibariskedua):
bash$chmod755halo1.rb
bash$./halo1.rb
Beberapaoptiondiinterpreterjugadapatdituliskan,misalnyawuntukwarning:#!/usr/local/bin/rubywwhilegets.chopif/ruby/iputs'ya,andaketik'+$_+'...'endend
andaakanmendapatwarningkarenapenggunaanvariabelkhusus$_tidakdisarankanlagi.
Rubyjugamengenalbariskhususyangopsionaluntukmengakhiriprogram,yaitubarisyanghanyaberisikeyword__END__yangtidakdiawalidandiakhiriwhitespace.Barisbaris
68PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
apapunsetelahbarisinitidakakandieksekusiolehinterpreter.
4.2.StatementProgramRubyadalahlineoriented,terdiridaristatementyangdiakhiricukupdenganakhirbaris(endofline),tidakperlukarakterkhusus(semisaltitikkoma)untukmenandaiakhirstatement.
Rubyjugatidakmemperlakukankarakterindentasi(tab)atauspasisecaraistimewauntukawalstatement,contoh:puts'inibarispertama'
puts'iniyangkedua'puts'daniniyangterakhir'
Sebuahstatemendapatditulisdalambeberapabaris,contoh:#statemendapatmultilineputs'rubyadalahbahasapemrogramanyangdinamikdanobjectorienteddikembangkanpertamakaliolehYukihiroMatsumoto,a.k.a\'Matz\''#multilinememudahkanpenulisanqueryygpanjangquery='selectp.nama,p.stok,s.namafromprodukp,suppliersp.idsup=s.idandp.stok>100orderbyp.namalimit10offset21'putsquery
beberapastatemenditulissatubarisjikadipisahkanolehtitikkoma,contoh:p=10;l=20;t=15;volume=p*l*t;puts"volume#{volume}"
4.3.KomentarSepertisudahandalihatpadacontohcontohsebelumnya,Rubymenggunakan'#'sebagaipenandaawalkomentar,dansetiapbariskomentarharusdiawalidengan'#'.
Khususuntukbarispertama,jika'#'diikutidengan'!'makabarisinidigunakanuntukmengeksekusiinterpreterjikaprogramdijalankanlangsungdaricommandline.
PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource69
4.4.ClassSebagaibahasaobjectoriented,dataRubyadalahinstancedarisuatuclass.Classmerepresentasikansebuahkonsepyangmeliputistrukturdatadanoperasioperasiyangberasosiasidenganstrukturdatatersebut.
Classmemberikansebuahnamespacetersendiribagioperasioperasidanvariabelvariabeldidalamclasstersebut.
SemuaclassyangdidefinisikandalamRubymemilikisatuclassindukyaituclassObject.
Sebuahclassbiasanyadidefinisikandalamsatufiletersendiri,walautidakadakeharusansepertiitu.
Namaclassbiasanyadiawalidenganhurufkapital.Selanjutnyaclassakandibahasdibagiantersendiri.
4.5.ModuleModuleadalahsebuahcaramengumpulkanclassclass,methodmethoddankonstantakonstantadalamsebuahnamespace.
Modulememudahkanpemakaianbersamadanberulangberbagaikonseptersebut(class,method,konstanta).
Denganadanyamodule,kemungkinankonfliknama(nameconflictataunamecollision)dapatdiminimalkan.Moduleakandibahaslebihlengkappadabagiantersendiri.
5.TipeDataDasar,LiteraldanVariabelRubymendukungberbagaitipedatadasaryaitu:numerik,string,range,array,hashesdanregularexpression.SemuadataRubyadalahobjekatauinstancedarisuatuclass.
5.1.NumerikNumerikterdiriatasintegerdanfloatingpoint.Integerdapatmenampungjumlahdigityanghampirtakterbatas(dibatasiolehjumlahfreememorydisistem).IntegerpadarangetertentuadalahobjekdariclassFixNumdanpadarangelainnyaadalahdariclassBigNum.
Rubymendukungoptionalbaseindicatoruntukpenulisanliteralinteger:
70PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
Baseindicator Base Contoh
0 Octal 01234567
0d Desimal(default) 0d123456789
0x Hexadesimal 0x123456789abcdef
0b Binary 0b1110010010011Penulisannumerikdapatmenggunakanunderscore(garisbawah)untukmemudahkanpembacaan,contoh:
123_456_789=>1234567890b111_101_101=>0b111101101
Floatingpointditulismenggunakan.(titik)untukseparatordesimalbulatdanpecahan,contoh:
0.123467893.14285714285714
Datanumerikadalahobjeksejati,sebagaicontoh,daridataintegerdapatdipanggilmethod:#representasil11398634dalamstringhexadesimall11398634.to_s(16)
5.2.StringStringdalamRubyadalahsederetanbytesyangtiapbytenyaterdiridari8bit.
Stringliteraldinyatakandalamkutiptunggalataukutipganda,contoh:'SayasukacodingdenganRuby..''Sayabilang\'SayasukacodingdenganRuby..\''Sayabilang\SayasukacodingdenganRuby..\
Padastringliteralmenggunakankutipganda,interpreterrubyakanmelakukaninterpolasiekspresijikaekspresiditulisdalam#{},sehinggamemudahkanandamenggabungkan(concat)stringdenganekspresi:Luaslingkaran=#{22.0/7*14*14}
Stringliteraldiatasbernilai'Luas lingkaran = 588'.
KutipgandapadastringliteraljugamenyebabkaninterpreterRubyakanmengevaluasiberbagaikarakterkhusus(misal:controlcharacters).
Ada3caralainuntukmendefinisikanstringliteral:%q,%Qdanheredocuments.
Prefix%qsamadengankutiptunggaldan%Qsamadengankutipganda(menyebabkaninterpolasiekspresi),keduanyamenggunakandelimiter!,/,{,(,
%q{selectindexfromtablewherecolumn='area'}%Q/selecttypefromobjectwherearea>#{22.0/7*21*21}/
Literaldenganheredocumentsmenggunakanstringpembatas,cocokuntukmendefinisikanstringliteralyangpanjang(misal:codejavascript),yangmungkinmemuatkarakterkarakterkhususpembatasstringyangdikenalRuby,contohberikutmenggunakanstringpembatasKODE_JAVASCRIPT:js1=
8.3.VariabelinstanceVariabelinstancehanyadapatdiaksesdaridalammethodinstance.Namavariabelinstancediawalidengan@,contoh,classVektorberikutmemilikivariabelinstance@idan@j:classVektor
definitialize(i,j)@i=i@j=j
endend
8.4.VariabelclassVariabelclassdapatdiaksesdaridalammethodinstancemaupunmethodclass.Namavariabelclassdiawalidengan@@,contoh,classVektorberikutmemilikivariabelclass@@totalcount:classVektor
@@totalcount=0definitialize(i,j)
@i=i@j=j@@totalcount=@@totalcount+1
endend
8.5.ArraydanHashArraydanHashadalahobjekyangmerupakankoleksidatasecaraterindeks(indexed).
Arraydiindeksdengankeyinteger,Hashdiindeksmenggunakansembarangobjeksebagaikey.
Arraydanhashdapatberisielemenelemenyangberbedatipedatanya.
Arraydapatdidefinisikansecaraliteral,denganmenggunakanoperatorkurungsikuberisielemenelemenarray,contoh:a1=[1,'senin',2,'selasa',3,'rabu',4,'kamis',5,'jumat']
Mengaksesarraya1menggunakankeyinteger:putsa1[0]#1putsa1[1]#'senin'putsa1[2]#2
Arraydapatberisiarraylain,membentukarraymultidimensi:a2=[['a','b','c'],['d','e','f'],['g','hihi','i']]#mengaksesputsa2[2][1]#'hihi'
74PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
Hashdidefinisikanmenggunakankurawal{},contoh:produk1={'p001'=>'SusuSapi','p002'=>'TelurAyam','p003'=>'GulaPasir'}putsproduk1['p002']#'TelurAyam'#nestedhashproduk2={
'p001'=>{ 'nama'=>'SusuSapi', 'harga'=>10000},'p002'=>{ 'nama'=>'TelurAyam','harga'=>12000},'p003'=>{ 'nama'=>'GulaPasir','harga'=>6000}
}putsproduk2['p003']['harga']#6000
Elemenhashyangbelumdidefinisikankeynyabernilainil.Tapi,hashdiRubydapatdisetnilaidefaultnya.Misal,mendefinisikanvariabelhashuntukmenghitungsesuatuyangdiindeksdengannama,defaultnya100:hitung1=Hash.new(100)putshitung1['p001']#100
9.EkspresidanStrukturkendali
9.1.EkspresimelibatkanstringdannumerikJikaandaterbiasadenganbahasascriptlainnyasepertiPHPatauPERL,mungkinandamengalamikesulitanmenuliskanekspresiyangmelibatkanvariabelstringdanvariabelnumerik,karenaRubytidakmelakukankonversiotomatisdariekspresinumerikkestringatausebaliknyasepertiyangmungkinandaharapkan,objekharusdiparsemenghasilkanobjekbarudengantipeyangsesuaisecaraeksplisitmenggunakanmethodyangtepat,contoh:num1=2000str1='1000'
#BARISBERIKUTERROR:operator+num1butuhoperanddariclassFixNumnum2=num1+str1
#str1diparsemenghasilkannumeriknum2=num1+str1.to_i
Begitujugakebalikannya,jikamenggabungkanstringdengannumeriktanpa#{}:str1='Biayanya...'num1=2000
#BARISBERIKUTERROR:operator+str1butuhoperanddariclassStringstr2=str1+num1
#num1diparsemenghasilkanstringstr2=str1+num1.to_s
PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource75
#ataumenggunakan#{}dandoublequotestr2=#{str1}#{num1}
Perhatikandalamkeduapemanggilanmethodto_idanto_str,objekdaristr1dannum1tidakberubah,tapimenghasilkanobjekbaru.
9.2.EksekusiConditionalEksekusiconditionaldidasarkannilaiboolean(trueataufalse)suatuekspresi.
Rubymenganggapsemuanilaiyangtidaksamadengankonstantafalseatautidaksamadenganniladalahtrue.
9.2.1.If...then...endRubymengenalekspresiconditionalif..then..enduntukmengevaluasisatukondisidanif..then..elsif..then..else..enduntuklebihdarisatukondisi.Contoh:
1. ditebak=1232. tebakan=gets.chop.to_i3. iftebakan>ditebak4. puts'terlalubesar'5. elsiftebakan
expr0?expr1:expr2
Jikaexpr0bernilaitruemakadikembalikanexpr1,jikasalahdikembalikanexpr2.
Ternarymemungkinkanekpresinested,contoh:bil=123;print'tebaklah:';tebak=gets.chop.to_iputstebak==bil?'benar..':tebak>bil?'kebesaran':'kekecilan'
9.3.LoopLoopmengenalwhile..enduntukmengeksekusistatemenstatemendalamloopselamakondisiyangdievaluasipadabagianwhileadalahtrue.Programberikutiniakanterusmemintainputselamatebakanyangmasukbelumbenar:
1. ditebak=1232. print'tebak:'3. tebakan=gets.chop.to_i4. whileditebak!=tebakan5. ifditebak
Namamethoddimulaidenganhurufkecil,namamethodyangmelakukanquerybiasanyadiakhiridengan'?'
Namamethodyangmengubahobjekreceiverbiasanyadiakhiri'!'.
Methoddapatmenerimaparameter,untukmethodyangmenerimaparameter,biasanyadigunakankarakterkurung().Penggunaan()untukdefinisimethodmaupunpemanggilantidakdiharuskan.
Jikamethodmengembalikannilai,dapatmenggunakankeywordreturndapatjugatidak,Rubymengembalikannilaiekspresidaristatementerakhirdaridefinisimethod(sebelumend)
Contohmethoddanpemanggilannya:defluas_segitiga(alas,tinggi)
alas*tinggi/2.0endluas1=luas_segitiga(20,30)luas2=luas_segitiga20,30#memanggilmethodtanpa()
#parametertanpa()defvolume_bolajari2
return4.0/3*22/7*jari2*jari2*jari2endvolum1=volume_bola(14)
Rubymembolehkanpemberiannilaidefaultpadaparameterdefault.
Parameterrekurispadacontohberikutini,disettruejikapemanggilanmethodtidakmenyertakanparametertersebut.defbuatdir(path,rekursi=true,mode=0755)if!File.exists?(path)&&rekursithend=File.dirname(path)buat_dir(d,rekursi,mode)Dir.mkdir(path,mode)elsif!File.exists?(path)Dir.mkdir(path)elseputs"#{path}sudahada"endend#createdirrecursivelybuatdir('/home/didi/dir/yg/belum/ada')#createdirNOTrecursively,possiblyerrorbuatdir('/home/didi/dir/yg/sdh/ada/dirbaru',false,0777)
78PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
10.1.BlokdanIteratorBlokadalahsederetanbarisstatemenyangdapatdiasosiasikandenganpemanggilanmethod.
Blokbiasadigunakansebagaicallback,jikaandapernahbelajarJava,kegunaanblokdapatdisejajarkansepertianonymousclassyangdigunakansebagaicallback.TapibloknyaRubylebihluweskarenatidakperluadaclassyangdidefinisikan.
Blokdimulaidengankeyworddodandiakhiridenganend,ataumenggunakan{}.
Delimiterblokdo...enddigunakanjikastatemendalambloklebihdarisatubaris,jikahanyasatubarismakadigunakan{},halinibukankeharusan,hanyasesuatuyangtelahmenjadistandard.
Berikutinicontohblock:#blokdo..enddo
puts'statement1'puts'statement2'puts'statement3'
end#blok{}{puts'statementunggal'}
Blokbarubergunajikadipanggildariiterator,yaitusebuahmethodyangdidefinisikanuntukmemanggilblok.
Iteratormemanggilblokmenggunakanstatemenyield.
Berikutinicontohiteratoryangmemanggilblok3kali:#iteratoryangmemanggilblok3kalidefpanggil3xyieldyieldyieldend#panggilblokpanggil3x{puts'ding...'}
Statemenyielddapatmengirimkanparameterkeblok,asalkanblokdidefinisikandapatmenerimaparameter.
Sebuahblokdapatmenerimalebihdarisatuparameter.Parameteryangditerimablokdidefinisikandiantara||(duapipe),jikaadalebihdarisatuparameterdipisahkantandakoma.
Berikutinicontohblokyangmenerima2parameter:defpanggil4x
PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource79
26.27. #attributej(methodinstance)[email protected].#representasistring(methodinstance)33.defto_s34. "(#{@i},#{@j})"35.end36.37. #methodclass,38.#mengembalikantotalobjekvektorygsdhdicreate39.defVektor.totalobj40.@@totalobj41. end42.end#akhirdefinisiclassVektor43.44.x=Vektor.new(1,2)#panggilconstructor45.y=Vektor.new(2,2)#panggilconstructor46.z=x+y#panggilmethod+47. puts"vektorz#{z}"#panggilmethodto_s48.puts"magnitudevektorz:#{z.to_skalar}"#panggilmethod
to_skalar49.#memanggilmethodclass50.putsVektor::totalobj
11.1.MendefinisikanClassClassdiRubydidefinisikandalamfileprogramsepertiprogramRubylainnya.Tidakadaaturanpenamaankhususuntuknamafile.
Definisiclassdiawalidengankeywordclassyangdiikutinamaclass,namaclassdiRubybiasanyadiawalidenganhurufkapital.(contoh:baris1classVektor)
Definisiclassdiakhiridengankeywordend.(contoh:baris34classVektor)
11.1.1.Bagianbagianclass
11.1.1.1.ConstructorConstructoradalahmethodkhususyangdigunakanuntukmenginisialisasistateobjekinstancedariclass.MethodconstructordiRubyharusdinamakaninitialize,methodinidapatmenerimanolataulebihparameter.
PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource81
11.1.1.2.MethodInstanceAdalahmethodyanghanyadapatdipanggilmelaluiclassinstanceatauobjek.
Diantaramethodinstanceadayangdigunakanmengaksesvariabelinstance(akandijelaskankemudian),methodsepertiinidisebutjugaattribut.
PadacontohclassVektorada5methodinstance,yaitu:operator +, to_skalar, attribute i, attribute j dan to_s
11.1.1.3.MethodClassAdalahmethodyanghanyadapatdipanggilmelaluiclass,tidakdapatdipanggilmelaluiclassinstance.
Penamaannyadiawalidengannamaclassdiikuti'.'dannamamethoddimulaidenganhurufkecil.
PadacontohclassVektorada1methodclass,yaitu:totalobj.Pemanggilanmethodclassmenggunakannamaclassdiikuti'::'dannamamethod.
11.1.1.4.VariabelInstanceVariabelyangdidefinisikandalamclassdanhanyadapatdiaksesdarimethodinstance,danhanyadapatdiaksesmelaluiobjekitusendiri,tidakdapatdiaksesmelaluiobjeklain.
Setiapobjekmemilikivariabelinstancenyasendirisendiri.
Penamaannyadiawalidengan@diikutinamavariabelyangdimulaidenganhurufkecil.
PadacontohclassVektorada2variabelinstance:@idan@j
11.1.1.5.VariabelclassVariabelyangdidefinisikandalamclassdandapatdiaksesdarimethodclassmaupunmethodinstance.
Variabelclassdapatdiaksesbersamasamaolehsemuainstancedariclasstersebut.
Penamaannyadiawalidengan@@diikutinamavariabelyangdimulaidenganhurufkecil.
PadacontohclassVektorada1variabelclass:@totalobj
11.1.2.Inheritance(classturunan)Sebuahclassdapatdidefinisikansebagaiturunandariclasslain.Classturunanakanmewarisimethoddanvariabeldariclassinduknya.
BerikutinididefinisikanclassBalokclassBalokdefinitializepanjang,lebar,tinggi
82PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
@panjang=panjang@lebar=lebar@tinggi=tinggiend
defvolume@panjang*@lebar*@tinggiend
defto_s"(#{@panjang},#{@lebar},#{@tinggi})"endend#akhirclassBalok
BerikutnyadidefinisikanclassKubussebagaiturunandariBalok,karenakubusdapatdianggapsebagaibalokyangkhusus,yaituketigasisinyasamapanjang.
Rubymenggunakan'
menghindarikonfliknama(nameconflict/namecollision)diantaraclass,method,ataukonstanta.
12.1.MendefinisikanModuleSebuahmoduledapatdidefinisikandalamfiletersendiri,ataubersamamodulelain.
Definisimoduledimulaidengankeywordmodulediikutinamamoduleyangdiawalidenganhurufkapital,definisimodulediakhiriolehkeywordend,padabaristersendiri.
Berikutinicontohmendefinisikanmodules,difilemod1.rb:#modulecontohmoduleModSatu
KONSTAN_1=123#methoddalammoduledefModSatu.method1
puts'method1...'endend#akhirmodule
12.2.MenggunakanmoduleAgarprogramdapatmengaksesmodule,moduleharusdimuatkedalamprogrammenggunakanstatemenrequire.
Ada4caramenggunakanrequire:
12.2.1.MenggunakanpathStatemenrequirediikutirelativepathatauabsolutepathfilemodule.Namafiledapatmenyertakanextension.rb,dapatjugatidak.MisalsebuahmoduleMod1didefinisikandidalamfile/home/irfan/moddir/mod1.rb
Sebuahprogramusemod1.rb,disebarangdirektoriyangberbedadenganmodule,akanmengaksesMod1sebagaiberikut:#loadmodulerequire'/home/irfan/moddir/mod1'
#panggilmethoddimoduleModSatu.method1putsModSatu::KONSTAN_1
12.2.2.Menggunakanvariabelkhusus$:Rubymencarimoduledalamfilefileyangterdapatdalamdirektoridirektoriyangtersimpandiarray$: , padaarray$:tersebutdapatditambahkandirektoribaru.
84PanduanPendayagunaanOpenSourceSoftware:BahasaPemrogramanOpenSource
AndadapatmenampilkandirektoridirektoritersebutdenganinterpreterRuby,sbb:
bash$rubyeputs$:
Berikutcontohpenggunaan$:untukmeloadmodule,diprogramusemod2.rb:#masukkandirektorikedalamarray$:.push('/home/irfan/moddir')#loadmodulerequire'mod1'#panggilmethoddimoduleModSatu.method1putsModSatu::KONSTAN_1
12.2.3.MenggunakanrubyoptionIKeduacarasebelumnyamemerlukanpenyebutandirektorimodulesecaraeksplisitdalamprogrampemanggil.DenganmenggunakanoptionIdiinterpreterruby,filepemanggilmoduletidakharusmenyebutkanpathkedirektorimodule,berikutinifilepemanggilmodul,usemod3.rb:#loadrequire'mod1'#panggilmethodModSatu.method1putsModSatu::KONSTAN_1
dieksekusidengan:
bash$rubyI/home/irfan/moddirusemod1.rb
12.2.4.MenggunakanvariabelenvironmentRUBYLIBProgramusemod3.rbyangsamadapatdieksekusitanpaperlumenambahoptionIdiinterpreterruby,denganmenambahkandirektorimodule,kedalamvariabelenvironmentRUBYLIB:
bash$exportRUBYLIB=/home/irfan/moddir:$RUBYLIB
bash$rubyusemod1.rb
12.3.MixinSalahsatufiturRubyyangmenarikyangberhubungandenganmoduleadalahmixin,yaitumethoddidalamsebuahmoduledapatdijadikanmethodinstan