1 00:00:00,000 --> 00:00:05,140 2 00:00:05,140 --> 00:00:05,640 Bone. 3 00:00:05,640 --> 00:00:08,330 Do nun ni parolu pri io vere utila en programming-- 4 00:00:08,330 --> 00:00:09,914 kondiĉa deklaroj. 5 00:00:09,914 --> 00:00:11,830 Do kondiĉaj esprimoj permesi viajn programojn 6 00:00:11,830 --> 00:00:14,538 preni decidojn kaj preni malsamajn forkoj en la vojo, iom 7 00:00:14,538 --> 00:00:17,670 Mi aludis al iom pli frua, Dependanta sur la valoroj de variabloj, 8 00:00:17,670 --> 00:00:20,990 aŭ bazita sur kio la uzanto enigas en la programisto, ĉe la komandlinio, 9 00:00:20,990 --> 00:00:23,130 aŭ se vi havas prompto aŭ io simila. 10 00:00:23,130 --> 00:00:26,690 C havas paron de malsamaj manieroj por esprimi kondiĉaj esprimoj, kiuj 11 00:00:26,690 --> 00:00:29,911 Ni ankaŭ kelkfoje nomos kondiĉa branĉo en viaj programoj. 12 00:00:29,911 --> 00:00:32,910 Kaj iuj de tiuj tuj serĉos bela familiara al vi de nulo, 13 00:00:32,910 --> 00:00:35,190 do ni eĉ tiri ilin supren flanko ĉe flanko, ĵus 14 00:00:35,190 --> 00:00:38,170 vi povas fari tiun analogion en via kapo. 15 00:00:38,170 --> 00:00:41,250 >> Do, if-- se estas bela simpla kondicionalo. 16 00:00:41,250 --> 00:00:43,560 Se vi memoras de nulo dekstre tie 17 00:00:43,560 --> 00:00:50,000 vi povus plenigi ke estas seslatero kun blua esprimo se muso malsupren 18 00:00:50,000 --> 00:00:53,010 aŭ se x estas malpli ol 10, aŭ io simila. 19 00:00:53,010 --> 00:00:57,390 Kaj tiam, se x estis malpli ol 10, aŭ se la muso estis fakte, malsupren, 20 00:00:57,390 --> 00:01:01,140 ĉiuj la kodo ene de la enigmo peco ekzekutus. 21 00:01:01,140 --> 00:01:03,720 Ĉiuj aferoj kiuj persvadas ene ol C formon. 22 00:01:03,720 --> 00:01:07,200 >> Simile, ni havas se maldekstre tie. 23 00:01:07,200 --> 00:01:09,210 Se Bulea esprimo, kiun mi simple uzante 24 00:01:09,210 --> 00:01:13,010 kiel anstataŭaĵo por unu el la Bulea esprimojn ni antaŭe diskutis, 25 00:01:13,010 --> 00:01:15,240 malfermita krispa streĉa, proksime frizita streĉa. 26 00:01:15,240 --> 00:01:17,720 Do pensu pri malfermita krispa krampoj kaj fermitaj krispa streĉa 27 00:01:17,720 --> 00:01:22,720 kiel ia analoga al la sandviĉo efiko de la se bloko dekstre 28 00:01:22,720 --> 00:01:24,070 el nenio. 29 00:01:24,070 --> 00:01:28,680 >> Se la Bulea esprimo en la se aserto estas vera, 30 00:01:28,680 --> 00:01:30,900 tiam ĉiuj linioj de kodo inter la krispa krampoj 31 00:01:30,900 --> 00:01:33,870 ekzekutos en ordo de supro al fundo. 32 00:01:33,870 --> 00:01:35,700 Se la Bulea esprimo estas falsaj, ni 33 00:01:35,700 --> 00:01:38,610 salti super ĉio inter la krispa krampoj, ĉar ni nur 34 00:01:38,610 --> 00:01:44,570 volas iri malsupren ke forko en la vojo se la Bulea esprimo estas vera. 35 00:01:44,570 --> 00:01:48,540 >> Ni povas preni tiun unu paŝo cetere kun se alie. 36 00:01:48,540 --> 00:01:50,820 Do tiu Scratch bloko estas bela simila al la 37 00:01:50,820 --> 00:01:55,884 ni vidis nur dua antaŭe, krom prenas du malsamajn padojn bazita 38 00:01:55,884 --> 00:01:56,550 sur kio okazas. 39 00:01:56,550 --> 00:02:00,420 Do se la muso subiris, aŭ se x estis malpli ol 10, 40 00:02:00,420 --> 00:02:04,780 Ni faros ĉion jen intere ke unua forko, kiuj unuaj C., 41 00:02:04,780 --> 00:02:08,430 >> Alie, se la muso estas supren, aŭ x estas ne malpli ol 10, 42 00:02:08,430 --> 00:02:10,460 Ni faros ĉion en la dua aro. 43 00:02:10,460 --> 00:02:15,010 Kaj tio estas analoga al kion vi vidas tie por C. Se Bulea esprimo, 44 00:02:15,010 --> 00:02:17,910 fari la aĵojn inter la unua aro de frizita krampoj. 45 00:02:17,910 --> 00:02:20,550 Alie, fari la aĵojn inter la dua aro de frizita krampoj. 46 00:02:20,550 --> 00:02:22,080 Do se la Bulea esprimo estas vera, ni 47 00:02:22,080 --> 00:02:23,580 Kion ajn estas inter la unua aro. 48 00:02:23,580 --> 00:02:27,480 Se la Bulea esprimo estas falsa, kiu deĉenigi la alian, 49 00:02:27,480 --> 00:02:30,100 kaj ni devus fari kion ajn estas en la dua aro de frizita krampoj. 50 00:02:30,100 --> 00:02:34,190 Denove, supre sube, ĉiuj linioj en inter la krampoj. 51 00:02:34,190 --> 00:02:38,130 >> En C, eblas krei an se-alia se-alia ĉeno. 52 00:02:38,130 --> 00:02:42,000 Fakte vi povas havi se-alia se-alia se-alia, se, kaj tiel plu kaj tiel plu kaj tiel 53 00:02:42,000 --> 00:02:42,720 sur. 54 00:02:42,720 --> 00:02:44,660 En Scratch, tio postulis nestumante la blokoj. 55 00:02:44,660 --> 00:02:48,280 Vi aldonas se-alie, kaj vi devis meti alian ene de la alia, 56 00:02:48,280 --> 00:02:51,110 kaj tiel plu, kaj alvenis speco de nestitaj kaj komplika. 57 00:02:51,110 --> 00:02:52,450 Sed C, ni ne devos fari tion. 58 00:02:52,450 --> 00:02:55,300 Ni povas fakte nur devas prezentigxas ĉeno kiel ĉi. 59 00:02:55,300 --> 00:02:58,350 Denove, kiel vi povus atendi, ĉiuj tiuj branĉoj estas reciproke ekskluzivaj. 60 00:02:58,350 --> 00:03:00,750 Vi nur povas iam iri malsupren unu de la branĉo. 61 00:03:00,750 --> 00:03:02,270 Se tio estas vera. 62 00:03:02,270 --> 00:03:03,930 Alie, se tio estas vera. 63 00:03:03,930 --> 00:03:05,700 Alie, se tio estas vera. 64 00:03:05,700 --> 00:03:07,120 Alie, faru tion. 65 00:03:07,120 --> 00:03:11,010 Do ĉio kvar el la branĉoj en tiu ekzemplo estas reciproke ekskluzivaj. 66 00:03:11,010 --> 00:03:14,900 Ĝi estas kvazaŭ-alie se-alia ĉeno. 67 00:03:14,900 --> 00:03:17,580 >> Eblas tamen, kaj foje tre utila, 68 00:03:17,580 --> 00:03:20,950 krei ĉenon de ne reciproke ekskluziva branĉoj. 69 00:03:20,950 --> 00:03:24,600 En tiu ekzemplo, nur la tria kaj kvara branĉoj estas reciproke ekskluzivaj. 70 00:03:24,600 --> 00:03:27,450 Ĝi eblus ke vi povus kontentigi la unuan kondiĉon, 71 00:03:27,450 --> 00:03:29,396 kaj vi povus kontentigi la dua kondiĉo, 72 00:03:29,396 --> 00:03:31,770 kaj vi povus kontentigi la tria condition-- tiaokaze 73 00:03:31,770 --> 00:03:35,270 vi irus malsupren la unuan branĉon, Tiam vi iros malsupren duan branĉon, 74 00:03:35,270 --> 00:03:37,000 tiam vi irus malsupren la tria branĉo. 75 00:03:37,000 --> 00:03:40,450 Aŭ eble vi kontentigi la unua kondiĉo, kaj la dua kondiĉo, 76 00:03:40,450 --> 00:03:42,770 sed vi ne kontentigi la tria kondiĉo. 77 00:03:42,770 --> 00:03:46,230 En tiu kazo vi iros malsupren la unua branĉo kaj la dua brancxo, 78 00:03:46,230 --> 00:03:48,040 kaj tiam la kvara branĉo, 79 00:03:48,040 --> 00:03:51,392 >> La kialo estas, ke la alia nur ligu al la plej proksima se. 80 00:03:51,392 --> 00:03:53,100 Do kvankam ekzistas an alian tie, ke 81 00:03:53,100 --> 00:03:56,490 ne nepre kreos reciproke ekskluziva ĉeno de ĉio. 82 00:03:56,490 --> 00:04:00,890 Ĝi estas nur la esprimo tie kun Bulea 83 00:04:00,890 --> 00:04:05,040 esprimo 3-- jen la reciproke ekskluziva kun la alia. 84 00:04:05,040 --> 00:04:07,580 Do ĝi estas ebla, kaj foje tre utila, 85 00:04:07,580 --> 00:04:11,772 kiel mi diris, por krei ĉenon de Ne reciproke ekskluzivaj branĉoj. 86 00:04:11,772 --> 00:04:14,230 Ni rigardu alian speco de kondiĉa, kiu 87 00:04:14,230 --> 00:04:17,392 Vi ne vidis antaŭe en Scratch. 88 00:04:17,392 --> 00:04:19,369 Estas io nomita la ŝaltilo deklaro. 89 00:04:19,369 --> 00:04:21,410 La ŝaltilo deklaro estas speco de neta ĉar ĝi estas 90 00:04:21,410 --> 00:04:25,930 kondiĉa deklaro kiu permesas vi specifi apartajn kazojn, 91 00:04:25,930 --> 00:04:28,926 anstataŭ dependi Buleaj esprimoj por fari decidojn por vi. 92 00:04:28,926 --> 00:04:31,050 Do ekzemple, ni diru ke mi havas tiun programon, 93 00:04:31,050 --> 00:04:34,110 kaj mi petas la uzanto provizi enigon al mi. 94 00:04:34,110 --> 00:04:37,170 Do mi diras, int x = Get Int (), kaj se vi ne estas familiara tamen, 95 00:04:37,170 --> 00:04:40,190 atingi int estas funkcio kiu estas Ankaŭ inkluzivita en la CS50 biblioteko, 96 00:04:40,190 --> 00:04:44,610 do se vi include cs50.h vi devos aliro al Get Int () kaj ĉiuj ĝiaj 97 00:04:44,610 --> 00:04:46,840 kuzoj GetFloat, GetString, kaj tiel plu. 98 00:04:46,840 --> 00:04:52,590 Esence unu Get funkcio por ĉiu datumtipo ke ni jam diskutis. 99 00:04:52,590 --> 00:04:53,970 >> Do int x egalas GetInt. 100 00:04:53,970 --> 00:04:56,390 Esence, kio okazas Estas mi estas ĉe la terminalo. 101 00:04:56,390 --> 00:04:58,790 Mi demandas al la uzanto tajpas en nombro. 102 00:04:58,790 --> 00:05:02,300 >> Kaj tie mi ŝaltanta kion mi faras, depende 103 00:05:02,300 --> 00:05:05,060 sur kion la uzanto tajpas ĉe la prompto. 104 00:05:05,060 --> 00:05:09,147 Do se oni tajpas, mi presi unu. 105 00:05:09,147 --> 00:05:09,855 Kaj tiam mi rompos. 106 00:05:09,855 --> 00:05:12,590 107 00:05:12,590 --> 00:05:15,510 Se ili tajpu du, mi elprinti du. 108 00:05:15,510 --> 00:05:16,690 Kaj tiam mi rompos. 109 00:05:16,690 --> 00:05:19,060 Estas grave rompi inter ĉiu kazo 110 00:05:19,060 --> 00:05:20,890 ĉar alie vi falos tra. 111 00:05:20,890 --> 00:05:23,380 Do, se mi ne havas ajnan paŭzoj ekzistas, kaj la uzanto 112 00:05:23,380 --> 00:05:31,380 tajpita unu, kio okazus estas estus presi unu, du, tri, pardonon. 113 00:05:31,380 --> 00:05:33,099 Tio estas speco de stranga konduto, ĉu ne? 114 00:05:33,099 --> 00:05:33,890 Vi povus pensi tiel. 115 00:05:33,890 --> 00:05:36,480 Sed ekzistas fakte kelkaj kazoj kie tio povus esti bela utila afero. 116 00:05:36,480 --> 00:05:39,730 Do jen alia ekzemplo de ŝaltilo deklaro kie mi preterlasas la paŭzoj. 117 00:05:39,730 --> 00:05:42,030 Sed mi faros ĝin sur celo. 118 00:05:42,030 --> 00:05:43,030 >> Do kio okazas ĉi tie? 119 00:05:43,030 --> 00:05:43,821 Pensu dum sekundo. 120 00:05:43,821 --> 00:05:45,960 Vi povas eĉ volas paŭzi la video. 121 00:05:45,960 --> 00:05:48,230 >> Kio okazas tie se la uzanto tajpas kvar? 122 00:05:48,230 --> 00:05:51,190 123 00:05:51,190 --> 00:05:53,860 Do mi demandis la uzanto por enigo. 124 00:05:53,860 --> 00:05:56,560 Kaj ili provizas la valoro 4. 125 00:05:56,560 --> 00:05:59,545 Kio gets presitaj kiam mi faras tion? 126 00:05:59,545 --> 00:06:02,170 Sur la antaŭa glitejo, ekzistis paŭzoj inter ĉiuj kazoj. 127 00:06:02,170 --> 00:06:04,750 Kaj tiel ĝi estus nur presi kvar kaj tiam halti. 128 00:06:04,750 --> 00:06:06,610 Sed en ĉi tiu kazo, ĝi ne volas. 129 00:06:06,610 --> 00:06:10,700 Kio okazos estas vi falos tra ĉiu kazo. 130 00:06:10,700 --> 00:06:14,890 >> Do ĉi-kaze mi organizas mian kazoj tiel ke se la uzanto tajpas 4, 131 00:06:14,890 --> 00:06:20,070 Mi presos kvar, tri, du, unu, Blast Off. 132 00:06:20,070 --> 00:06:22,780 Kaj se ili tajpita 5, mi komencus ĉe kvin kaj faru la samon. 133 00:06:22,780 --> 00:06:26,410 Se ili tajpitaj 1, mi volus nur faru unu, blast for. 134 00:06:26,410 --> 00:06:28,715 >> Do en ĉi tiu kazo, Mi uzas ŝaltilo ia lerte tiel 135 00:06:28,715 --> 00:06:30,804 ke mi intencas fali tra ĉiuj kazoj. 136 00:06:30,804 --> 00:06:33,720 Sed ĝenerale vi verŝajne gonna volas rompi inter ĉiuj ili, 137 00:06:33,720 --> 00:06:36,090 krom se vi havas situacion tiel unu kie vi estas 138 00:06:36,090 --> 00:06:40,081 speco de ekspluatanta la fakto ke vi falas tra la kazoj sen paŭzo. 139 00:06:40,081 --> 00:06:42,830 Do jen la dua el la gravaj tipoj de kondiĉaj deklaroj. 140 00:06:42,830 --> 00:06:47,139 La lasta de kiu estas?: Do mi havas du fragmentojn de C kodo tie. 141 00:06:47,139 --> 00:06:48,680 Unu maldekstre kaj unu dekstre. 142 00:06:48,680 --> 00:06:52,330 La unu maldekstre devus probable estos bela familiara al vi. 143 00:06:52,330 --> 00:06:55,110 >> Mi havas int x. 144 00:06:55,110 --> 00:06:57,167 Kaj mi verŝajne devus demandis la uzanto 145 00:06:57,167 --> 00:07:00,250 for-- ĉi devus verŝajne esti Mez x egalas GetInt, aŭ io simila. 146 00:07:00,250 --> 00:07:03,030 147 00:07:03,030 --> 00:07:05,240 Kaj poste mi preni decidon. 148 00:07:05,240 --> 00:07:11,700 Se iuj Bulea esprimo estas vera, atribui x la valoron 5. 149 00:07:11,700 --> 00:07:13,590 Alie, atribui x la valoron 6. 150 00:07:13,590 --> 00:07:16,548 >> Ke maldekstre devus verŝajne esti bela familiara el nia diskuto 151 00:07:16,548 --> 00:07:18,160 de Se Else nur antaŭ momento. 152 00:07:18,160 --> 00:07:20,535 Ĉu vi estus surprizita scii ke la linio sur la dekstra 153 00:07:20,535 --> 00:07:22,310 faras precize la saman aferon? 154 00:07:22,310 --> 00:07:26,140 >> Do tio nomiĝas?: Aŭ kelkfoje vokis la triargumenta operatoro. 155 00:07:26,140 --> 00:07:27,450 Kaj estas sufiĉe freŝa. 156 00:07:27,450 --> 00:07:29,110 Ĝi estas kutime utiligita kiel cute truko. 157 00:07:29,110 --> 00:07:35,777 >> Sed kion ĝi al vi permesas fari estas simuli Se Else kun vere malgranda, 158 00:07:35,777 --> 00:07:37,610 vere bagatele mallonga kondiĉa branĉoj. 159 00:07:37,610 --> 00:07:41,470 Vi ĝenerale ne uzus?: Se vi havis ses linioj de kodo inter ĉiu aro 160 00:07:41,470 --> 00:07:42,569 de frizita krampoj. 161 00:07:42,569 --> 00:07:44,360 Sed se vi estas nur farante rapidan decidon, 162 00:07:44,360 --> 00:07:47,520 se vi tuj faros unu afero aŭ la alia kaj ĝi estas tre simpla, 163 00:07:47,520 --> 00:07:52,240 ĉi povus esti ekzemplo de kiel faru kun?: la triargumenta operatoro. 164 00:07:52,240 --> 00:07:56,940 Do int x egalas esprimo? 165 00:07:56,940 --> 00:07:59,470 La afero post la demando marko estas kio iksoj valoro 166 00:07:59,470 --> 00:08:02,690 estos se esprimo estas vera. 167 00:08:02,690 --> 00:08:05,330 >> La afero post la dupunkto diras x valoro 168 00:08:05,330 --> 00:08:07,990 estus se la esprimo estis falsa. 169 00:08:07,990 --> 00:08:11,510 Do mi demandas min mem, estas la esprimo estas vera? 170 00:08:11,510 --> 00:08:13,870 Se jes, atribui x la valoron 5. 171 00:08:13,870 --> 00:08:16,619 Se ĝi ne estas, atribui x la valoron 6. 172 00:08:16,619 --> 00:08:17,410 Denove, kiel mi diris. 173 00:08:17,410 --> 00:08:18,670 Tio estas kutime nur bela truko. 174 00:08:18,670 --> 00:08:20,430 Kaj kelkfoje se vi fariĝas vere komforta kun ĝi, 175 00:08:20,430 --> 00:08:22,820 vi faros tion ĉar ĝi aspektas speco de cool en viaj programoj. 176 00:08:22,820 --> 00:08:25,710 Ĝenerale mi prezenti gxin al vi nun tiom vi konas lin 177 00:08:25,710 --> 00:08:26,990 se vi vidos. 178 00:08:26,990 --> 00:08:30,080 Sed certe scias ke vi ne havas skribi ĝin en ia via kodo. 179 00:08:30,080 --> 00:08:33,246 Sed estas io esti familiara kun, ĉar vi sendube renkontos 180 00:08:33,246 --> 00:08:36,130 fragmentojn de kodo tie kaj tie kie tio?: sintakso, 181 00:08:36,130 --> 00:08:39,120 AKA la triargumenta operatoro, estas uzata. 182 00:08:39,120 --> 00:08:40,960 >> Do rapidan resumon sur kio Conditionals estas, 183 00:08:40,960 --> 00:08:44,210 kaj kion la ebloj estas disponeblaj al vi en C. Vi havas Se se-alia, 184 00:08:44,210 --> 00:08:46,860 kaj se alia se, kaj tiel plu. 185 00:08:46,860 --> 00:08:50,880 Vi povas uzi Bulea esprimoj por tiuj fari decidojn. 186 00:08:50,880 --> 00:08:53,720 >> Kun ŝaltilo deklaroj vi uzas diskreta kazoj preni decidojn. 187 00:08:53,720 --> 00:08:57,540 Vi estus specife diri, se ĝi estas unu, aŭ se ĝi estas du, aŭ se ĝi estas tri, 188 00:08:57,540 --> 00:09:00,870 Mi faros tion, aŭ tiu afero, aŭ tiun aferon. 189 00:09:00,870 --> 00:09:04,660 Kaj?: Povas esti uzata por anstataŭi tre simpla se-alia branĉoj, 190 00:09:04,660 --> 00:09:08,490 aŭ se-ajn ĉenojn fari via kodo aspektas iom imago. 191 00:09:08,490 --> 00:09:09,250 >> Mi Doug Lloyd. 192 00:09:09,250 --> 00:09:11,410 Kaj tiu estas CS50. 193 00:09:11,410 --> 00:09:12,959