1 00:00:05,140 --> 00:00:05,640 Labi. 2 00:00:05,640 --> 00:00:07,777 Tātad tagad parunāsim par kaut ko patiešām noderīgu 3 00:00:07,777 --> 00:00:09,914 programmēšanā —nosacījuma operatoriem. 4 00:00:09,914 --> 00:00:12,557 Tātad nosacījuma izteiksmes ļauj jūsu programmām pieņemt lēmumus un 5 00:00:12,557 --> 00:00:15,200 krustcelēs izvēlēties iet dažādus ceļus, tas ir kaut kas, uz ko es 6 00:00:15,200 --> 00:00:17,843 norādīju nedaudz agrāk, atkarībā no mainīgo vērtībām vai atkarībā no 7 00:00:17,843 --> 00:00:20,486 tā, ko lietotājs ievada programmētājā, komandrindā, vai ir uzvedne 8 00:00:20,486 --> 00:00:23,130 vai kas tamlīdzīgs. 9 00:00:23,130 --> 00:00:25,390 Programmā C ir daži dažādi veidi, kā izteikt nosacījuma izteiksmes, 10 00:00:25,390 --> 00:00:27,650 ko mēs dažkārt jūsu programmās arī sauksim par nosacītajiem 11 00:00:27,650 --> 00:00:29,911 zarojumiem.. 12 00:00:29,911 --> 00:00:32,664 Un daži no tiem jums šķitīs diezgan pazīstami no nulles, tāpēc mēs 13 00:00:32,664 --> 00:00:35,417 pat pavilksim tos blakus,lai jūs varētu izveidot šo analoģiju savā 14 00:00:35,417 --> 00:00:38,170 galvā. 15 00:00:38,170 --> 00:00:41,250 Tātad, if-- if ir diezgan vienkāršs operators. 16 00:00:41,250 --> 00:00:45,170 Ja jūs atceraties, no nulles labajā pusē jūsvarat aizpildīt šo 17 00:00:45,170 --> 00:00:49,090 sešstūri ar zilu izteiksmi, ja mouse down vai ja x ir mazāks par 10, 18 00:00:49,090 --> 00:00:53,010 vai tamlīdzīgi. 19 00:00:53,010 --> 00:00:57,075 Un tad, ja x bija mazāks par 10 vai ja , tiešām, bija mouse down, 20 00:00:57,075 --> 00:01:01,140 viss mīklas kods tiks izpildīts. 21 00:01:01,140 --> 00:01:03,720 Visas lietas, kas iederas tajā C formā. 22 00:01:03,720 --> 00:01:07,200 Līdzīgi, vai mums ir if pa kreisi tur. 23 00:01:07,200 --> 00:01:09,880 Ja Būla izteiksme, ko izmantoju tikai kā aizvietotāju vienai no 24 00:01:09,880 --> 00:01:12,560 iepriekš apspriestajām Būla izteiksmēm, atvēriet figūriekavas, 25 00:01:12,560 --> 00:01:15,240 aizvēriet figūriekavas 26 00:01:15,240 --> 00:01:19,655 Tāpēc iztēlojieties atvērtas figūriekavas un slēgtas figūriekavaskā 27 00:01:19,655 --> 00:01:24,070 analoģiju if bloka sviestmaižu efektam labajā pusē. 28 00:01:24,070 --> 00:01:28,970 Ja Būla izteiksme operatorā if ir patiesa, tad visas koda rindas 29 00:01:28,970 --> 00:01:33,870 starp figūriekavām tiks izpildītas secībā no augšas uz leju. 30 00:01:33,870 --> 00:01:37,436 Ja Būla izteiksme ir nepatiesa, tad mēs izlaidīsim visu, kas atrodas 31 00:01:37,436 --> 00:01:41,003 figūriekavās, jo mēs vēlamies iet pa to ceļa atzaru tikai tad, ja 32 00:01:41,003 --> 00:01:44,570 Būla izteiksme ir patiesa. 33 00:01:44,570 --> 00:01:48,540 Mēs varam spert vienu soli uz priekšu ar if else. 34 00:01:48,540 --> 00:01:51,210 Tātad šis Scratch bloks ir diezgan līdzīgs tam, ko tikko redzējām 35 00:01:51,210 --> 00:01:53,880 pirms brīža, izņemot to, ka atkarībā no tā, kas notiek, ir divi 36 00:01:53,880 --> 00:01:56,550 dažādi ceļi. 37 00:01:56,550 --> 00:02:00,665 Tātad, ja bija mouse down vai ja x bija mazāks par 10, mēs darīsim 38 00:02:00,665 --> 00:02:04,780 visu, kas atrodas pirmajās krustcelēs, pirmajā C. 39 00:02:00,420 --> 00:02:05,440 Pretējā gadījumā, ja ir mouse up vai x nav mazāks par 10, mēs visu 40 00:02:05,440 --> 00:02:10,460 darīsim otrajā kopā. 41 00:02:10,460 --> 00:02:15,010 Un tas ir līdzīgi tam, ko jūs šeit redzat C valodā 42 00:02:10,460 --> 00:02:17,910 Ja Būla izteiksme, tad veiciet darbības pirmajā figūriekavu kopā. 43 00:02:17,910 --> 00:02:20,550 Pretējā gadījumā, veiciet darbības otrajā figūriekavu kopā. 44 00:02:20,550 --> 00:02:22,065 Tātad, ja Būla izteiksme ir patiesa, tad mēs darīsim visu, kas ir 45 00:02:22,065 --> 00:02:23,580 pirmajā kopā. 46 00:02:23,580 --> 00:02:26,840 Ja Būla izteiksme ir nepatiesa, tas aktivizēs pretējo, un mēs darītu 47 00:02:26,840 --> 00:02:30,100 visu, kas norādīts otrajā figūriekavu kopā. 48 00:02:30,100 --> 00:02:34,190 Atkal - no augšas uz leju, visas rindas iekavās. 49 00:02:34,190 --> 00:02:38,130 C valodā ir iespējams izveidot if-else if-else ķēdi. 50 00:02:38,130 --> 00:02:40,425 Patiesībā jums var būt if-else if-else if-else, if, un tā tālāk, un 51 00:02:40,425 --> 00:02:42,720 tā tālāk, un tā tālāk. 52 00:02:42,720 --> 00:02:44,660 Scratch valodā tas prasīja bloku ligzdošanu. 53 00:02:44,660 --> 00:02:47,885 Jūs pievienojat if-else, un jums bija jāievieto kas cits iekš else un 54 00:02:47,885 --> 00:02:51,110 tā tālāk, un tas kļuva ligzdots un sarežģīts. 55 00:02:51,110 --> 00:02:52,450 Bet C valodā mums tas nav jādara. 56 00:02:52,450 --> 00:02:55,300 Mēs faktiski varam vienkārši izveidot tādu ķēdi kā šī. 57 00:02:55,300 --> 00:02:56,825 Atkal, kā jūs varētu iedomāties, visi šie zarojumi ir viens otru 58 00:02:56,825 --> 00:02:58,350 izslēdzoši. 59 00:02:58,350 --> 00:03:00,750 Jūs vienmēr varat iet tikai pa vienu no zarojumiem. 60 00:03:00,750 --> 00:03:02,270 Ja tas ir patiess. 61 00:03:02,270 --> 00:03:05,700 Pretējā gadījumā, ja tas ir patiess. 62 00:03:05,700 --> 00:03:07,120 Pretējā gadījumā dariet tā. 63 00:03:07,120 --> 00:03:11,010 Tātad visi četri šajā piemērā esošie zarojumi ir viens otru izslēdzoši 64 00:03:11,010 --> 00:03:14,900 Tā ir if-else if-else ķēde. 65 00:03:14,900 --> 00:03:17,925 Tomēr ir iespējams un dažreiz ir ļoti noderīgi izveidot savstarpēji 66 00:03:17,925 --> 00:03:20,950 neizslēdzošu zarojumu ķēdi. 67 00:03:20,950 --> 00:03:22,775 Šajā piemērā tikai trešais un ceturtais zarojums ir savstarpēji 68 00:03:22,775 --> 00:03:24,600 izslēdzoši. 69 00:03:24,600 --> 00:03:27,700 Varētu būt, ka jūs varētu izpildīt pirmo nosacījumu, jūs varētu 70 00:03:27,700 --> 00:03:30,800 izpildīt otro nosacījumu, un jūs varētu izpildīt trešo nosacījumu — 71 00:03:30,800 --> 00:03:33,900 tādā gadījumā jūs ietu pa pirmo zarojumu, tad jūs ietu pa otro 72 00:03:33,900 --> 00:03:37,000 zarojumu, tad jūs ietu pa trešo zarojumu. 73 00:03:37,000 --> 00:03:39,885 Vai varbūt jūs izpildāt pirmo nosacījumu un otro nosacījumu, bet 74 00:03:39,885 --> 00:03:42,770 neizpildāt trešo nosacījumu. 75 00:03:42,770 --> 00:03:45,644 Šajā gadījumā jūs ejat pa pirmo un otro zarojumu, un pēc tam pa 76 00:03:45,644 --> 00:03:48,518 ceturto zarojumu. Iemesls tam ir tas, ka else saistīsies tikai ar 77 00:03:48,518 --> 00:03:51,392 tuvāko if. 78 00:03:51,392 --> 00:03:53,941 Tātad, lai gan šeit ir else, tas ne vienmēr rada visa savstarpēji 79 00:03:53,941 --> 00:03:56,490 izslēdzošu ķēdi. 80 00:03:56,490 --> 00:04:00,765 Tā ir tikai izteiksme ar Būla izteiksmi 3 — tā ir savstarpēji 81 00:04:00,765 --> 00:04:05,040 izslēdzošā izteiksme ar else. 82 00:04:05,040 --> 00:04:08,406 Tāpēc ir iespējams un dažreiz diezgan lietderīgi, kā jau teicu, 83 00:04:08,406 --> 00:04:11,772 izveidot savstarpēji neizslēdzošu zarojumu ķēdi. 84 00:04:11,772 --> 00:04:14,582 Apskatīsim cita veida nosacījumus, ko jūs iepriekš neesat redzējis 85 00:04:14,582 --> 00:04:17,392 Scratch valodā. 86 00:04:17,392 --> 00:04:19,369 Ir kaut kas, ko sauc par slēdža priekšrakstu. 87 00:04:19,369 --> 00:04:22,554 Slēdža priekšraksts ir diezgan prasmīgs, jo tas ir nosacījuma 88 00:04:22,554 --> 00:04:25,740 operators, kas ļauj jums precizēt atšķirīgus gadījumus, nevis 89 00:04:25,740 --> 00:04:28,926 paļauties uz Būla izteiksmēm lēmumu pieņemšanā. 90 00:04:28,926 --> 00:04:31,518 Piemēram, pieņemsim, ka man ir šī programma, un es lūdzu lietotāju 91 00:04:31,518 --> 00:04:34,110 sniegt man ievadi. 92 00:04:34,110 --> 00:04:37,292 Tāpēc es saku: int x = Get Int(), un, ja vēl neesat iepazinušies, get 93 00:04:37,292 --> 00:04:40,475 int ir funkcija, kas ir iekļauta arī CS50 bibliotēkā, tāpēc, #include 94 00:04:40,475 --> 00:04:43,657 CS50.H, jums būs piekļuve funkcijai Get Int() un visām tās 95 00:04:43,657 --> 00:04:46,840 radiniecēm — GetFloat, GetString un tā tālāk. 96 00:04:46,840 --> 00:04:49,715 Būtībā viena funkcija Get katram datu veidam, par kuru mēs jau 97 00:04:49,715 --> 00:04:52,590 runājām. 98 00:04:52,590 --> 00:04:53,970 Tātad Int x ir vienāds ar GetInt. 99 00:04:53,970 --> 00:04:56,390 Būtībā tas, kas notiek, ir tas, ka esmu terminal vidē. 100 00:04:56,390 --> 00:04:58,790 Es lūdzu lietotāju ievadīt ciparu. 101 00:04:58,790 --> 00:05:01,925 Un šeit es pārslēdzu to, ko daru, atkarībā no tā, ko lietotājs 102 00:05:01,925 --> 00:05:05,060 ierakstīja uzvednē. 103 00:05:05,060 --> 00:05:09,147 Tātad, ja viņi ierakstīja ciparu viens, tad es izdrukāju ciparu viens. 104 00:05:09,147 --> 00:05:16,690 Un tad es pārtraucu koda izpildi 105 00:05:12,590 --> 00:05:15,510 Ja viņi ieraksta ciparu divi, es izdrukāju ciparu divi. 106 00:05:16,690 --> 00:05:20,890 Ir svarīgi pārtraukt katru gadījumu, jo citādāk jūs izgāzīsieties. 107 00:05:20,890 --> 00:05:24,386 Tātad, ja man tur nebūtu nekādu pārtraukumu, un lietotājs ierakstītu 108 00:05:24,386 --> 00:05:27,883 ciparu viens, tad notiktu tas, ka tiktu izdrukāts cipars viens, divi, 109 00:05:27,883 --> 00:05:31,380 trīs, atvainojiet. 110 00:05:31,380 --> 00:05:33,099 Tā ir dīvaina uzvedība, vai ne? 111 00:05:33,099 --> 00:05:33,890 Jūs varētu tā domāt. 112 00:05:33,890 --> 00:05:35,185 Bet patiesībā ir daži gadījumi, kad tā varētu būt diezgan noderīga 113 00:05:35,185 --> 00:05:36,480 lieta. 114 00:05:36,480 --> 00:05:38,105 Tātad, šeit ir vēl viens slēdža priekšraksta piemērs, kurā es izlaižu 115 00:05:38,105 --> 00:05:39,730 pārtraukumus. 116 00:05:39,730 --> 00:05:42,030 Bet es to daru ar nolūku. 117 00:05:42,030 --> 00:05:43,030 Tad kas šeit notiek? 118 00:05:43,030 --> 00:05:43,821 Padomājiet mirkli. 119 00:05:43,821 --> 00:05:45,960 Iespējams, jūs pat vēlēsieties apturēt video. 120 00:05:45,960 --> 00:05:48,230 Kas notiek šeit, ja lietotājs ieraksta ciparu četri? 121 00:05:51,190 --> 00:05:53,860 Tāpēc esmu lūdzis lietotājam ievadīt informāciju. 122 00:05:53,860 --> 00:05:56,560 Un tie nodrošina vērtību 4. 123 00:05:56,560 --> 00:05:59,545 Kas tiek izdrukāts, kad es to daru? 124 00:05:59,545 --> 00:06:02,170 Iepriekšējā slaidrādē starp visiem gadījumiem bija pārtraukumi. 125 00:06:02,170 --> 00:06:04,750 Un tāpēc tas vienkārši izdrukātu ciparu četri un pēc tam pārtrauktu. 126 00:06:04,750 --> 00:06:06,610 Bet šajā gadījumā tā nebūs. 127 00:06:06,610 --> 00:06:10,700 Notiks tas, ka jūs izgāzīsieties katrā gadījumā. 128 00:06:10,700 --> 00:06:15,385 Tāpēc šajā gadījumā es esmu organizējis savus gadījumus tā, ka, ja 129 00:06:15,385 --> 00:06:20,070 lietotājs ieraksta 4, es izdrukāšu četri, trīs, divi, viens, aiziet! 130 00:06:20,070 --> 00:06:22,780 Un, ja viņi ierakstītu 5, es sāktu no pieciem un darītu to pašu. 131 00:06:22,780 --> 00:06:26,410 Ja viņi ierakstītu 1, es darītu tikai vienu, aiziet! 132 00:06:26,410 --> 00:06:28,607 Tad šajā gadījumā es gudri izmantoju slēdzi, jo man ir nodoms 133 00:06:28,607 --> 00:06:30,804 izgāzties visos gadījumos. 134 00:06:30,804 --> 00:06:33,896 Bet parasti jūs, iespējams, vēlēsieties uztaisīt pārtraukumu starp 135 00:06:33,896 --> 00:06:36,988 tiem visiem, ja vien jums nav tāda situācija kā šī, kad jūs 136 00:06:36,988 --> 00:06:40,081 izmantojat faktu, ka jūs izgāžaties bez pārtraukuma. 137 00:06:40,081 --> 00:06:42,830 Tātad tas ir otrais no galvenajiem nosacījumu operatoru veidiem. 138 00:06:42,830 --> 00:06:47,139 Pēdējais no tiem ir ?: Tātad man šeit ir divi C koda fragmenti. 139 00:06:47,139 --> 00:06:48,680 Viens pa kreisi un viens pa labi. 140 00:06:48,680 --> 00:06:50,505 Kreisajā pusē esošajam, iespējams, jums vajadzētu būt diezgan 141 00:06:50,505 --> 00:06:52,330 pazīstamam. 142 00:06:52,330 --> 00:06:55,110 Man ir Int x. 143 00:06:55,110 --> 00:06:57,680 Un man, iespējams, vajadzēja lūgt lietotājam -- tam, iespējams, 144 00:06:57,680 --> 00:07:00,250 vajadzētu būt Int x ir vienāds ar GetInt vai kaut kas tamlīdzīgs. 145 00:07:03,030 --> 00:07:05,240 Un tad es pieņemu lēmumu. 146 00:07:05,240 --> 00:07:11,700 Ja kāda Būla izteiksme ir patiesa, piešķiriet x vērtību 5. 147 00:07:11,700 --> 00:07:13,590 Pretējā gadījumā piešķiriet x vērtību 6. 148 00:07:13,590 --> 00:07:15,875 Tas kreisajā pusē, iespējams, ir diezgan pazīstams no mūsu diskusijas 149 00:07:15,875 --> 00:07:18,160 par If Else tieši pirms brīža. 150 00:07:18,160 --> 00:07:20,235 Vai jūs būtu pārsteigti uzzinot, ka labajā pusē esošā rindiņa dara 151 00:07:20,235 --> 00:07:22,310 tieši to pašu? 152 00:07:22,310 --> 00:07:26,140 Tātad to sauc par ?: vai dažreiz sauc par trīskāršo operatoru. 153 00:07:26,140 --> 00:07:27,450 Un tas ir diezgan forši. 154 00:07:27,450 --> 00:07:29,110 To parasti izmanto kā jauku triku. 155 00:07:29,110 --> 00:07:33,360 Bet tas ļauj simulēt If Else ar ļoti maziem, patiešām triviāli īsiem 156 00:07:33,360 --> 00:07:37,610 nosacītajiem zarojumiem. 157 00:07:37,610 --> 00:07:40,089 Jūs parasti neizmantotu ?:, ja jums būtu sešas koda rindiņas starp 158 00:07:40,089 --> 00:07:42,569 katru figūriekavu kopu. 159 00:07:42,569 --> 00:07:45,792 Bet, ja jūs vienkārši pieņemat ātru lēmumu, ja gatavojaties izdarīt 160 00:07:45,792 --> 00:07:49,016 vienu vai otru - un tas ir ļoti vienkārši šis varētu būt piemērs, kā 161 00:07:49,016 --> 00:07:52,240 to izdarīt ar ?: trīskāršo operatoru. 162 00:07:52,240 --> 00:07:56,940 Tātad Int x ir vienāds ar izteiksmi? 163 00:07:56,940 --> 00:07:59,815 Aiz jautājuma zīmes stāv tas, kāda būs x vērtība, ja izteiksme ir 164 00:07:59,815 --> 00:08:02,690 patiesa. 165 00:08:02,690 --> 00:08:07,990 Pēc kola stāv tas, kāda būtu x vērtība, ja izteiksme būtu nepatiesa. 166 00:08:07,990 --> 00:08:11,510 Tāpēc es jautāju sev, vai izteiciens ir patiess? 167 00:08:11,510 --> 00:08:13,870 Ja tā ir, piešķiriet x vērtību 5. 168 00:08:13,870 --> 00:08:16,619 Ja tā nav, piešķiriet x vērtību 6. 169 00:08:16,619 --> 00:08:17,410 Atkal, kā jau teicu. 170 00:08:17,410 --> 00:08:18,670 Tas parasti ir tikai jauks triks. 171 00:08:18,670 --> 00:08:20,745 Un dažreiz, ja jums tas patiešām iepatiksies, jūs to darīsiet, jo 172 00:08:20,745 --> 00:08:22,820 jūsu programmās tas izskatīsies forši. 173 00:08:22,820 --> 00:08:24,905 Vispār es to jums tagad prezentēju, lai jums būtu zināms kas tas ir, 174 00:08:24,905 --> 00:08:26,990 ja ieraudzīsiet to. 175 00:08:26,990 --> 00:08:30,080 Bet noteikti ziniet, ka jums tas nav jāieraksta nevienā savā kodā. 176 00:08:30,080 --> 00:08:33,093 Bet tas ir jāzina, jo jūs noteikti saskarsieties ar koda fragmentiem 177 00:08:33,093 --> 00:08:36,106 šur un tur, kur tiek izmantota šī sintakse ?:, AKA trīskāršais 178 00:08:36,106 --> 00:08:39,120 operators. 179 00:08:39,120 --> 00:08:41,665 Tik īss kopsavilkums par to, kas ir nosacījumi, un kādas opcijas ir 180 00:08:41,665 --> 00:08:44,210 pieejamas C valodā. 181 00:08:40,960 --> 00:08:46,860 Jums ir if un if-else un if else if, utt. 182 00:08:46,860 --> 00:08:50,880 Lai pieņemtu lēmumus, jūs varat izmantot Būla izteiksmes. 183 00:08:50,880 --> 00:08:52,300 Ar slēdža priekšrakstiem jūs izmantojat atsevišķus gadījumus, lai 184 00:08:52,300 --> 00:08:53,720 pieņemtu lēmumus. 185 00:08:53,720 --> 00:08:57,295 Jūs konkrēti teiktu, ja tas ir viens, vai divi, vai trīs, es darīšu 186 00:08:57,295 --> 00:09:00,870 šo , vai šo, vai šo 187 00:09:00,870 --> 00:09:04,680 Un ?: var izmantot, lai aizstātu ļoti vienkāršus if-else zarojumus 188 00:09:04,680 --> 00:09:08,490 vai if-else ķēdes, lai jūsu kods izskatītos greznāks. 189 00:09:08,490 --> 00:09:09,250 Es esmu Dags Loids. 190 00:09:09,250 --> 00:09:11,410 Un tas ir CS50.