bab5 tatacara sub dan fungsi

10
BAB LIMA: TATACARA SUB DAN FUNGSI Di dalam pengaturcaraan, pastinya akan terdapat beberapa tatacara yang melakukan operasi yang sama. Contohnya, pengguna boleh memilih sama ada butang arahan atau menu pilihan bagi melaksanakan arahan yang sama. Daripada menaip atau menyalin semula pengekodan yang sama, adalah lebih baik menggunakan Tatacara Am. Tatacara Am ini membenarkan pengekodan digunakan semula (reusable) dan dipanggil oleh kedua-dua Tatacara Acara. Tatacara Acara membolehkan pengekodan yang besar dipecahkan kepada unit lebih kecil bagi melaksanakan tugas yang lebih spesitik. Dengan ini, sebarang arahan yang akan dilakukan ke atas kod tersebut akan menjadi lebih mudah lagi kerana hanya perlu mengubah bahagian yang ingin diubah tanpa melibatkan keseluruhan aturcara. TATACARA SUB Membina Tatacara Sub (Sub Procedure) Langkah 1: Buka tetingkap pengekodan. Langkah 2: Pilih Add Procedure daripada menu Tools. Langkah 3: Masukkan nama bagi tatacara di dalam kotak dialog yang terpapar. Langkah 4: Pada bahagian Type, pilih butang pilihan Sub dan bahagian scope, pilih butang pilihan Private. Butang pilihan Public akan menyebabkan tatacara boleh dicapai oleh modul projek yang lain. Langkah 5: Klik OK. Bagi contoh Tatacara Sub yang berikut, Tatacara Sub SelectColor tidak mempunyai acara. Private Sub SelectColor() 'Allow user to select a color dlgColor.ShowColor End Sub

Upload: anas-assayuti

Post on 19-May-2015

468 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Bab5 tatacara sub dan fungsi

BAB LIMA: TATACARA SUB DAN FUNGSI

Di dalam pengaturcaraan, pastinya akan terdapat beberapa tatacara yang melakukan operasi yang

sama. Contohnya, pengguna boleh memilih sama ada butang arahan atau menu pilihan bagi

melaksanakan arahan yang sama. Daripada menaip atau menyalin semula pengekodan yang sama,

adalah lebih baik menggunakan Tatacara Am. Tatacara Am ini membenarkan pengekodan

digunakan semula (reusable) dan dipanggil oleh kedua-dua Tatacara Acara.

Tatacara Acara membolehkan pengekodan yang besar dipecahkan kepada unit lebih kecil

bagi melaksanakan tugas yang lebih spesitik. Dengan ini, sebarang arahan yang akan dilakukan

ke atas kod tersebut akan menjadi lebih mudah lagi kerana hanya perlu mengubah bahagian yang

ingin diubah tanpa melibatkan keseluruhan aturcara.

TATACARA SUB

Membina Tatacara Sub (Sub Procedure)

Langkah 1: Buka tetingkap pengekodan.

Langkah 2: Pilih Add Procedure daripada menu Tools.

Langkah 3: Masukkan nama bagi tatacara di dalam kotak dialog yang terpapar.

Langkah 4: Pada bahagian Type, pilih butang pilihan Sub dan bahagian scope, pilih butang

pilihan Private. Butang pilihan Public akan menyebabkan tatacara boleh dicapai

oleh modul projek yang lain.

Langkah 5: Klik OK.

Bagi contoh Tatacara Sub yang berikut, Tatacara Sub SelectColor tidak mempunyai acara.

Private Sub SelectColor()

'Allow user to select a color

dlgColor.ShowColor

End Sub

Page 2: Bab5 tatacara sub dan fungsi

Tatacara Sub dan Fungsi

Mohd Farid JaafarJSM, FSKTM, UPM

68

Pengekodan bagi tatacara yang baru adalah sama seperti tatacara yang lain, cuma bezanya ialah

Tatacara Sub tidak mempunyai acara. Tatacara Sub yang baru ini masih tidak boleh dilaksanakan

selagi tidak dipanggil oleh tatacara yang lain. Untuk memanggil Tatacara Sub, nama bagi

Tatacara Sub yang baru , contohnya SelectColor, akan dipanggil dari Tatacara Sub yang lain.

Contoh:

Private Sub cmdChangeMessage_Click()

'Change the color of the message

