Utaratibu (uhandisi wa programu)

Utaratibu (kwa Kiingereza: subroutine) ni sehemu ya programu ya kompyuta iliyopewa jina au inayotambuliwa kwa njia nyingine yenye elezo la seti yoyote ya matendo au hatua. Utaratibu unaweza kuvutwa kutoka sehemu mbalimbali za programu mara nyingi. Katika lugha mbalimbali za programu taratibu zinaweza kuwa na majina kama procedure, function, routine, method au subprogram.

 Makusudi 
Kwanza taratibu zilitokea kama chombo cha kufanya programu kuwa bora kabisa kuhusu kiasi cha kumbukumbu ya kompyuta zinazokaliwa nazo. Programu hizo ziliwezesha kutorudia sehemu za msimbo zilizo sawa katika programu bali kuzieleza mara moja na kuzivuta wakati unapohitajiwa. Sasa kazi hiyo ya utaratibu ikawa ya kusaidia na wajibu wake mkuu ni kupanga sehemu za programu kwa kurahisisha kuifahamu na kuitengeneza.
 Utengaji wa seti ya matendo katika utaratibu na kuivuta wakati unapohitajiwa zinawezesha kulitenga kimantiki fumbo la chini kamilifu lenye utoshelezi sanifu. Tendo hilo lina nafuu tena tofauti na marudio ya matendo ya namna ileile (ghairi ya uokoaji wa kumbukumbu) yaani mabadiliko yoyote yaliyofanyiwa katika utaratibu (kwa mfano kusahihisha makosa, kufanya kuwa bora kabisa, kuongeza kazi) yanaathiri miwito yake yote maadam wakati wa kurudufu kila badiliko lazima ziwekwe katika kila uingiaji wa msimbo unaobadilika.
 Hata wakati katika utaratibu kunatolewa na seti ya matendo inayotekelezwa mara moja, hii ni ya maana kwa sababu inawezesha kudogesha ukubwa wa blocku kamilifu za msimbo zinazotengeneza programu, yaani kufanya programu iweze kufahamika na kutazamiwa zaidi.

 Mifano 

 Ruby 

def fib(n)
  zinazotangulia, hii = 1, 1
  3.upto(n) {
    zinazotangulia, hii = hii, (zinazotangulia + hii)
  }
  hii
end

fib(1)    # 1
fib(2)    # 1
fib(3)    # 2
fib(20)   # 6765

 Python 

def fib(n):
    zinazotangulia, hii = 1, 1
    for i in range(3, n + 1):
        zinazotangulia, hii = hii, (zinazotangulia + hii)
    return hii

fib(20)     # 6765

 Javascript 

function fib(n) {
    var zinazotangulia = 1;
    var hii = 1;
    for (var i = 3; i <= n; i++) {
        var nakalaYaZinazotangulia = zinazotangulia;
        zinazotangulia = hii;
        hii = hii + nakalaYaZinazotangulia;
    }
    return hii;
}

fib(20);    // 6765

 Blocky 
Picha:Fibonacci number in Blocky.png

 Mifano (recursive) 

 Ruby 

def fib(n)
  return n if n <= 1
  fib(n - 1) + fib(n - 2)
end

fib(20)   # 6765

 Python 

def fib(n):
    if n <= 1:
        return n
    return fib(n - 1) + fib(n - 2)

fib(20)     # 6765

 Javascript 

function fib(n) {
    if (n <= 1) {
        return n;
    }
    return fib(n - 1) + fib(n - 2);
}

fib(20);    // 6765

 Angalia pia 
 Fibonacci
 Blocky

Jamii:Uhandisi wa programu