Pipedija - tautosaka, gandai, kliedesiai ir jokios tiesos! Durniausia wiki enciklopedija durnapedija!


If-else

Iš Pipedijos - durniausios enciklopedijos.
Jump to navigation Jump to search
If-else sakinys yra viso ko pagrindas, nes jis nustato viską.

If-else arba sąlyginis sakinys, dar liaudiškai vadinamas kaip Ifas - tai esminis, pats svarbiausaias visų programavimo kalbų elementas, be kurio jokia kalba negali egzistuoti. Tiesiogiai ar netiesiogiai šis sakinys realizuojamas netgi tose programavimo kalbose, kuriose jo atseit nėra. Galima tarti, kad tai vienas iš tų veiksmų, be kurių neįmanoma Tiuringo mašina, t.y., neįmanomi ir patys kompiuteriai.

Galima tarti, kad jei mokate kažką suprogramuoti su If-else sakiniais, tai jau mokate kažką suprogramuoti. O jei nemokate ir nesuprantate to iš principo - tai reiškia, kad esate dibilas, o gal ir realiai debilas, nes negali būti taip, kad normalus žmogus nesuprastų tokių dalykų.

If-else sakinio esmė labai paprasta:

  • Jei tam tikra sąlyga yra teisinga, tai darome vieną dalyką, t.y., "If sąlyga - darom".
  • Kitu atveju (jei ta aukščiau minėta sąlyga nėra teisinga) darome kitą dalyką, t.y., "Else - darom"

Pačiu paprasčiausiu atveju iš visos sąlygos gali būti reikalingas tik "If", tačiau "Else" irgi dažnai praverčia, nes vykdomas yra tik tuo atveju, jei "If" yra netiesa, t.y., negalioja.

Tipiški tokių sakinių atvejai yra pačiose įvairiausiose kalbose ir kartu su goto sakiniais gali būti panaudojami praktiškai bet kokioms labiau išvystytoms konstrukcijoms simuliuoti, pvz., kad ir įvairiausiems ciklai atkurti. Tiesa, dėl to, kad goto naudojimas laikomas kenksmingu (ir tai tiesa), tai geriau be tos emuliacijos apsieiti. Bet kuriuo atveju reikia žinoti, kad If-else sakinys yra pats programavimo pagrindas.

Kadangi labai neretai naudojamos ilgos If-else sakinių sekos, kur tikrinami įvairūs galimi reikšmių variantai, yra atsiradę ir pora supaprastintų variantų, truputį palengvinančių gyvenimą programuotojams. Vienas iš variantų vadinasi "elseif", kurio esmė - pakeisti sakinį "else [...] if", o kitas - sutrumpinta forma, skirta kintamųjų priskyrimui, kur būna užrašoma maždaug kaip "(condition) ? true statement : false statement;". Pastaroji forma daugelio programuotojų mėgstama dėl trumpumo, tačiau senesnių yra labai nemėgstama dėl to, kad yra vizualiai labai neakivaizdi ir trukdo patogiai skaityti svetimą kodą.

Dar sudėtingesniais atvejais vietoje ilgų if-else sekų būna naudojamas dar mažiau akivaizdžios "switch" tipo sekos, bet tai jau dar kita tema ir čia to nepasakosim.

If-else sakinys įvairiose programavimo kalbose

Įvairiose programavimo kalbose tas If-else sakinys atrodo visai panašiai, skiriasi tiktai detalės.

If-else sakinys C kalbos tipo programavimo kalbose

Tipiškas If-else sakinys C kalboje ir iš jos kilusiose kalbose atrodo maždaug taip:

if (something==xyz) {
        // Do something you need to do when comparison is true
} else {
        // Do something else when comparison is not true
}

If-else sakinys Pascal tipo programavimo kalbose

Truputį kitaip, bet visvien labai panašiai If-else atrodo Pascal grupės kalbose (įskaitant Modula, Ada ir pan.):

if something = xyz then
        writeln('Comparison is true');
else
        writeln('Else comparison is not true');


If-else sakinys asemblerio kalboje

Programiškai, pačiu primityviausiu atveju, If-else sakinys realizuojamas asembleriu, pvz., x86 architektūrose maždaug taip (nepotimizuota, tačiau struktūriškai ryškesnė programa):

START:
CMP AX, CX        ; Compare register AX to register CX
JZ EQUALS         ; If AX==CX then jump to label EQUALS
JMP NONEQUALS     ; Else jump to label NONEQUALS
EQUALS:
; do here something you need
JMP NEXT          ; Then jump to NEXT
NONEQUALS:
; do here something you need in non-equal case
NOP               ; Do nothing, this operation is only for spacing
NEXT:
; continue program

Čia svarbu atkreipti dėmesį, kad nors tiesiogiai nėra parašoma "If...else", išties tie patys veiksmai atliekami, naudojant patikrinimus bei sąlyginius ir nesąlyginius perėjimus. Taigi, rezultatas išties gaunasi visiškai tas pats. Dar vienas svarbus momentas: jei kažkur prie EQUALS ar NONEQUALS padarysim JMP į START, tai gausime ne ką kitą, o tiesiog klasikinį While ciklą. Taigi, If-else sakinys išties yra ne kas kita, kaip ir visų ciklų pagrindas. Tiesiog įprastose programavimo kalbose tai būna užmaskuojama (įvardinama kitais sakiniais), o asembleryje - puikiai matoma.


Dar žr.