SelectColor

lbIMessage.ForeColor = dlgColor.Color

End Sub

Private Sub cmdChangeTitle_Click()

'Change the color of the title

SelectColor

IblTitle.ForeColor = dlgColor.Color

End Sub

**Kedua-dua tatacara di atas memanggil semula tatacara SelectColor

Menghantar Pembolehubah kepada Tatacara

Kadangkala kita akan menggunakan nilai bagi suatu pembolehubah bagi tatacara pertama di

dalam tatacara kedua. Tatacara kedua akan memanggil nilai pembolehubah dari tatacara

pertama atau sebaliknya. Bagi keadaan ini, pengisytiharan di peringkat modul mesti dilakukan.

Tetapi cara ini akan menyebabkan pembolehubah boleh dicapai oleh tatacara selain daripada

tatacara pertama atau kedua.

Untuk memastikan skop bagi pembolehubah hanya dicapai oleh tatacara yang tertentu sahaja,

pengisytiharan pembolehubah akan dilakukan secara setempat dan akan diberikan kepada tatacara

yang memanggil pembolehubah itu sahaja. Berdasarkan contoh berikut, Tatacara Sub SelectColor

akan dipanggil dari beberapa tatacara.

Page 3: Bab5 tatacara sub dan fungsi

Tatacara Sub dan Fungsi

Mohd Farid JaafarJSM, FSKTM, UPM

69

Contoh:

Private Sub SelectColor(ingInComingColor As Long)

‘Allow user to select a color

With dlgColor

.Flags = cdICCRGBInit 'Initialize the Color dialog Box

.Color = ingInComingColor 'Set the initial color ShowColor

End With

End Sub

Private Sub cmdChangeMessage_Click()

'Change the color of the message

Dim IngOriginalColor As Long

IngOriginalColor = IblMessage.ForeColor

SelectColor IngOriginalColor

lblMessage.ForeColor = dlgColor.Color

End Sub

Private Sub cmdChangeTitle_Click()

'Change the color of the title

Dim IngOriginalColor As Long

lngOriginalColor = IblTitle.ForeColor

SelectColor IngOriginalColor

lblTitle.ForeColor = dlgColor.Color

End Sub

Tatacara SelectColor di atas mempunyai argumen yang berikut:

Private Sub SelectColor (lnglncomingColor As Long)

Ini bermaksud, apabila tatacara lain memanggil Tatacara SelectColor, argumen mesti disertakan

sekali. Nilai bagi argumen mestilah berjenis data sama bagi kedua-dua tatacara yang memanggil

dan dipanggil. Bagi cmdChangeMessage_Click() dan cmdChangeTitle_Click(), pembolehubah

IngOriginalColor adalah data berjenis Long Integer.

Page 4: Bab5 tatacara sub dan fungsi

Tatacara Sub dan Fungsi

Mohd Farid JaafarJSM, FSKTM, UPM

70

Nama bagi argumen bagi tatacara yang memanggil dan dipanggil tidak semestinya sama.

Tatacara Sub SelectColor akan mengambil sebarang nilai yang berjenis data Long Integer yang

memanggilnya iaitu cmdChangeMessage_Click() dan cmdChangeTitle_Click() dan dirujukkan

kepada ingInComingColor di dalam Tatacara Sub SelectColor.

Menghantar Argumen Menggunakan ByVal atau ByRef

ByVal atau ByRef (dengan nilai atau dengan rujukan) adalah digunakan apabila anda hendak

menghantar suatu nilai kepada suatu tatacara. Dengan ByVal, nilai bagi argumen akan dihantar

kepada tatacara dan tatacara tersebut tidak boleh mengubah nilai tersebut. Tetapi dengan ByRef

nilai bagi argumen yang dihantar kepada tatacara boleh berubah. Sekiranya anda tidak

menentukan sama ada ByVal atau ByRef, argumen akan dihantar menggunakan rujukan, ByRef.

TATACARA FUNGSI

Membina Tatacara Fungsi

Dalam bab yang lepas, anda telah mempelajari Fungsi Format dan Fungsi Val. Fungsi ini adalah

fungsi yang tertakrif dan tidak perlu dibina oleh pengaturcara. Dalam bahagian ini, anda akan

mempelajari membina fungsi sendiri bagi mengira suatu nilai dan memanggil fungsi dari lokasi

