Funkcije na micro:bit-u: paleta Functions u MakeCode-u

Lekcija 10 od 14 · micro:bit

Kada se ista grupa blokova ponavlja na više mesta, program postaje dugačak i težak za izmenu. Funkcija je imenovana grupa naredbi: napravimo je jednom, a pozivamo koliko god puta treba. Funkcija može da prima podatke (parametre) i da vrati rezultat. Funkcije su u paleti Functions (pod Advanced).

Pre nego što počneš: potrebno predznanje – petlje, grananje.
Kako da učiš: svaki primer složi u MakeCode-u i isprobaj u simulatoru (ili na uređaju), a zadatke na kraju prvo reši sam/a; uputstvo i rešenje otvori tek posle toga. Programi su dati blokovima (opis) i u JavaScript-u iz MakeCode-a: u editoru klikni na JavaScript, nalepi kod i vrati se na Blocks – dobićeš iste blokove.

Prva funkcija

Klikni Make a Function…, upiši ime (npr. trepni) i potvrdi. Na radnoj površini se pojavi blok function trepni, a u paleti blok call trepni kojim se funkcija poziva.

// funkcija: srce se upali i ugasi
function trepni () {
    basic.showIcon(IconNames.Heart)
    basic.pause(300)
    basic.clearScreen()
    basic.pause(300)
}

input.onButtonPressed(Button.A, function () {
    trepni()     // poziv funkcije
})
input.onButtonPressed(Button.B, function () {
    trepni()     // ista funkcija, drugo mesto
    trepni()
})

Ako želimo da srce bude veće ili da trepće sporije, menjamo samo telo funkcije – svi pozivi odmah koriste novu verziju.

Funkcija sa parametrom

Pri pravljenju funkcije možemo dodati parametar (dugme Number, Text…). Parametar je promenljiva koja dobija vrednost pri pozivu:

// koliko puta treba trepnuti, zadaje se pri pozivu
function trepni (puta: number) {
    for (let i = 0; i < puta; i++) {
        basic.showIcon(IconNames.Heart)
        basic.pause(300)
        basic.clearScreen()
        basic.pause(300)
    }
}

input.onButtonPressed(Button.A, function () {
    trepni(2)    // dva puta
})
input.onButtonPressed(Button.B, function () {
    trepni(5)    // pet puta
})

Isti program u Python-u (MakeCode) – funkcija se pravi rečju def:

def trepni(puta: number):
    for i in range(puta):
        basic.show_icon(IconNames.HEART)
        basic.pause(300)
        basic.clear_screen()
        basic.pause(300)

def on_button_pressed_a():
    trepni(2)
input.on_button_pressed(Button.A, on_button_pressed_a)

Funkcija koja vraća vrednost

Blok return vraća rezultat funkcije onome ko ju je pozvao. Takva funkcija se koristi kao vrednost – npr. unutar bloka show number.

// vraća veći od dva broja
function veci (a: number, b: number): number {
    if (a > b) {
        return a
    }
    return b
}

input.onButtonPressed(Button.A, function () {
    let x = randint(1, 9)
    let y = randint(1, 9)
    basic.showNumber(x)
    basic.showNumber(y)
    basic.showNumber(veci(x, y))   // rezultat funkcije
})

Kada se izvrši return, funkcija se odmah završava – zato posle prvog return a ne dolazi do return b.

Primer: strane sveta sa funkcijom

U lekciji o grananju kompas je imao dugačak niz uslova. Ako ih premestimo u funkciju koja vraća naziv strane sveta, glavni deo programa postaje kratak i čitljiv:

function stranaSveta (ugao: number): string {
    if (ugao < 45 || ugao >= 315) {
        return "S"      // sever
    } else if (ugao < 135) {
        return "I"      // istok
    } else if (ugao < 225) {
        return "J"      // jug
    }
    return "Z"          // zapad
}

basic.forever(function () {
    basic.showString(stranaSveta(input.compassHeading()))
})

Funkciju stranaSveta lako je proveriti i bez kompasa: stranaSveta(90) mora da vrati „I“, a stranaSveta(200) „J“.

Zadaci za vežbu

Za svaki zadatak postoji primer, uputstvo i rešenje. Rešenja su provereno tačna na primerima iz teksta.

ZADATAK 01Težina: lako

Prosek tri broja

Napiši funkciju prosek(a, b, c) koja vraća prosek tri broja (deljenje sa 3). Pritiskom na A prikaži prosek brojeva 4, 8 i 9.

Primer

Izlaz

7
ZADATAK 02Težina: lako

Paran ili neparan

Napiši funkciju jeParan(n) koja vraća true ako je broj paran. Na tresenje izaberi slučajan broj od 1 do 20, prikaži ga, pa prikaži „P“ za paran ili „N“ za neparan.

Primer

Izlaz

npr. 14, pa P
ZADATAK 03Težina: srednje

Crtanje linije

Napiši funkciju linija(red) koja upali svih 5 lampica u zadatom redu. Pritiskom na A ekran se puni red po red odozdo nagore, a pritiskom na B briše.

Primer

Izlaz

posle A: svetli ceo ekran (redovi 4, 3, 2, 1, 0)
Česte greške i saveti
  • Ime funkcije treba da kaže šta ona radi: trepni, stranaSveta, a ne f1.
  • Funkcija se mora pozvati – sam blok function ne radi ništa dok ga ne pozoveš.
  • Parametri postoje samo unutar funkcije; van nje se ne mogu koristiti.
  • Funkcija koja vraća vrednost mora imati return na svakom putu kroz nju.

Proveri znanje

Otvori kviz

Funkcije

1. Čemu služe funkcije?




2. Kako se funkcija trepni izvršava?




3. Šta je parametar?




4. Šta vraća veci(3, 8) iz lekcije?