1 00:00:00,000 --> 00:00:05,140 2 00:00:05,140 --> 00:00:05,640 Prima. 3 00:00:05,640 --> 00:00:08,330 Dus nu laten we praten over iets echt nuttig in programming-- 4 00:00:08,330 --> 00:00:09,914 voorwaardelijke verklaringen. 5 00:00:09,914 --> 00:00:11,830 Zo voorwaardelijke uitdrukkingen laat je programma's 6 00:00:11,830 --> 00:00:14,538 om beslissingen te nemen en verschillende vorken in de weg, wat 7 00:00:14,538 --> 00:00:17,670 Ik zinspeelde iets eerder, Afhankelijk van de waarden van variabelen 8 00:00:17,670 --> 00:00:20,990 of op basis van wat de gebruiker inputs de programmeur, op de opdrachtregel, 9 00:00:20,990 --> 00:00:23,130 of als u een prompt of zoiets. 10 00:00:23,130 --> 00:00:26,690 C heeft een paar verschillende manieren uitdrukken voorwaardelijke uitdrukkingen, die 11 00:00:26,690 --> 00:00:29,911 we soms ook zullen noemen conditionele vestiging in uw programma's. 12 00:00:29,911 --> 00:00:32,910 En sommige van deze gaan kijken redelijk bekend om u vanuit het niets, 13 00:00:32,910 --> 00:00:35,190 dus we zullen ze nog te trekken naast elkaar, net 14 00:00:35,190 --> 00:00:38,170 U kunt die analogie in je hoofd maken. 15 00:00:38,170 --> 00:00:41,250 >> Dus, if-- als een vrij eenvoudige voorwaardelijk. 16 00:00:41,250 --> 00:00:43,560 Misschien herinner je je uit kras op de hier 17 00:00:43,560 --> 00:00:50,000 je zou kunnen vullen in die zeshoek met een blauwe uitdrukking als muis naar beneden 18 00:00:50,000 --> 00:00:53,010 of als x kleiner is dan 10, of zoiets. 19 00:00:53,010 --> 00:00:57,390 En dan, als x minder dan 10, of als de muis was in feite neer, 20 00:00:57,390 --> 00:01:01,140 alle van de code in van de puzzelstukje zou voeren. 21 00:01:01,140 --> 00:01:03,720 Al de dingen die passen binnen dat C-vorm. 22 00:01:03,720 --> 00:01:07,200 >> Ook hebben we Als aan de linkerkant. 23 00:01:07,200 --> 00:01:09,210 Als Booleaanse uitdrukking, die ik alleen met behulp 24 00:01:09,210 --> 00:01:13,010 als vervanging voor een van de Boolean uitdrukkingen we eerder besproken, 25 00:01:13,010 --> 00:01:15,240 geopend accolade, dicht accolade. 26 00:01:15,240 --> 00:01:17,720 Dus denk open krullend brace en gesloten accolade 27 00:01:17,720 --> 00:01:22,720 als een soort analoog aan de sandwich effect van de-blok rechts 28 00:01:22,720 --> 00:01:24,070 vanaf nul. 29 00:01:24,070 --> 00:01:28,680 >> Als de Booleaanse uitdrukking in de if waar is, 30 00:01:28,680 --> 00:01:30,900 dan zijn alle regels code tussen de accolades 31 00:01:30,900 --> 00:01:33,870 zal uitvoeren met het oog van boven naar beneden. 32 00:01:33,870 --> 00:01:35,700 Als de Booleaanse uitdrukking vals is, zullen we 33 00:01:35,700 --> 00:01:38,610 overslaan alles daartussenin de accolades, omdat alleen wij 34 00:01:38,610 --> 00:01:44,570 wil naar beneden te gaan, dat splitsing in de weg Als de Booleaanse uitdrukking waar is. 35 00:01:44,570 --> 00:01:48,540 >> We kunnen nog een stap te nemen verder met als anders. 36 00:01:48,540 --> 00:01:50,820 Dus dit Scratch blok redelijk vergelijkbaar met degene 37 00:01:50,820 --> 00:01:55,884 we zagen slechts een seconde geleden, behalve duurt het twee verschillende wegen gebaseerd 38 00:01:55,884 --> 00:01:56,550 over wat er gebeurt. 39 00:01:56,550 --> 00:02:00,420 Als de muis daalde, of indien x minder dan 10, 40 00:02:00,420 --> 00:02:04,780 we zullen alles wat daar tussenin doen die eerste vork, die eerste C., 41 00:02:04,780 --> 00:02:08,430 >> Anders, als de muis up of x is ten minste 10, 42 00:02:08,430 --> 00:02:10,460 we zullen alles in de tweede set te doen. 43 00:02:10,460 --> 00:02:15,010 En dat is analoog aan wat je ziet hier voor C. Als Booleaanse uitdrukking, 44 00:02:15,010 --> 00:02:17,910 doen het spul tussen de eerste set van accolades. 45 00:02:17,910 --> 00:02:20,550 Anders, doe het spul tussen de tweede set van accolades. 46 00:02:20,550 --> 00:02:22,080 Als de Booleaanse expressie is waar, we zullen 47 00:02:22,080 --> 00:02:23,580 doen wat is tussen de eerste set. 48 00:02:23,580 --> 00:02:27,480 Als de Booleaanse expressie vals, dat zou anders leiden, 49 00:02:27,480 --> 00:02:30,100 en we willen alles wat we doen in de tweede set accolades. 50 00:02:30,100 --> 00:02:34,190 Ook boven naar beneden, alle lijnen tussen de haakjes. 51 00:02:34,190 --> 00:02:38,130 >> In C is het mogelijk te maken een if-else if-else keten. 52 00:02:38,130 --> 00:02:42,000 In feite kun je hebben als-else if-else if-else, zo, en zo voort en zo voort en zo 53 00:02:42,000 --> 00:02:42,720 op. 54 00:02:42,720 --> 00:02:44,660 In Scratch, dit vereist nesting blokken. 55 00:02:44,660 --> 00:02:48,280 U voegt een if-else, en je moest zet nog één binnen de ander, 56 00:02:48,280 --> 00:02:51,110 en ga zo maar door, en het kind kreeg geneste en ingewikkeld. 57 00:02:51,110 --> 00:02:52,450 Maar C, we hebben niet om dat te doen. 58 00:02:52,450 --> 00:02:55,300 We kunnen eigenlijk alleen maar hebben het zijn een keten als deze. 59 00:02:55,300 --> 00:02:58,350 Nogmaals, zoals je zou verwachten, allemaal deze takken elkaar uitsluiten. 60 00:02:58,350 --> 00:03:00,750 Je kunt alleen maar gaan van een van de tak. 61 00:03:00,750 --> 00:03:02,270 Als dit waar is. 62 00:03:02,270 --> 00:03:03,930 Anders, als dit waar is. 63 00:03:03,930 --> 00:03:05,700 Anders, als dit waar is. 64 00:03:05,700 --> 00:03:07,120 Anders doen. 65 00:03:07,120 --> 00:03:11,010 Dus alle vier de takken in deze Zo sluiten elkaar uit. 66 00:03:11,010 --> 00:03:14,900 Het is een if-else if-else keten. 67 00:03:14,900 --> 00:03:17,580 >> Het is wel mogelijk, en soms zeer nuttig, 68 00:03:17,580 --> 00:03:20,950 een keten van maken niet elkaar uitsluitende takken. 69 00:03:20,950 --> 00:03:24,600 In dit voorbeeld wordt alleen de derde en vierde takken elkaar uit. 70 00:03:24,600 --> 00:03:27,450 Het kan zijn dat je kon voldoen aan de eerste voorwaarde, 71 00:03:27,450 --> 00:03:29,396 en je kon voldoen de tweede voorwaarde, 72 00:03:29,396 --> 00:03:31,770 en je kon voldoen aan de derde Staat- in welk geval 73 00:03:31,770 --> 00:03:35,270 je zou gaan op de eerste vestiging, dan ga je naar beneden een tweede tak, 74 00:03:35,270 --> 00:03:37,000 dan zou je gaan op de derde tak. 75 00:03:37,000 --> 00:03:40,450 Of misschien aan de eerste conditie, en de tweede voorwaarde, 76 00:03:40,450 --> 00:03:42,770 maar je hoeft niet te voldoen de derde voorwaarde. 77 00:03:42,770 --> 00:03:46,230 In dit geval ga je naar beneden de eerste tak en de tweede tak, 78 00:03:46,230 --> 00:03:48,040 en dan is de vierde tak, 79 00:03:48,040 --> 00:03:51,392 >> De reden hiervoor is dat anders alleen binden aan de dichtstbijzijnde indien. 80 00:03:51,392 --> 00:03:53,100 Dus zelfs al is er een anders hier, dat 81 00:03:53,100 --> 00:03:56,490 niet noodzakelijk maken wederzijds exclusieve keten van alles. 82 00:03:56,490 --> 00:04:00,890 Het is slechts de uitdrukking daar met Boolean 83 00:04:00,890 --> 00:04:05,040 uitdrukking 3-- dat is de wederzijds exclusief met het anders. 84 00:04:05,040 --> 00:04:07,580 Zo is het mogelijk, en soms heel nuttig, 85 00:04:07,580 --> 00:04:11,772 zoals ik al zei, een keten van maken sluiten elkaar niet uit takken. 86 00:04:11,772 --> 00:04:14,230 Laten we eens een kijkje nemen op een ander soort voorwaardelijke, die 87 00:04:14,230 --> 00:04:17,392 je nog niet eerder gezien in de Scratch. 88 00:04:17,392 --> 00:04:19,369 Er is iets genaamd de instructie switch. 89 00:04:19,369 --> 00:04:21,410 Het switch statement is soort netjes omdat het 90 00:04:21,410 --> 00:04:25,930 een voorwaardelijke verklaring die het mogelijk maakt u verschillende gevallen te specificeren, 91 00:04:25,930 --> 00:04:28,926 in plaats van te vertrouwen op Booleaanse uitdrukkingen om beslissingen te nemen voor je. 92 00:04:28,926 --> 00:04:31,050 Dus bijvoorbeeld, laten we zeggen dat ik dit programma, 93 00:04:31,050 --> 00:04:34,110 en ik vraag de gebruiker om input te leveren voor mij. 94 00:04:34,110 --> 00:04:37,170 Dus ik zeg, int x = Get Int (), en als je nog niet bekend, 95 00:04:37,170 --> 00:04:40,190 krijgen int is een functie die is Ook opgenomen in de CS50 bibliotheek 96 00:04:40,190 --> 00:04:44,610 dus als je #include CS50.H je hebt toegang te krijgen Int () en al zijn 97 00:04:44,610 --> 00:04:46,840 cousins-- GetFloat, GetString, enzovoort. 98 00:04:46,840 --> 00:04:52,590 Eigenlijk een te krijgen voor elke functie data type dat we al hebben besproken. 99 00:04:52,590 --> 00:04:53,970 >> Dus Int x gelijk getint. 100 00:04:53,970 --> 00:04:56,390 Eigenlijk wat er gebeurt is dat ik ben op de terminal. 101 00:04:56,390 --> 00:04:58,790 Ik ben de gebruiker vragen om te typen in een getal. 102 00:04:58,790 --> 00:05:02,300 >> En hier ben ik het inschakelen wat ik doe, afhankelijk 103 00:05:02,300 --> 00:05:05,060 op wat de gebruiker getypt op de prompt. 104 00:05:05,060 --> 00:05:09,147 Dus als ze getypt een, print ik één. 105 00:05:09,147 --> 00:05:09,855 En dan breek ik. 106 00:05:09,855 --> 00:05:12,590 107 00:05:12,590 --> 00:05:15,510 Als ze twee typen, print ik twee. 108 00:05:15,510 --> 00:05:16,690 En dan breek ik. 109 00:05:16,690 --> 00:05:19,060 Het is belangrijk om verbreken tussen telkens 110 00:05:19,060 --> 00:05:20,890 want anders zul je vallen door. 111 00:05:20,890 --> 00:05:23,380 Dus als ik had er geen pauzes daar, en de gebruiker 112 00:05:23,380 --> 00:05:31,380 getypte een, wat er zou gebeuren is dat zou afdrukken één, twee, drie, sorry. 113 00:05:31,380 --> 00:05:33,099 Dat is een soort van vreemd gedrag, toch? 114 00:05:33,099 --> 00:05:33,890 Je zou zo denken. 115 00:05:33,890 --> 00:05:36,480 Er zijn eigenlijk een aantal gevallen waarin dit zou een vrij nuttig ding. 116 00:05:36,480 --> 00:05:39,730 Dus hier is een ander voorbeeld van een schakelaar statement waar ik weglaten de pauzes. 117 00:05:39,730 --> 00:05:42,030 Maar ik doe het op doel. 118 00:05:42,030 --> 00:05:43,030 >> Dus wat gebeurt er hier? 119 00:05:43,030 --> 00:05:43,821 Denk voor een tweede. 120 00:05:43,821 --> 00:05:45,960 U kunt zelfs om de video te pauzeren. 121 00:05:45,960 --> 00:05:48,230 >> Wat gebeurt hier als de gebruiker vier types? 122 00:05:48,230 --> 00:05:51,190 123 00:05:51,190 --> 00:05:53,860 Dus ik heb de gebruiker om input gevraagd. 124 00:05:53,860 --> 00:05:56,560 En ze bieden de waarde 4. 125 00:05:56,560 --> 00:05:59,545 Wat wordt er afgedrukt als ik dat doen? 126 00:05:59,545 --> 00:06:02,170 Op de vorige dia, waren er pauzes tussen alle gevallen. 127 00:06:02,170 --> 00:06:04,750 En dus het zou net afdrukken vier en dan stoppen. 128 00:06:04,750 --> 00:06:06,610 Maar in dit geval niet. 129 00:06:06,610 --> 00:06:10,700 Wat er zal gebeuren is dat je zal door elk geval vallen. 130 00:06:10,700 --> 00:06:14,890 >> Dus in dit geval heb ik mijn gevallen georganiseerd zodanig dat indien de gebruiker typt 4, 131 00:06:14,890 --> 00:06:20,070 Ik zal afdrukken vier, drie, twee, een, ontploffing af. 132 00:06:20,070 --> 00:06:22,780 En als ze getypt 5, zou ik beginnen op vijf en hetzelfde doen. 133 00:06:22,780 --> 00:06:26,410 Als ze getypt 1, zou ik gewoon doen een, ontploffing weg. 134 00:06:26,410 --> 00:06:28,715 >> Dus in dit geval, ik gebruik een schakelaar soort slim dus 135 00:06:28,715 --> 00:06:30,804 dat ik niet van plan om te vallen in alle gevallen. 136 00:06:30,804 --> 00:06:33,720 Maar over het algemeen ben je waarschijnlijk gaat willen breken tussen hen allen, 137 00:06:33,720 --> 00:06:36,090 tenzij je een situatie als dit een waar je bent 138 00:06:36,090 --> 00:06:40,081 soort gebruik te maken van het feit dat je zult vallen door de gevallen zonder een pauze. 139 00:06:40,081 --> 00:06:42,830 Dus dat is de tweede van de grote soorten voorwaardelijke verklaringen. 140 00:06:42,830 --> 00:06:47,139 Waarvan de laatste is:? Dus ik twee fragmenten van C-code hier. 141 00:06:47,139 --> 00:06:48,680 Één aan de linker- en één aan de rechterkant. 142 00:06:48,680 --> 00:06:52,330 De ene aan de linkerkant moet waarschijnlijk erg bekend voor. 143 00:06:52,330 --> 00:06:55,110 >> Ik heb Int x. 144 00:06:55,110 --> 00:06:57,167 En ik moet waarschijnlijk de gebruiker gevraagd 145 00:06:57,167 --> 00:07:00,250 voor-- dit moet waarschijnlijk Int x zijn gelijk getint, of iets dergelijks. 146 00:07:00,250 --> 00:07:03,030 147 00:07:03,030 --> 00:07:05,240 En dan ben ik het maken van een beslissing. 148 00:07:05,240 --> 00:07:11,700 Als sommige Booleaanse expressie waar, wijs x de waarde 5. 149 00:07:11,700 --> 00:07:13,590 Anders toewijzen x de waarde 6. 150 00:07:13,590 --> 00:07:16,548 >> Dat aan de linkerzijde moet waarschijnlijk redelijk bekend uit onze discussie 151 00:07:16,548 --> 00:07:18,160 Als Else van zojuist. 152 00:07:18,160 --> 00:07:20,535 Zou je verbaasd zijn om te weten dat de lijn op de rechter 153 00:07:20,535 --> 00:07:22,310 doet precies hetzelfde? 154 00:07:22,310 --> 00:07:26,140 >> Dus dit heet:? Of soms genaamd de ternaire operator. 155 00:07:26,140 --> 00:07:27,450 En het is vrij cool. 156 00:07:27,450 --> 00:07:29,110 Het wordt meestal gebruikt als een leuke truc. 157 00:07:29,110 --> 00:07:35,777 >> Maar hoe staat het u te doen is om simuleren van een If Else met echt klein, 158 00:07:35,777 --> 00:07:37,610 echt triviaal kort voorwaardelijke takken. 159 00:07:37,610 --> 00:07:41,470 Je zou over het algemeen niet te gebruiken:? Als u had zes regels code tussen elke set 160 00:07:41,470 --> 00:07:42,569 van accolades. 161 00:07:42,569 --> 00:07:44,360 Maar als je gewoon het maken van een snelle beslissing, 162 00:07:44,360 --> 00:07:47,520 als je gaat om een ​​ding te doen of het ander en het is heel simpel, 163 00:07:47,520 --> 00:07:52,240 Dit zou een voorbeeld van hoe te zijn doe het met:? de ternaire operator. 164 00:07:52,240 --> 00:07:56,940 Dus Int x gelijk is aan expressie? 165 00:07:56,940 --> 00:07:59,470 Het ding na de vraag mark is wat x de waarde van 166 00:07:59,470 --> 00:08:02,690 zal zijn als de expressie waar is. 167 00:08:02,690 --> 00:08:05,330 >> Het ding na de colon is wat x de waarde van 168 00:08:05,330 --> 00:08:07,990 zijn als de expressie vals was. 169 00:08:07,990 --> 00:08:11,510 Dus ik vraag me af, is de uitdrukking waar? 170 00:08:11,510 --> 00:08:13,870 Als het toewijzen x de waarde 5. 171 00:08:13,870 --> 00:08:16,619 Als het niet, toewijzen x de waarde 6. 172 00:08:16,619 --> 00:08:17,410 Nogmaals, zoals ik al zei. 173 00:08:17,410 --> 00:08:18,670 Dit is meestal gewoon een leuke truc. 174 00:08:18,670 --> 00:08:20,430 En soms als je geworden echt comfortabel met het, 175 00:08:20,430 --> 00:08:22,820 zult u dit doen omdat het eruit ziet wel cool in uw programma's. 176 00:08:22,820 --> 00:08:25,710 Over het algemeen ben ik presenteren aan u nu zo u bekend bent met het 177 00:08:25,710 --> 00:08:26,990 als je het ziet. 178 00:08:26,990 --> 00:08:30,080 Maar zeker weet dat je niet hebt op te schrijven in een van uw code. 179 00:08:30,080 --> 00:08:33,246 Maar het is iets om vertrouwd te raken met zijn, want je zult zeker tegenkomen 180 00:08:33,246 --> 00:08:36,130 stukjes code hier en daar waar dit:? syntax, 181 00:08:36,130 --> 00:08:39,120 AKA de ternaire operator, wordt gebruikt. 182 00:08:39,120 --> 00:08:40,960 >> Dus snelle samenvatting op wat conditionals zijn, 183 00:08:40,960 --> 00:08:44,210 en wat de opties zijn beschikbaar om u in C. Je hebt Indien en if-else, 184 00:08:44,210 --> 00:08:46,860 en indien anders als, et cetera. 185 00:08:46,860 --> 00:08:50,880 U kunt Booleaanse uitdrukkingen gebruiken voor degenen om beslissingen te nemen. 186 00:08:50,880 --> 00:08:53,720 >> Met schakelaar verklaringen die u gebruikt discrete gevallen om beslissingen te nemen. 187 00:08:53,720 --> 00:08:57,540 Je zou specifiek zeggen, als het één, of als het twee of als het drie, 188 00:08:57,540 --> 00:09:00,870 Ik zal dit doen, of dit ding, of dit ding. 189 00:09:00,870 --> 00:09:04,660 En: kan worden gebruikt ter vervanging heel simpel if-else takken, 190 00:09:04,660 --> 00:09:08,490 of indien anders ketens te maken uw code er een beetje fantasie. 191 00:09:08,490 --> 00:09:09,250 >> Ik ben Doug Lloyd. 192 00:09:09,250 --> 00:09:11,410 En dit is CS50. 193 00:09:11,410 --> 00:09:12,959