yang diperlukan. Sebagai contoh, suatu tatacara fungsi bernama Commission akan melakukan

pengiraan dan mengembalikan nilai komisen bagi jurujual.

Cara untuk membina fungsi Commision sama seperti membina tatacara sub. Di bahagian

tetingkap kod, pilih Add Procedure dari menu Tools. Pilih fungsi Function dan Private pada

Scope. Berikan nama Commission dan di dalam tetingkap kod akan mengandungi pernyataan

berikut:

Private Function Commission ()

End Function

Page 5: Bab5 tatacara sub dan fungsi

Tatacara Sub dan Fungsi

Mohd Farid JaafarJSM, FSKTM, UPM

71

Tatacara fungsi adalah hampir sama seperti tatacara sub. Perbezaannya ialah fungsi

mempunyai argumen dan memulangkan nilai. Argumen diletakkan di dalam kurungan

(parentheses ( ) ). Argumen dihantar menggunakan ByVal atau ByRef.

Apabila menulis fungsi, isytiharkan argumen yang diperlukan oleh fungsi. Setiap argumen

diberikan nama pencam dan jenis data. Nama pencam ini akan digunakan dalam fungsi dan

memegang nilai yang dirujuk semasa fungsi dipanggil. Nilai yang dipulangkan bagi setiap fungsi

diberikan oleh pernyataan FunctionName = expression.

Contoh:

Private Function FunctionName (var7 As Typel, var2 As Type2, ...) As dataType

Statement (s)

FunctionName = expression

End Function

Contoh:

Private Function Commission (ByVal curSalesAmount As Currency)

Private Function Payment (curRate As Currency, curTime As Currency)

Perbezaan antara tatacara sub dan tatacara fungsi ialah tatacara fungsi mesti menentukan nilai

yang akan dipulangkan. Nilai pulangan ini akan diberikan kepada pembolehubah yang telah

diisytiharkan (sama seperti nama fungsi).

Kita juga boleh menentukan jenis data pada nilai yang akan dipulangkan dengan menambah

klausa ’As’ selepas nama fungsi. Bagi contoh di atas, fungsi curCommission, nilai yang

dipulangkan adalah berjenis currency. Tatacara di atas merupakan cara bagaimana untuk kita

menulis fungsi curCommission bagi mengira jumlah komisyen vang berjenis currency.

Page 6: Bab5 tatacara sub dan fungsi

Tatacara Sub dan Fungsi

Mohd Farid JaafarJSM, FSKTM, UPM

72

Contoh: Pembolehubah curCommision

Private Function CurCommision (ByVal curSalesAmount As Currency) As Currency

‘Calculate the sales commission

If curSalesAmount < 1000 Then

CurCommision = 0

ElseIf curSalesAmount <= 2000 Then

CurCommision = 0.15 * curSalesAmount

Else

CurCommision = 0.2 * curSalesAmount

End If

End Function

Memanggil Fungsi

Cara untuk memanggil fungsi bagi Function curCommssion ada seperti berikut:

Dim curSales As Currency

If IsNumeric(txtSales.Text) Then

CurSales = Val(txtSales.Text)

lblCommision.Caption = curCommision(curSales)

End If

* * Bagi contoh di atas, nama argumen yang pada fungsi yang memanggil adalah tidak sama

dengan nama argumen pada fungsi yang dipanggil (curSales != curSalesAmount). Apabila

fungsi dipanggil, nilai pada curSales akan dihantar pada fungsi dan diberi bepada argumen,

berdasarkan pada contoh di atas ialah argumen curSalesAmount. Ini bermakna argumen bagi

setiap kiraan di dalam fungsi tersebut akan merujuk kepada argumen curSales.

Page 7: Bab5 tatacara sub dan fungsi

Tatacara Sub dan Fungsi

Mohd Farid JaafarJSM, FSKTM, UPM

73

Membina Tatacara Fungsi dengan Beberapa Argumen

Untuk menulis pelbagai argumen pada fungsi, argumen diletakkan di dalam kurungan

(parenthesis ( ) ) dan dipisahkan oleh koma ( , ). Setiap argumen diberi nama pencam jenis data.

Contoh di bawah menunjukkan fungsi curPayment dan 3 argumen.

Private Function curPayment (curRate As Currency, curTime As Currency, _

curAmt As Currency) As Currency

