Labi.
Tātad tagad parunāsim par kaut ko patiešām noderīgu
programmēšanā —nosacījuma operatoriem.
Tātad nosacījuma izteiksmes ļauj jūsu programmām pieņemt lēmumus un
krustcelēs izvēlēties iet dažādus ceļus, tas ir kaut kas, uz ko es
norādīju nedaudz agrāk, atkarībā no mainīgo vērtībām vai atkarībā no
tā, ko lietotājs ievada programmētājā, komandrindā, vai ir uzvedne
vai kas tamlīdzīgs.
Programmā C ir daži dažādi veidi, kā izteikt nosacījuma izteiksmes,
ko mēs dažkārt jūsu programmās arī sauksim par nosacītajiem
zarojumiem..
Un daži no tiem jums šķitīs diezgan pazīstami no nulles, tāpēc mēs
pat pavilksim tos blakus,lai jūs varētu izveidot šo analoģiju savā
galvā.
Tātad, if-- if ir diezgan vienkāršs operators.
Ja jūs atceraties, no nulles labajā pusē jūsvarat aizpildīt šo
sešstūri ar zilu izteiksmi, ja mouse down vai ja x ir mazāks par 10,
vai tamlīdzīgi.
Un tad, ja x bija mazāks par 10 vai ja , tiešām, bija mouse down,
viss mīklas kods tiks izpildīts.
Visas lietas, kas iederas tajā C formā.
Līdzīgi, vai mums ir if pa kreisi tur.
Ja Būla izteiksme, ko izmantoju tikai kā aizvietotāju vienai no
iepriekš apspriestajām Būla izteiksmēm, atvēriet figūriekavas,
aizvēriet figūriekavas
Tāpēc iztēlojieties atvērtas figūriekavas un slēgtas figūriekavaskā
analoģiju if bloka sviestmaižu efektam labajā pusē.
Ja Būla izteiksme operatorā if ir patiesa, tad visas koda rindas
starp figūriekavām tiks izpildītas secībā no augšas uz leju.
Ja Būla izteiksme ir nepatiesa, tad mēs izlaidīsim visu, kas atrodas
figūriekavās, jo mēs vēlamies iet pa to ceļa atzaru tikai tad, ja
Būla izteiksme ir patiesa.
Mēs varam spert vienu soli uz priekšu ar if else.
Tātad šis Scratch bloks ir diezgan līdzīgs tam, ko tikko redzējām
pirms brīža, izņemot to, ka atkarībā no tā, kas notiek, ir divi
dažādi ceļi.
Tātad, ja bija mouse down vai ja x bija mazāks par 10, mēs darīsim
visu, kas atrodas pirmajās krustcelēs, pirmajā C.
Pretējā gadījumā, ja ir mouse up vai x nav mazāks par 10, mēs visu
darīsim otrajā kopā.
Un tas ir līdzīgi tam, ko jūs šeit redzat C valodā
Ja Būla izteiksme, tad veiciet darbības pirmajā figūriekavu kopā.
Pretējā gadījumā, veiciet darbības otrajā figūriekavu kopā.
Tātad, ja Būla izteiksme ir patiesa, tad mēs darīsim visu, kas ir
pirmajā kopā.
Ja Būla izteiksme ir nepatiesa, tas aktivizēs pretējo, un mēs darītu
visu, kas norādīts otrajā figūriekavu kopā.
Atkal - no augšas uz leju, visas rindas iekavās.
C valodā ir iespējams izveidot if-else if-else ķēdi.
Patiesībā jums var būt if-else if-else if-else, if, un tā tālāk, un
tā tālāk, un tā tālāk.
Scratch valodā tas prasīja bloku ligzdošanu.
Jūs pievienojat if-else, un jums bija jāievieto kas cits iekš else un
tā tālāk, un tas kļuva ligzdots un sarežģīts.
Bet C valodā mums tas nav jādara.
Mēs faktiski varam vienkārši izveidot tādu ķēdi kā šī.
Atkal, kā jūs varētu iedomāties, visi šie zarojumi ir viens otru
izslēdzoši.
Jūs vienmēr varat iet tikai pa vienu no zarojumiem.
Ja tas ir patiess.
Pretējā gadījumā, ja tas ir patiess.
Pretējā gadījumā dariet tā.
Tātad visi četri šajā piemērā esošie zarojumi ir viens otru izslēdzoši
Tā ir if-else if-else ķēde.
Tomēr ir iespējams un dažreiz ir ļoti noderīgi izveidot savstarpēji
neizslēdzošu zarojumu ķēdi.
Šajā piemērā tikai trešais un ceturtais zarojums ir savstarpēji
izslēdzoši.
Varētu būt, ka jūs varētu izpildīt pirmo nosacījumu, jūs varētu
izpildīt otro nosacījumu, un jūs varētu izpildīt trešo nosacījumu —
tādā gadījumā jūs ietu pa pirmo zarojumu, tad jūs ietu pa otro
zarojumu, tad jūs ietu pa trešo zarojumu.
Vai varbūt jūs izpildāt pirmo nosacījumu un otro nosacījumu, bet
neizpildāt trešo nosacījumu.
Šajā gadījumā jūs ejat pa pirmo un otro zarojumu, un pēc tam pa
ceturto zarojumu. Iemesls tam ir tas, ka else saistīsies tikai ar
tuvāko if.
Tātad, lai gan šeit ir else, tas ne vienmēr rada visa savstarpēji
izslēdzošu ķēdi.
Tā ir tikai izteiksme ar Būla izteiksmi 3 — tā ir savstarpēji
izslēdzošā izteiksme ar else.
Tāpēc ir iespējams un dažreiz diezgan lietderīgi, kā jau teicu,
izveidot savstarpēji neizslēdzošu zarojumu ķēdi.
Apskatīsim cita veida nosacījumus, ko jūs iepriekš neesat redzējis
Scratch valodā.
Ir kaut kas, ko sauc par slēdža priekšrakstu.
Slēdža priekšraksts ir diezgan prasmīgs, jo tas ir nosacījuma
operators, kas ļauj jums precizēt atšķirīgus gadījumus, nevis
paļauties uz Būla izteiksmēm lēmumu pieņemšanā.
Piemēram, pieņemsim, ka man ir šī programma, un es lūdzu lietotāju
sniegt man ievadi.
Tāpēc es saku: int x = Get Int(), un, ja vēl neesat iepazinušies, get
int ir funkcija, kas ir iekļauta arī CS50 bibliotēkā, tāpēc, #include
CS50.H, jums būs piekļuve funkcijai Get Int() un visām tās
radiniecēm — GetFloat, GetString un tā tālāk.
Būtībā viena funkcija Get katram datu veidam, par kuru mēs jau
runājām.
Tātad Int x ir vienāds ar GetInt.
Būtībā tas, kas notiek, ir tas, ka esmu terminal vidē.
Es lūdzu lietotāju ievadīt ciparu.
Un šeit es pārslēdzu to, ko daru, atkarībā no tā, ko lietotājs
ierakstīja uzvednē.
Tātad, ja viņi ierakstīja ciparu viens, tad es izdrukāju ciparu viens.
Un tad es pārtraucu koda izpildi
Ja viņi ieraksta ciparu divi, es izdrukāju ciparu divi.
Ir svarīgi pārtraukt katru gadījumu, jo citādāk jūs izgāzīsieties.
Tātad, ja man tur nebūtu nekādu pārtraukumu, un lietotājs ierakstītu
ciparu viens, tad notiktu tas, ka tiktu izdrukāts cipars viens, divi,
trīs, atvainojiet.
Tā ir dīvaina uzvedība, vai ne?
Jūs varētu tā domāt.
Bet patiesībā ir daži gadījumi, kad tā varētu būt diezgan noderīga
lieta.
Tātad, šeit ir vēl viens slēdža priekšraksta piemērs, kurā es izlaižu
pārtraukumus.
Bet es to daru ar nolūku.
Tad kas šeit notiek?
Padomājiet mirkli.
Iespējams, jūs pat vēlēsieties apturēt video.
Kas notiek šeit, ja lietotājs ieraksta ciparu četri?
Tāpēc esmu lūdzis lietotājam ievadīt informāciju.
Un tie nodrošina vērtību 4.
Kas tiek izdrukāts, kad es to daru?
Iepriekšējā slaidrādē starp visiem gadījumiem bija pārtraukumi.
Un tāpēc tas vienkārši izdrukātu ciparu četri un pēc tam pārtrauktu.
Bet šajā gadījumā tā nebūs.
Notiks tas, ka jūs izgāzīsieties katrā gadījumā.
Tāpēc šajā gadījumā es esmu organizējis savus gadījumus tā, ka, ja
lietotājs ieraksta 4, es izdrukāšu četri, trīs, divi, viens, aiziet!
Un, ja viņi ierakstītu 5, es sāktu no pieciem un darītu to pašu.
Ja viņi ierakstītu 1, es darītu tikai vienu, aiziet!
Tad šajā gadījumā es gudri izmantoju slēdzi, jo man ir nodoms
izgāzties visos gadījumos.
Bet parasti jūs, iespējams, vēlēsieties uztaisīt pārtraukumu starp
tiem visiem, ja vien jums nav tāda situācija kā šī, kad jūs
izmantojat faktu, ka jūs izgāžaties bez pārtraukuma.
Tātad tas ir otrais no galvenajiem nosacījumu operatoru veidiem.
Pēdējais no tiem ir ?: Tātad man šeit ir divi C koda fragmenti.
Viens pa kreisi un viens pa labi.
Kreisajā pusē esošajam, iespējams, jums vajadzētu būt diezgan
pazīstamam.
Man ir Int x.
Un man, iespējams, vajadzēja lūgt lietotājam -- tam, iespējams,
vajadzētu būt Int x ir vienāds ar GetInt vai kaut kas tamlīdzīgs.
Un tad es pieņemu lēmumu.
Ja kāda Būla izteiksme ir patiesa, piešķiriet x vērtību 5.
Pretējā gadījumā piešķiriet x vērtību 6.
Tas kreisajā pusē, iespējams, ir diezgan pazīstams no mūsu diskusijas
par If Else tieši pirms brīža.
Vai jūs būtu pārsteigti uzzinot, ka labajā pusē esošā rindiņa dara
tieši to pašu?
Tātad to sauc par ?: vai dažreiz sauc par trīskāršo operatoru.
Un tas ir diezgan forši.
To parasti izmanto kā jauku triku.
Bet tas ļauj simulēt If Else ar ļoti maziem, patiešām triviāli īsiem
nosacītajiem zarojumiem.
Jūs parasti neizmantotu ?:, ja jums būtu sešas koda rindiņas starp
katru figūriekavu kopu.
Bet, ja jūs vienkārši pieņemat ātru lēmumu, ja gatavojaties izdarīt
vienu vai otru - un tas ir ļoti vienkārši šis varētu būt piemērs, kā
to izdarīt ar ?: trīskāršo operatoru.
Tātad Int x ir vienāds ar izteiksmi?
Aiz jautājuma zīmes stāv tas, kāda būs x vērtība, ja izteiksme ir
patiesa.
Pēc kola stāv tas, kāda būtu x vērtība, ja izteiksme būtu nepatiesa.
Tāpēc es jautāju sev, vai izteiciens ir patiess?
Ja tā ir, piešķiriet x vērtību 5.
Ja tā nav, piešķiriet x vērtību 6.
Atkal, kā jau teicu.
Tas parasti ir tikai jauks triks.
Un dažreiz, ja jums tas patiešām iepatiksies, jūs to darīsiet, jo
jūsu programmās tas izskatīsies forši.
Vispār es to jums tagad prezentēju, lai jums būtu zināms kas tas ir,
ja ieraudzīsiet to.
Bet noteikti ziniet, ka jums tas nav jāieraksta nevienā savā kodā.
Bet tas ir jāzina, jo jūs noteikti saskarsieties ar koda fragmentiem
šur un tur, kur tiek izmantota šī sintakse ?:, AKA trīskāršais
operators.
Tik īss kopsavilkums par to, kas ir nosacījumi, un kādas opcijas ir
pieejamas C valodā.
Jums ir if un if-else un if else if, utt.
Lai pieņemtu lēmumus, jūs varat izmantot Būla izteiksmes.
Ar slēdža priekšrakstiem jūs izmantojat atsevišķus gadījumus, lai
pieņemtu lēmumus.
Jūs konkrēti teiktu, ja tas ir viens, vai divi, vai trīs, es darīšu
šo , vai šo, vai šo
Un ?: var izmantot, lai aizstātu ļoti vienkāršus if-else zarojumus
vai if-else ķēdes, lai jūsu kods izskatītos greznāks.
Es esmu Dags Loids.
Un tas ir CS50.