Funksjoner og prosedyrer i Visual Basic.NET Om funksjoner Kan redusere kodens lengde / kompleksitet Den som skriver må bry seg med detaljer Den som bruker funksjonen må ikke tenke på detaljer Lettere vedlikehold ett sted Generell, kan brukes i mange sammenhenger Reduserer størrelsen på kode God programmeringsskikk å bruke funksjoner Eksempel: snitt Function finngjennomsnitt(byval tall1 As Integer, ByVal tall2 As Integer) Dim sum, snitt As Single sum = tall1 + tall2 snitt = sum / 2 finngjennomsnitt = snitt Dim resultat as Single = finngjennomsnitt(10, 36) MsgBox("Gjennomgsnittet er " & resultat) MsgBox("Test" & finngjennomsnitt(10, 12)) Dim svar As Single svar = finngjennomsnitt(10, 12) Nytt eksempel: En funksjon for å slå sammen tekst Function vishelenavnet(byval fornavn as String, byval etternavn as String) Dim hele as String hele = fornavn & " " & etternavn vishelenavnet = hele 1
Bruke funksjonen Function vishelenavnet(byval fornavn as String, byval etternavn as String) Dim hele as String hele = fornavn & " " & etternavn vishelenavnet = hele Private Sub Button1_Click(...) Dim altsammen as String Dim for, etter as String for = TextBox1.text etter = TextBox2.text altsammen = vishelenavnet(for, etter) MsgBox(altSammen) Bruke funksjonen igjen Function vishelenavnet(vishelenavnet(byval fornavn as String, byval etternavn as String) 'antar at her er koden. Se tidligere slide Private Sub Button2_Click(...) dim hele as string hele = vishelenavnet( Nina", Saltvik") MsgBox(hele) og enda en gang, faktisk! Function vishelenavnet(vishelenavnet(b yval fornavn as String, byval etternavn as String) 'antar at her er koden. Se tidligere slide Ser her fleksibilitet og smart bruk i praksis Prosedyrer kan også lages Const max As Integer = 99 Private mat(max) As Integer Private Sub lagtilfeldig() Dim tilfeldigtall As Single Dim i As Integer For i = 0 To max tilfeldigtall = Rnd() mat(i) = tilfeldigtall * 5000 i Har nå en matrise med 100 tall mellom 0 og 5000 Var ikke det fort gjort? 2
Bruke prosedyren Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click dim i as Integer lagtilfeldig() for i = 0 to max 'konstanten max er 99... MsgBox mat(i) Det er kjedelig for brukeren å klikke OK 100 ganger Lager nå en prosedyre for å skrive ut i ListBox1 Private Sub skrivuttilfeldig() Dim temp As Integer For Each temp In mat ListBox1.Items.Add(temp) Merk deg forskjellen på en for each-løkke (her) og en vanlig for-løkke (som vist på forrige slide) Hva om vi vil ha sortert utskrift Eventuelt begge delene? Sortering, boblesort Dim antallgjennomlop, temp, i As Integer Dim intetombytte As Boolean antallgjennomlop = 1 Do intetombytte = True For i = 0 To max - antallgjennomlop If mat(i) > mat(i + 1) Then temp = mat(i) mat(i) = mat(i + 1) mat(i + 1) = temp intetombytte = False End If i antallgjennomlop = antallgjennomlop + 1 Loop Until intetombytte = True 3
Sortering ved utvelgelse Dim hittilminst As Integer = 0 Dim i As Integer Dim j As Integer Bruke ferdig metode i klassen Array Array.sort(mat) For i = 0 To tabell.length - 1 hittilminst = i For j = i To tabell.length - 1 If tabell(j) < tabell(hittilminst) Then Dim tmp = tabell(hittilminst) tabell(hittilminst) = tabell(j) tabell(j) = tmp End If Skriv ut, men nå sortert (Listbox2) Private Sub skrivutsortert() Dim temp As Integer For Each temp In mat ListBox2.Items.Add(temp) Skriv ut Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Dim snittforstesiste as Integer lagtilfeldig() skrivuttilfeldig() boblesortering() skrivutsortert() 4
ByVal, ByRef og Optional ByVal: (value) Gir verdi inn til prosedyren VB.NET tar en kopi av den originale verdien ByRef: (Reference) overfører data som en referanse til den fysiske minneadressen Vi får da direkte tilgang til dataene Optional: Kan velge om argumentet skal være med eller ikke, dersom ikke blir standard verdi satt Eks: ByVal, ByRef og Optional Function VolumAreal(ByVal gr As Integer, _ ByVal b As Integer, _ Optional ByVal h As Integer = 1) _ As Integer 'finner enten volum eller areal VolumAreal = gr * b * h Private Sub Form1_Load dim res = "volum av 2, 2, 2= " & VolumAreal(2, 2, 2) res += "areal av 3, 7= " & VolumAreal(3, 7) MsgBox(res) Applikasjon utviklet på forelesning 5