Sunday, 24 May 2015

23. Lebih dekat dengan Module dan Fungsi

Pada dasarnya modul dan program itu sama, tetapi ada sedikit perbedaan. Untuk melihat perbedaanya kita langsung saja ke contoh, membuat modul untuk menghilangkan spasi yang berlebihan dan karakter lain yang tidak diinginkan pada satu string berupa kalimat: 
  1. Kita buat dahulu sebuah folder baru (boleh dimana saja, asal ingat tempatnya.) untuk menyimpan file-file modul dan programnya, lalu beri nama folder tersebut dengan nama 'modul1'. 
  2. Lalu kita buka IDLE Pyhon shell.
  3. Pada python shell, File > New File atau dengan menekan tombol Ctrl+N, dan window baru muncul dengan nama 'Untitled'. Pada window 'Untitled' tersebut tekan Ctrl+S, atau File > Save, Pada kolom 'Save in' arahkan ke folder yang kita buat tadi yang bernama 'modul1' atau bila ingin mempermudah pencarian folder kita bisa buat di folder yang telah terbuka (c:/python34/modul1), tetapi kita harus buat sebuah folder baru, dan beri nama 'modul1' atau terserah.
  4. Beri nama pada file dengan nama 'mod1'
  5. Lalu kita buat sebuah file kosong pada folder yang sama dengan 'mod1.py' dengan nama '_init_.py'.
  6. Kembali ke file mod1.py tulis: 

  1. import string
  2. def simplify(text, whitespace=string.whitespace, delete=''):
  3.          r''' komen dengan 3 buah tanda kutip yang biasanya keterangan programer dan copyright '''
  4.         result=[]
  5.         word=''
  6.         a=1 (maaf, saya membuat kesalahan disini, tidak perlu ditulis)
  7.         for char in text: 
  8.                 if char in delete: 
  9.                         continue 
  10.                 elif char in whitespace :   
  11.                         if word:   
  12.                                 result.append(word) 
  13.                                 word='' 
  14.                 else:
  15.                         word+=char 
  16.                 a+=1 (juga kesalahan disini, tidak perlu ditulis)
  17.         return " ".join(result)

sebaiknya kita tidak copy paste text diatas, karena python sangat sentitif terhadap spasi dan tabulasi yang tidak perlu. contohnya pada baris

'def simplify(text, whitespace=string.whitespace, delete=''):'

bila kita tekan enter, maka dibaris berikutnya akan diberikan spasi yang cukup terlihat, sebaiknya tidak diubah jarak tersebut. 
Bila kita ingin menutup satu blok, dan kursor ada masih pada blok tersebut, kita bisa tekan backspace, agar kursor kembali ke blok sebelumnya.

Sekarang di folder kita ada 2 files, yaitu 

  1. mod1.py, dan
  2. _init_.py
Kita masih memerlukan sebuah program untuk dieksekusi yang akan mengakses file modul mod1.py.
  1. Pada IDLE python shell kita buka file baru (Ctrl+N) dan simpan (Ctrl+S) difolder yang sama dengan nama eksekusiFile.py.
  2. Sekarang pada folder tersebut ada tiga buah file yaitu, '_init_.py', 'mod1.py', dan 'eksekusiFile.py'. 
  3. Pada 'eksekusi.py' python window kita tulis:
  4. import mod1
    a=mod1.simplify('helllo   selamat  , :    pagi ', delete=',:')
    print(a)
  5. Sekarang kita mempunyai semua yang diperlukan, 
  6. Lalu pada python window 'eksekusi.py' kita tekan F5 (Run > Run Module)
Berikut adalah semua file dan hasil eksekusi nya:

Kita bahas eksekusi.py dahulu

Pada baris pertama (import mod1), karena file mod1.py ada pada satu folder yang sama dengan eksekusi.py, dan mod1.py bukanlah nama yang digunakan standard python untuk modul, kita bisa langsung tuliskan begitu, bila tidak dalam satu folder yang sama kita harus memberikan alamatnya.

Pada baris berikutnya (yang pada kenyataannya kosong) boleh diabaikan, baris kosong ini kita buat untuk mempermudah pembacaan script-nya saja. 