‘Calculate the monthly payment to an amortized loan

‘Set the return value of the function

curPayment = curAmt * (1 + curRate/12) ^ (curTime * 12)

End Function

Memanggil Fungsi dengan Beberapa Argumen

Berikut merupakan cara untuk memanggil fungsi yang mempunyai pelbagai argumen:

curRate = Val (txtRate.Text)

curTime = Val (txtTime.Text)

curAmount = Val (txtAmount.Text)

lblPayment.Caption = curPayment (curRate, curTime, curAmount)

Output yang dihasilkan oleh fungsi juga boleh diformatkan. Berdasarkan arahan bawah, fungsi

dipanggil menggunakan fungsi tersarang (nested function):

lblPayment.Caption = FormatCurrency (curPayment (Val (txtRate.Text), _

Val (txtTime.Text), Val (txtAmount.Text)))

Page 8: Bab5 tatacara sub dan fungsi

Tatacara Sub dan Fungsi

Mohd Farid JaafarJSM, FSKTM, UPM

74

TATACARA DIGUNA SEMULA

Tatacara fungsi boleh digunakan lebih daripada sekali di dalam sesuatu pengaturcaraan. Berikut

merupakan contoh pengaturcaraan bagi menggunakan fungsi curCalculateBonus untuk mengira

bonus kepada pemilik kedai dan komisen kepada jurujual. Jumlah dan nilai kadar akan diberi oleh

tatacara event kepada tatacara fungsi. Contoh aturcara:

**Perhatikan general sub procedure (Clear) digunakan untuk mengosongkan nilai pada skrin

antaramuka

Option Explicit

Private Sub mnuCalculateBonus_Click()

‘Calculate and display the amount of the bonus earned by the shopper

Dim curPurchase As Currency

Dim curBonus As Currency

Const curBonusPercent As Currency = 0.01

curPurchase = Val (txtPurchaseAmount.Text)

If curPurchase > 0 Then

‘Call function procedure

curBonus = curCalculateBonus (curPurchase, curBonusPercent)

MsgBox txtName.Text & “ has earned “ & FormatCurrency (curBonus) _

& “ in girt certificates”, vbInformation, “Congratulations”

txtName.SetFocus

Else

MsgBox “You must input a value for the amount of purchase”, _ vbOKOnly,

“Input Requested”

With txtPurchaseAmount

.Text = “”

.SetFocus

End With

End If

End Sub

Page 9: Bab5 tatacara sub dan fungsi

Tatacara Sub dan Fungsi

Mohd Farid JaafarJSM, FSKTM, UPM

75

Private Sub mnuCalculateCommision_Click()

‘Calculate and display the amount of the salesperson’s commission

Dim curPurchase As Currency

Dim curCommision As Currency

Const curCommisionLimit As Currency = 500

Const curCommisionPercent As Currency = 0.05

curPurchase = Val (txtPurchase.Text)

If curPurchase >= curCommisionLimit Then

‘Call function procedure

CurCommision = curCalculateBonus (curPurchase, curCommision)

MsgBox “Salesman ” & txtSalesPersonID.Text & “ earns ” & _

FormatCurrency (curCommision) & “ in commission for this sale.”, _

VbInformation, “Congratulation”

txtName.SetFocus

Else

MsgBox “No commission earned on this sale”, vbInformation, “Sorry”

End If

End Sub

Private Sub mnuEditClear_Click()

‘Call the Clear procedure

Clear ‘Call the Sub procedure

End Sub

Private Function curCalculateBonus (curAmount As Currency, curate As _

Currency) As Currency

‘Calculate the amount of bonus earned based on the sale

‘amount and the percentage rate

curCalculateBonus = curAmount * curate

End Function

Page 10: Bab5 tatacara sub dan fungsi

Tatacara Sub dan Fungsi

Mohd Farid JaafarJSM, FSKTM, UPM

76

Private Sub Clear()

‘Clear the text boxes on the form

txtName.Text = “”

txtPurchaseAmount.Text = “”

txtSalesPersonID.Text = “”

txtName.SetFocus

End Sub

TATACARA SUB VS TATACARA FUNGSI

Tatacara Sub dan Tatacara Fungsi merupakan tatacara yang akan melaksanakan tindakan/operasi.

Tatacara Fungsi boleh mengembalikan nilai (return value) kepada tempat dari mana ia dipanggil.