Top Banner
119

Pemrograman

Nov 22, 2015

Download

Documents

Tentang pemrograman
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 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=

  • nama2='irfanmahdi'nama3=nama2puts">#{nama2}#{nama2}
  • 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

  • yield'ding...',2#memanggilblok,passing2parameteryield'...dong',3yield'ding...',4yield'...dong',5end#blokmendefinisikanparameterpara1,para2sebagaiparameterblokpanggil4xdo|para1,para2|n=0whilen
  • 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