Pada baris ketiga ( a=mod1.simplify('helllo   selamat  , :    pagi ',delete=',:' ),  kita membuat sebuah variable string yang bernama a, dan variable tersebut harus diproses terlebih dahulu oleh modul (mod1, yang bernama simplify) yang isinya 

'helllo   selamat  , :    pagi '  

kemudian ada variable delete yang isinya ',:' 
dengan maksud bila ada karakter tersebut harap dihapus juga. semua ini diproses oleh modul mod1.py. 

lalu baris terakhir mencetak variable a pada monitor.

Sekarang kita masuk ke modul mod1.py

Pada baris pertama kita mengimpor modul string yang ada pada modul standard python. Karena ada fungsi 'whitespace' yang kita perlukan. 
Fungsi whitespace ini adalah untuk mendeteksi karakter ASCII yang berupa spaci, tabulasi, return, linefeed, formfeed dan vertikal tab.
Dan dengan perintah 'import string' kita memasukan semua fungsi yang ada pada modul string python pada memory, sangat tidak efisien sebetulnya.

Kemudian baris kedua 
def simplify(text, whitespace=string.whitespace, delete=''):
def adalah untuk memberitahukan pyhon ini adalah fungsi, dan diikuti dengan nama fungsinya (simplify).

Didalam fungsi ini, ada variable yang bernama text, whitespace, dan delete, (pada file eksekusi.py kita tuliskan:  mod1.simplify('helllo   selamat  , :    pagi ',delete=',:' )

Dengan kata lain, pada fungsi simplify, variable text akan diisi dengan 'helllo   selamat  , :    pagi ' , 
untuk variable whitespace kita tidak mengisinya pada file eksekusi.py, karena kita akan gunakan variable whitespace dengan default (variable whitespace default yang kita buat adalah 'string.whitespace', sehingga pada eksekusi.py kita tidak perlu lagi menulikan variable untuk whitespace, kecuali bila kita ingin mengganti variable default whitespace dengan yang lain kita bisa menuliskannya dengan:
a=mod1.simplify('helllo   selamat  , :    pagi ', whitespace ='xyz', delete=',:' 
Contoh diatas, kita mengganti variable whitespace default dengan karakter 'x','y', dan 'z'. 

Default variable delete adalah ''(dua buah single quote) yang merupakan sebuah variable string kosong, sehingga pada defaut untuk variable delete adalah tidak ada.
Dan pada eksekusi.py kita membuatnya menjadi delete=',:', dengan maksud kita juga ingin menghapus karakter koma (,) dan titik dua (:) dihapuskan.

Baris ketiga (r''' komen dengan 3 buah tanda kutip yang biasanya keterangan programer dan copy right ''')
Ini hanya komentar, tidak dibaca oleh python

Baris keempat (result=[])
Kita membuat variable list dengan nama result. ini tempat mengumpulkan kata.

Baris kelima (word='')
Kita membuat variable string kosong.

Baris keenam (a=1)
Baris ini sebetulnya tidak perlu, ini karena saya lupa menghapus baris ini dan baris yang ke 16 (a+=1) yang dimaksudkan untuk menguji program sebelum program ini bekerja dengan baik, maaf.

Baris ketujuh (for char in text: )(awal loop blok disini)
Merupakan blok loop, yang akan menanalisa semua karakter.
Baris ini kita mengambil string variable text menjadi karakter satu per satu, yang akan diuji. Bila dalam variable text merupakan karakter ASCII maka harus diuji diblok ini. Bila bukan sebuah karakter ASCII maka kemungkinan program kita akan menghasilkan hasil yang tidak kita harapkan (saya belum mengujinya), karena kita tidak membuat blok loop yang mengatur karakter selain ASCII.

Baris kedelapan (if char in delete: )
Disini kita mencari karakter yang ada pada variable 'delete' (yang pada default adalah ''(string kosong), dan kita mengisinya pada file eksekusi dengan koma (,) dan titik dua (:), disini bila karakter merupakan koma atau titik dua maka masuk ke blok ini.

Baris kesembilan (continue
Bila karakter yang diuji merupakan karakter dari variable delete maka, Loop akan kembali ke awal loop, yaitu ke baris ketujuh.

Baris kesepuluh (elif char in whitespace : )
Bila karakter yang diuji bukan merupakan karakter yang ada pada variable delete, maka uji karakter akan masuk kesini. Dan disini karakter diuji bila merupakan karakter string.whitespace (berupa spaci, tabulasi, return, linefeed, formfeed dan vertikal tab).

Baris kesebelas (if word:)
Bila variable word=True maka masuk ke blok ini.

Baris ketigabelas (result.append(word) )
Variable result mendapat tambahan anggota baru dengan string yang ada pada variable word.

Baris keempatbelas (word=''
Variable word menjadi string kosong.

Baris kelimabelas (else:)
Bila karakter tidak masuk ke blok yang if (baris 8) atau elif (baris 10), maka akan masuk ke blok ini.

Baris keenambelas (word+=char)
Variable word mendapat sebuah karakter dari char

Baris ketujuhbelas (a+=1)
Baris ini tidak perlu digubris.

Baris kedelapanbelas (return " ".join(result))
Hasil dikembalikan ke program yang memangil dengan format semua variable list result digabung dan diberi pemisah karakter spasi ' '.

No comments:

Post a Comment