[Powered by Google Translate] Давид Ј. Малан: Добро, ово је ЦС50, и то је Почетак недеље два. Хвала. Нека нас овде почињу са телефонским позивом. Ја сам о томе да позовете 617-буг-ЦС50. ЦС50: Ово је ЦС50. За Схуттле Бои, притисните 1. Да почнемо испочетка, притисните 9. Давид Ј. Малан: Значи, рекао је он за шатл Бои, притисните 1. Дакле, ми ћемо притиснути 1. ЦС50: Шта је ваш порекло? За куад, притисните 1. Матхер, притисните 2. Боилстон, притисните 3. Ламонт, притисните 4. Мем Хала, притисните 5. Да почнемо испочетка, притисните 0. Давид Ј. Малан: Ми ћемо притисните тастер 1 за четворку. ЦС50: Следећи шатл оставља ово веома минут 1:10 часова, а онда на 1:20 х, 1:30 ПМ 1:40 ПМ. Ово је ЦС50. Давид Ј. Малан: Дакле, ово је ЦС50 глас. И то је примјер врста завршних пројеката, за На пример, можете да одгризе према крај семестра. На пример, да схуттлебои.цс50.нет постоји - заправо пројекат који сам први пут написао након узимања ЦС51 кад сам био студент. А инспирација је овде тада, све што су имали било штампани шатл бус распоред, а није било Појам гледа ствари на интернету. И тако сам некако голуба у једном викенду, сипати преко штампани распоред, па га користити на рачунарски програм. У то време, рачунарски програм се десило да буде написан у Ц А ти заправо побегао од куцањем шатл Бои на трепће затражити да смо радили до сада. Али током година, он је еволуирао у инстант порука бот. Она је еволуирала од недавно у овом сајту, у СМС-базиран алат, као иу овом глас заснованог алата. А то је да наговести на свакакве ствари које можете урадите за себе до краја семестар. На пример, тамо СМС верзија Схуттле Бои дешава да раде као што следи. Ако, на вашем мобилном телефону, можете послати текстуалну поруку на 41411 и затим пошаљите специјалне сбои симбол за Схуттле Бои, затим А и Б, где је порекло и Б је дестинација - На пример, Боилстон Спаце Куад - оно што би требало да се врати у року од неколико секунди је текст Порука од шатл Бои вам кажем тачно када Наредних неколико шатлови су, од тог момента ће се то тачка Б. А ово је општији пример онога што је познато као коришћењем АПИ. Тако, на пример, ово овде је само схуттлебои.цс50.нет је стварна веб-басед инкарнација ово. Али подаци који истиче ове и друге апликације које ЦС50 развила су сви изложени свима овде у форми Апис, програмски интерфејс. А то је само фенси начин да се каже да су људи са којима смо као на Интернет и други су провели неко време стварања софтвер који можете користити да би се привукла податке од нас и затим изградити своје апликације на врху тог скупа података. Тако, на пример, ова услуга Дечак АПИ страницу овде, што се дешава да се у приручнику ЦС50, суштински документи како можете ићи око тражећи ЦС50 сервере за податке. На пример, ако сте упознати са ЦСВ фајлова, зарезе раздвојене вредности, ово су само нека од брз и прљав Екцел као датотеке. Тако можете питати децка превоза за све податке о свим од куће и њихови ГПС координате, и добићете назад, у суштини, табела таква да онда можете да прочитате у програм своје и онда генерисање резултата, као шатл Бои сама се дешава да се ради. За оне више познатих, више савремених података репрезентације укључују ЈСОН, ЈаваСцрипт Објецт нотацији. Нешто ће се вратити вама ка крај семестра. Али опет, ово је само један од неколико сопственог АПИ ЦС50 је. И узбудљива ствар је сада, ових дана, Фацебоок и Твиттер и Гоогле и скоро сваки популарни сајт од тамо има неки АПИ, што значи ако сте прочитали документацију на њиховом сајту, можете пријавити за налог, можете да почнете да пишете софтвер на врху год алата или података да компанија има пружа. И тако је један од наших другова наставних уназад пар година написао Мац верзију овога. Тако на линк под називом Мац овде у горњем левом углу, можете заправо преузели Мац ОС виџет који ради на свом Мац да учини исте врсте ствари. Дакле, то је све о изградњи на врху сетова података као што су ови. Али више о томе крајем семестра. Дакле, хајде да зароните у реалном брзо грешке, само да некако добије ствари загрејан данас, и мислим да врати неке од ствари које смо гледали прошле недеље. Конкретно, пусти ме напред и попните се, рецимо, овај пример овде. Бугги1.ц, ово је доступан на сајту наравно, ако сте бих желели да га преузмете и џаку око себе. Али хајде да увећате овде на овом прилично кратком програму, а само супер брза рекапитулација неких од основних блокова који ми стварно иду само да почну да узимају здраво за готово. Дакле плавом ствари, у редовима од 1 до 9, само су Софтбол питања. Дакле, ово су само коментари. Они немају функционалну значење. Али они су коментари у смислу да су они напомиње да Ја, људско, направио себи, тако да у предавању и после предавање, ја заиста могу да се сетим шта је тај програм ради без потребе да прочитате кроз њега ред по ред и рецреатинг историју у мом уму. Штавише, ако дам овај програм на неком другом као ти, много је јасније да вас због коментара као што је овај, шта је заправо програм ради, или бар оно Програм би требало да ради. Без обзира да ли је то тачно је друга ствар уопште. Сада, у Ц, са мулти-лајн коментарима, подсетити да је на линији овде је магија симбол / *. То овде значи долази почетак коментару. И ништа друго битно све док не дођете до краја Терминатор, што је * /, супротно. Дакле, чињеница да имам 80-неке чудне звезде овде из лева на десно је заиста само естетски детаљ. Она нема функционалну значење. Сада како о линији 11? Шта се то уради у смислу лаик? Шта је то? ПУБЛИКА: Укључује стандард. Давид Ј. Малан: Добро, добро. Дакле, она укључује стдио.х библиотеку. Дакле, шта то значи? Па, унутар тог фајла стдио.х су гомила Функција декларације - то је код који је неко други написао. А савршен пример функције која је проглашена у стдио.х је - који омиљена до сада? Дакле принтф, један од најуобичајенијих за коришћење, сигурно рано, из те библиотеке је тамо. Ако изузмем ту линију кода, кланг ће викати на мене нешто помоћу црно симбол. Нешто неизјашњених је вероватно кључна реч, јер нисмо обавештени компајлер шта принтф изгледа свиђа уколико не укључују ту линију. И још на Земљу, стварно, шта је линија кажем отвори тај фајл, стдио.х, где је на серверу је хард диск или хард диск апарата, а цопи-пасте је тамо у мом досијеу, без моје има да се то уради ручно. Сада, када смо добили овде на главни, ускоро ћемо почети досадан, осим што инт и шта је празнина. Али за сада, хајде да погледамо три линије унутар 15 до 17. Ово овде тврдим као луд. Линија 7 у мојим коментарима каже: "Ако штампате 10 звездицу али не "Зашто не. то не штампају, у ствари, 10 таквих звезда? ПУБЛИКА: [ИНАУДИБЛЕ]. Давид Ј. Малан: Тачно. Дакле, приметио да смо почели да рачунају од 0. И то је заправо конвенција у програмирању и рачунарских наука уопште, почиње да броји од 0 уместо 1. А ово стварно само проистиче из чињенице да је, за На пример, када смо имали осам људи на бини, када нико није био подизање руку, они су били сви ефикасно нуле. И тако је то само нека врста компјутерског конвенције тако, дакле, да почне бројање од 0. Ако је то најмањи број који може да заступа у бинарном. Дакле, овде смо почели иницијализација ја на 0. Смо поставили смо и једнак 0. Али онда сам направио грешку ово овде, рекавши ми је мања или једнака 10. Али ако мислите да путем, ако почнем на 0 и онда идем до 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ја заправо идем на штампати 11 звездица на екрану, јер сам отишао горе да и једнака 10. Тако лако поправити овде онда је шта? ПУБЛИКА: [ИНАУДИБЛЕ]. Давид Ј. Малан: Само се променити на мање од. Ако стварно желите, можете да урадите ово. Али у принципу, то је неодобравањем. И тако почиње да броји од 0 је само нешто што треба обично навићи. Сада, шта је са целом овом конструкт по себи? Ова линија 15 демаркс а за петљу. Дакле, за не функционишу. То је само изјава. То петље конструкт, као што смо видели у нуле. И она има три дела. Приметимо да је први део да лево од зареза. Ту је средњи део између два зарезом. А онда ту је и десна рука део на десној другог зарезом. Сада, први од њих не шта? ПУБЛИКА: [ИНАУДИБЛЕ]. Давид Ј. Малан: Назад тамо? Да? ПУБЛИКА: Иницијализација. Давид Ј. Малан: Иницијализација. Дакле, шта то значи? Прогласили смо променљиву зове ја. То је типа инт, јер сам прецизирао инт. И ја сам иницијализација на вредност 0. Дакле, шта је то стварно рекао? То практично говори на рачунар, хеј, дај ми довољно меморије, довољно РАМ-а, да стане број, а затим ставити број 0 у тој комад меморије. И као по страни, колико је велико инт обично, барем у од апарата? ПУБЛИКА: 32-битни. Давид Ј. Малан: 32 бита. Значи, дајте ми 32 бита, иначе познат као 4 бајта, и ставио 0 вредност у томе, што је прилично лако, јер само значи да поставите све делове на 0. Дакле, сада, други део је овде услов. А услов, као што име сугерише, јесте оно што се проверава опет и опет и опет да ли је то истина или лаж. Дакле, ово је само кажем урадите следеће линије кода - наиме линија 16, јер је то само један увучен испод - докле год сам је мање од 10 година. И после сваке итерације кроз ову петљу, урадите Инкрементација, која је у овом случају ја + +. Дакле, то не мора да буде и + +. То би могло да буде -. Али, ако сам ово урадио, шта се дешава понашање да буде од овог програма? ПУБЛИКА: То ће бити бесконачна петља. Давид Ј. Малан: То ће бити нека врста бесконачне петље, уколико ми се посрећи, након негативног 2 милијарде или тако нешто. Можда ће се ствари око преломити, само по природи коначном број битова које смо издвојених за инт. Али свакако ће прелазили много више од 10, а Сигурно више од 11 пута овде. И сада, као на страну, схватите да сам ја + + и - су заиста само синтаксичке шећера. То је само скраћеница нотација за оно што је мало више експлицитно написано на следећи начин: и = и + 1. То је идентична и + +. То је некако изгледа лепше да кажу и + +. То је више језгровит, више читљив. И тако већина људи ради уместо тога. Али ово је идентичан функционално да оно што смо управо видели. Дакле укратко, брзо поправити овде само да кажем прелазили ја од 0 па све до мање од 10 година. И онда смо заиста ћемо добити 10 звезде. Дакле, хајде да пробамо ово. Дозволите ми да отворимо терминал на дну. Пусти ме да идем у директоријум који је унутра И ја ћу да га саставе ручно са кланг за сада. И ја ћу да саставе ово као бугги1.ц, Ентер. А сада бугги1, зашто постоји таква датотека или директоријум зове бугги1? ПУБЛИКА: [ИНАУДИБЛЕ]. Давид Ј. Малан: Да. Дакле, то је у ствари зове а.оут. Дакле, ако сте се сетим само трчите кланг, где је кланг компајлер, а ви не наведете име које желите да дати свој програм, то ће бити додељена а.оут. Дакле, заиста, ако ја лс - Упс. И дидн'т - црно-бели су неки од проблема ви суочили је фиксна. Али дозволите ми да урадим ово. Ту имамо а.оут на левој страни. Зато морамо да покренете а.оут уместо бугги1. Зато ме пусти да идем напред и урадите то. / А.оут., Ентер. И очигледно није урадио шта? ПУБЛИКА: Саве. Давид Ј. Малан: Сачувајте своју датотеку. Тако да се лако решава притиском Цонтрол С, или ће Филе, Саве, као и у већини програма. Пусти ме да идем доле, брисање екрана, покрените га поново. И даље постоји грешка. Дакле, шта се дешава - ПУБЛИКА: Ниси саставити. Давид Ј. Малан: Ах, добро. Нисам га компајлирате. Као идиот, гледам кода да видимо шта није у реду. Дакле зазвечати бугги1.ц сада а.оут. И Фуј, спасени. Тако то изгледа мало ружно, јер не постоји нова линија било где у програму. Али опет, то је само естетски детаљ. А барем ако рачунамо оне се, требамо Сада видим 10 таквих звезде. Па, шта је са овом другом загревања пример? Дакле, у бугги2, ја тврдим да је ова верзија, такође, ће штампати 10 звездица, један по линији. Дакле, овај пут, имам нови ред карактер, само да би ствари мало лепше. Али уместо тога шта имам је ово. Па пусти ме да радим кланг бугги2.ц, Ентер. Сада је поново позвао а.оут. Ентер. Ја видим само једну нову линију, само последња нова линија која креће мој упит на следећи ред. А ипак је јасно да сам се штампа *, затим нову линију, *, А затим нова линија. Али шта је буба овде? Да? ПУБЛИКА: [ИНАУДИБЛЕ]. Давид Ј. Малан: Тачно. Дакле, за разлику од неких језика, као што су Питхон, где улегнуће заправо има функционалну значење у језик као Ц - као што ћемо видети, ПХП, ЈаваСцрипт - удубљење је заиста само за добробит људско. Дакле, чињеница да сам увучен линију 16 и 17 изгледа сјајно, али има овде нема функционалну значење. Ако желим обе линије да изврши као део за петља, онда морам да их окружити заграда на овај начин. Можете само да смањи тај угао и изоставити витичасте заграде ако Шта је случај? ПУБЛИКА: Само једна линија. Давид Ј. Малан: Само једна линија. Дакле, то је само нека врста лепе врсте синтаксе детаља, тако да не губите време писања три линије, од којих су два витичасте заграде, само да напишем једну линију кода. Али, ако имате две или више линија, ми смо заиста треба да урадите. Дакле, сада пусти ме спаси ово. Пусти ме само напред и поново покрените кланг. Онда ме пусти репризу а.оут, а сада сам их добити по једну линију. Сада, а.оут опет је нека врста глупог имена за програм. Како могу да кажем да заиста кланг ми дати име датотеке то је више разумљив, као бугги2 сама? Мало јасније? ПУБЛИКА: [ИНАУДИБЛЕ]. Давид Ј. Малан: У реду, тако да ја заправо могу да веома разумљив пречица и управо пише да бугги2. Ја не прецизира ц у овом случају. И притисните Ентер. А шта би ли је то саставља бугги2.ц за мене тражећи цланг да то уради. Конкретно, она позива кланг, ради кланг користе много више командне линије аргументи или прекидачи него што сам стварно потребно. У време ћемо се вратити на оно што све ове различите загонетна цртицу изрази значи. Али, за сада, то је само ми уштеде за невоље морате да запамтите и да се откуцати свима разни цртицу израза. А наопако тога на крају је да сада имам бугги2. Ако желим да радим ручно, иако сам уместо тога могу да урадим ово - зазвечати-о бугги2 и онда бугги2.ц. И да ће на сличан начин ми дати фајл под називом бугги2. Дакле укратко, кланг је компајлер. Нека је само разумљив алат који ћемо користити више и више, јер тек почиње да се поједноставе ствари за нас. И ми врати 0, на крају. За сада, само зато, већ ћемо почети досадан тај део данас и у среду. Сва питања о било шта од овога? Да? ПУБЛИКА: [ИНАУДИБЛЕ] Јел у наводнике тамо? Давид Ј. Малан: ОК. Када сам откуцао ли наводницима, који је мене раде неку магију иза сцене да поправи грешку. Заборавио сам, као што смо говорили многи од вас на дискусионе табле, да се ураде - ово ћемо урадити сада - судо иум-и упдате апплианце50. Упс, да је то тачно написано. Дакле, апарат је као оперативни систем. То је покренут овај оперативни систем назван Федора. А сад због моје споре Интернет везе, ја сам стварно хосед. Дакле, ради судо иум упдате, као што смо вам рећи да раде у Проблем скуп, у суштини воле ради аутоматског ажурирања у Мац ОС или Виндовс. А разлог за покретање на самом почетку Проблем скуп је јер када смо креирали апарат, ја сам забрљао, а ја сам случајно направио све програме изгледају црно на црном екрану, због чега их не виде по дефаулту. Али најновија верзија уређаја поправља ово. И ја ћу то да средим током паузе када имам интернет повезивања. Тако су цитати само крије своју грешку, врло дискретно, очигледно. Остала питања? Да? ПУБЛИКА: Одакле да долазе? [ИНАУДИБЛЕ] Давид Ј. Малан: Добро питање. Одакле да долазе? То је Линукс програм који постоји већ дуги низ година, дуго пре ЦС50. И то долази са оперативним системом попут Федора. Она не долази из ЦС50 библиотеке. У ствари, једине ствари које долазе из ЦС50 библиотеке до сада, да смо видели, ГетСтринг, ГетИнт, све они Гет функције, а реч стринг, а некима мери, реч боол. Али, ми ћемо задиркивао да осим када зароне у ЦС50 Апарат сама. Тако да, још једно питање овде. ПУБЛИКА: Када сте рекли да и онда луд, како се Рачунар знам [ИНАУДИБЛЕ]? Давид Ј. Малан: Добро питање. Дакле, када сте само трчите да бугги1 или да бугги2, како чини зна? Дакле, по дефаулту, ако откуцате да бугги1, да тражи фајл под бугги1.ц. А онда извршава одговарајуће кланг команде, чиме превасходног подразумевани излазни фајл под називом а.оут. У ствари, ако погледамо шта чине, шта - хајде да прекинемо ово. Ако погледамо шта би се заправо ради, да бугги2, то је већ до сада. Дакле, дозволите ми да уклоните рм команду, Програм сам писао раније. Куцање И-Е-С да потврди да желим да га уклоните. Ако ја сад направити, приметити да у овом веома дугом реду, ту је ова последња ствар овде,-о бугги2. Све чине ради пролази тај аргумент, да тако кажем, да Цланг, тако да не морам да га откуцате себе. У реду, тако да брзо пар административних најаве. Дакле, за делове, чиме је и званично почела ова долази Недеља, увек ћете желети да донесе, ако имате једну, лаптоп. Ако немате лаптоп, да допре до мене пада ми е-маил. И ми ћемо смислити ток посла. Шта обично ћете наћи у одељку јесте да су они део концептуални, део руке-на. Ми ћемо користити посебно део питања, део Проблем скуп током недеље, да прођем кроз неке од концептуални материјал из предавања. И то је све у садашњој проблема сету. И такође ћемо заронити у неке руке о активностима, понекад од којих ће бити потребно да се подносе, понекад што неће. На пример, ово прва недеља, они значило само као вежба за загревање. И видећете да су ти проблеми су заиста само то. Смо створени су да буду прилично мали, али не нужно тривијална програми за писање, које нису нужно узбудљиве по себи, али су добре прилике за вежбају са синтаксом, са новим функцијама, у удобности одељак где имате неколико својим друговима представити као и као ТФ. А шта ћемо урадити током времена је користите алатку која се зове ЦС50 Спацес, при чему уместо само коришћењем ЦС50 Апплианце, ти ћеш уместо тога идите на веб страницу у прегледачу, где ћете моћи да напишете код у прозору прегледача током секцији. И онда ако се одлучите, ваш колега настава се затим приказати шта год да је куцате на екрану у вашем бровсеру прозор на фронту у класи, било анонимно или јавно, тако да он или она се онда проћи кроз са Ваши другови шта сте урадили добро, шта ниси добро. И опет, будите сигурни све ово се може лепо анонимни. Али то ће бити лепа прилика за много више интерактивност него нешто слично предавање дозвољава. У међувремену, ми ћемо имати ове ствари називају супер секције, које су необавезна али су отворени за све у класа, тако да можете да урадите више збирно за Проблем је поставили. Ево распоред. Ово је такође постављен на насловној страни у цс50.нет. Приметите да ће бити хакер специфична једна сутра поподне. И ми ћемо снимати једну данас и сутра, а један пост оне Онлине року од 24 сата. Дакле, ако не можете да направите било који од тих времена, не брините. А опет, распоред је сада онлине на цс50.нет. У погледу себе сечења, требали сте стечен пошаљи налаже да одете на почетну је курс да пронађете из одељка. Ако је живот се променио и да је потребно да промените свој део, није проблем. Вратите се на том истом УРЛ, цс50.нет/сецтион, једнини, а ви ћете попунити сличан образац, тако да можете онда нам дају жељене опције. И ми ћемо пратити до краја недеље о томе шта можемо прими. Прошле седмице, подсећамо да смо предложили коришћење ЦС50 расправљати, Дискусија алат је курс, у предавању. Дакле, имали смо 40 питања која су постављена и одговорио током предавања. Тако је изгледало да добро раде, тако да ћемо наставити покушава да уради ово. Ако се, током предавања, не само да се осећају удобно подизање Ваша рука, није проблем. Иди на цс50.нет/дисцусс, постављати тамо, а један од наших наставе момци ће или одговорити електронски или подижу своје руку на ваше име анонимно да питам, у зависности о природи питања. И у смислу повратне информације, генерално псетс ће бити вратио у року од недељу дана. Зато је потребно мало времена за секције за постизање равнотежа, први псет, 0 и 1, биће мало одложено како ствари смире. Али останите на томе у недељама које долазе. У реду, па ћу ставити на моје озбиљне глас за само тренутак. Дакле, ово је заправо занимљив климу да буду имајући ову дискусију, шта са свим осталим стварима дешава на кампусу у вези са тим. Али ЦС50 је свакако имала своју историју ова тема, у колико сваке године, овај курс, за многе године, Ад-Боардс око 3% од класе. Овај најновији године, 2011, ЦС50 Ад укрцали 35 студената. То није, мислим, због недостатка јасноће. Схватите да је у програму на ток, постоји страница Изјава објашњавајући где су линије. Та иста изјава се понавља на свакој од Проблем поставља на првој страни. Зато сам поменуо ово данас заиста само да људи свјесни ово. И ми смо покушали различите ствари. И оно што сам мислио да ћемо урадити данас је само да одвојите тренутак да заправо поглед на неке од претходних случајева који су дошли горе. Уместо да ове, као прљаве мале тајне, заправо укаже шта ученици су урадили и колико смо детектовали стварно, а шта је за свеобухватни мотивација чак и да овај разговор. Дакле, са тим рекао, линија суштини је ово - по наставним програмом, ти си добродошао, саветујемо вам да разговарају са другим ученицима. То је цела сврха постојања ових колаборативни Радно време у Анненберг и подстицање људи за коначни пројекат да раде заједно. Али линија је нацртана када је у питању време да се заиста пишу Ваш коначно решење. Говорећи на енглеском, потпуно у реду, говорећи у псеудо коду, потпуно у реду. Емаилинг школски друг ваш псет, пуштајући их да изгледају више екран као и даље руке куцање, преко линије, као добро. Да погледамо у програму за поједине линије. Али само да наслика слику о томе како је ово, нажалост, стварност, схватају да постоје сајтови тамо да има решења из ове класе и многе друге класе. Чињеница да ви или око 3% од вас зна да то постоји значи да ми знамо да то постоји. Чињеница да постоје сајтови овако где можете платити некоме да заиста раде свој сета проблема - ово је стварни случај који је дошао прошле године. Ово је сајт под називом одеск.цом. И Тим је име особе која је овде постављање на овај сајт и замолио некога да уради свој псет 7 у овај случај. Па, одеск.цом је веома Гоогле стању, а ми смо превише Веома добар Гооглинг. Овде, такође, постоје сајтови - и ово је један прилично ужасна, искрено. [СМЕХ] Давид Ј. Малан: Смешна ствар о овом сајту је ако читате О страници, они говоре о својим корпоративни култура и како је њихова кориснички сервис број један приоритет, да бисте се уверили да су ваши задаци се окренуо на време. Али у свим озбиљности, опет, чињеница да ове локације постоје, схватили смо, такође, свесни ове врсте сајтова. И да вам дају осећај шта чини ово генерално Потребно ми генерално немају велике скандале у којима људи сарађују на било коју врсту масовног обима, већ је ове касне ноћне тренуци слабости, где ви тако имате много тога да уради, то је 4:00 ПМ, ти си исцрпљен, а ви Мислим у себи, добро, хајде да погледамо моје цимер-а или мог пријатеља код или слично. И то, нажалост манифестације укључују Студент Подношење нешто овако и студентског Б достављања овако нешто, што је свакако, у рачунару Наука класа, је изузетно лак за рачунарске научника открити са софтвером. Ово је још једна заједничка парадигма, где сте некако радили заједно на неким, можда говори у Енглеском, само добро, Псеудокод. Али онда дође време да се заиста поднесе, а псетс Једноставно се размењују путем е-поште или Дропбок или слично. Али, у покушају да се мање очигледно да је ово шта се десило, онда је то оно што се подноси. Ово је, такође, не саплитати добро написане комада софтвера као што морамо да заиста открију такве ствари. И заиста, оно што ми радимо је покренути софтвер који пореди све овогодишњи Поднесци против свих Прошле године је поднеске, против свега што смо наћи на Интернет, против сваког радног сајту тамо. То је све веома аутоматизован. И тако смо урадили заиста у великој праведности на 97% оних који заиста ради своје гузице офф у овом и у другим класе и стављање у све те напоре, тако да рад оне на крају тврдимо своје. И ја могу да трају годинама. Ово су само неколико случајева прошлогодишњих. Неколико студената подносе ове датотеке идентично за псет 2, псет 3, 4 псет, псет 5, 6 псет, псет 9. У овом случају, то је квиз 0 и прошле године, где два студенти подносе идентично ову реченицу од многих други, "Захтев типа -" тачка, тачка, тачка. Дакле, чак иу класи 600 смо то препознаје на поднео квизове. Дакле укратко, ово - искрено, ја мрзим да овакве разговор - али ово је стварно намерно напор ове године покушати да смање тај број. Јер иако смо рекли такве ствари сваких године, мислим да је реалност боравио на њему неколико више секунди него обично и заправо само указује да оно што се можда чини као, ех, не тако велика ствар, бар Мислим назад овом тренутку, како би правичности себи и својим друговима овде. Дакле, ако сте икада имали било каквих питања, као на место где линија је, молим те допре до мене лично. Али одговор је увек, потпуно је нагласио на ласт минуте, готовина у крајем дана. Или, ако је то питање нема било касно дана, искрено, ми е-маил лично. Ми ћемо схватити нешто. Молимо вас да не стави своје време овде на Харварду у опасности. Сада, мислио сам да треба да олакша расположење, па сам укључени ово као следећи слајд. [СМЕХ] Давид Ј. Малан: Овај сајт је супер. Ја заправо имам мало растројен. Има и овај. И онда ово је невероватно. Ок, тако да мислим да од тог маче касно ноћу када одлука те одлуке. У реду, па назад на више забаве, а мање озбиљна ствар, као што је услови. У реду, па смо кратко разговарали о томе. То је нешто што је вероватно прилично упознати са свет нуле. А у свету нуле, имамо ту потребу да се понекад иди чине виле на путу. Или ово или оно или овде ову другу ствар. А када желимо да урадимо ово, можемо да користимо у Ц сада, ово ако друго конструкт. А онда овде имамо Булових израза. На пример, Булове изразе овде, можемо ИЛИ их заједно, у смислу да имамо овај услов ИЛИ тај услов. Можемо и да заједно, у смислу да желимо да погледајте овај услов и тај услов. А овде имамо сада прекидач изјаву, која није толико слично синтаксички оним врстама услова, али је омогућава нам да еквивалент ако, ако, друго иф, елсе ако, и слично, једноставно их набрајам случаја до случаја од случаја до случаја. Тако смо видели те последњи пут. А онда смо почели да додирујете на ствари као што су петље. Видели смо једну од ових пре само тренутак. Али постоје ови други петље конструкти. На пример, овај овде. Дакле, док (услов), урадите ово опет и опет. Па у основи, оно што се чини да се разликује између овог за петље и овде то док петља? Ово је за петље и то док петља. Да? Шта је то? ПУБЛИКА: [ИНАУДИБЛЕ]. Давид Ј. Малан: Добро. Дакле, док је у за петље услов, јасно је да је више синтакса. Ту је ово иницијализација, ту је тај упдате. У вхиле петље, само има овај услов. Тако се чини да је то мало у односу на доле у ​​односу на петља, што значи ако желимо да имамо променљиве и желимо да Инкрементација, ми заправо треба да Урадимо ово сами. Зато ме пусти да иде напред и отворити гедит. Дозволите ми да пребаците на уређај. И хајде да урадимо брзо мало примера да разликује један од њих из другог. А у позадини мог ума овде, требало би да кажем једну ствар. Ја конкретно поменуо име Тим. Тим је био заправо неко да ученик покушао да пронађе да уради њихов домаћи за њих. Нисмо имали Тима у том делу. Па схвати, да не обелодањују студент, није био ученик. То је био случајан човек на Интернету ствари раде од прокси прошле године. Тако смо сазнали да, превише. Дакле, у овом случају овде, пусти ме напред и отвори нову датотеку. Филе, Нев. То ми даје ту картицу. Дозволите ми да иде напред и да га сачувате као лооп.ц. Пусти ме и кликните на Сачувај. А онда овде доле, идемо напред и почети писање # Инцлуде. Пусти ме унутра увећали Сада ћемо урадити маин (воид). Сада пусти ме ићи напред и учинити фор (инт и = 0; и < ох, 10; и + +). А сада ћу да иде напред и да одштампате звезду коју сам урадио раније. И онда на крају овог програма, ми ћемо само да принт нову линију, само да је мој брз не изгледа све наопако. повратак 0. Мислите да синтаксички исправно? До сада. Дакле, хајде да видимо. Дакле, дозволите ми да умањите, идите у мој прозор терминала. И дозволите ми да иде напред и покрените петља, јер сам назвао ствар лооп.ц. Тако да петљу. Изгледа да састави реду. Дозволите ми да покренете петље, и сада Ентер. И чини се да је штампан 10 звезде. Дакле, хајде да само конвертовати у вхиле петље и види шта врсте питања смо саплели. Дакле, уместо тога, пусти ме унутра и реци, док је ја мање од 10 - дозволите ми да се ослободим за петљу. У реду, тако да смо већ неколико проблема. Дакле, стање је исто, али очигледно ми недостаје иницијализација. Ја недостаје Инкрементација. Дакле, шта треба преводилац вероватно реци када покушам да саставити овај програм? Да? ПУБЛИКА: [ИНАУДИБЛЕ]. Давид Ј. Малан: Добро. Дакле, то ће рећи нешто слично непријављени - у овом случају, ја променљива. И заиста, коришћење непријављеног и идентификатора. И тако је то у супротности са језицима као што су ПХП и Питхон и Руби, са којим су неки од вас можда бити упознат, где можете некако почетка коришћењем променљивих неминовно и да не морају да брину о њима декларисање експлицитно увек. У Ц и језицима као што су Јава и Ц + +, морате да будете супер експлицитан. А ако желите променљиву Позвао сам, мораш да ми кажеш каква је променљива. Дакле, ми ћемо морати да поправи ово као што следи. Ја ћу морати да одем овде и упишите инт, дакле, Ја сам прогласио променљиву зове ја. Сада, ја сам прескочио један корак. Очигледно сам не иницијализован, али хајде да видимо да ли је у Најмање састави цланг стоп жале. Дакле, дозволите ми да преобликује овај програм. Добро, сад то је само жали из другог разлога. "Променљиве" и "се неиницијализоване када се користи овде." У реду, тако да То је прилично јасан. Иницијализују само значи постављање је једнака вредности. И нисмо то урадили, па ћу покушати једнако 0. Сада хајде да покушамо поново и поново покренути кланг. Приредила овај пут. И ја сам о томе да га покренете. Али велики стари бесконачна петља, јер сам урадио иницијализација, учинио сам услов, али ја никада нисам урадио било каквог Инкрементација. Па како могу да ураде Инкрементација? Па, у вхиле петље, она се осећа као да ћу имати то уради унутар петље, јер слично прва Овонедељне примера ради петље конструкције, као и чарапе и са себе бројањем, морали смо да урадимо нешто на самом крају, желео да се вратите на следећи ред. Шта ако сам напред и урадите то и + + овде? Немојмо ни саставити ово. Ухвати ме већ. Шта није у реду овде? ПУБЛИКА: [ИНАУДИБЛЕ]. Давид Ј. Малан: Дакле дефинитивно није инт. То сам ја. А витичасте заграде, као и раније, удубљење није довољно. Дакле, сада сам то изгради. Дакле, док сам је мање од 10, одштампајте звезду, онда инкрементирање и. И тако, док петља радова је да чим си ударио Доњи део петље, која је у овом случају изгледа као линија 10, да ће се вратити на линију 6, на којој тачки Услов ће бити поново проверити. И ако сам још увек је мање од 10, урадићемо линес 8 и онда 9, онда ћемо ударити 10, и врати до 6, поново опет и опет и опет, све док и је мање од 10 година. Дакле, хајде да поново покрене направи овде. Ок, ок смо саставили. Дозволите ми да поново покренути петља. А сада стварно изгледа да ради. Дакле, овде плусева и минусева? Па, сада заиста постоји није цела ПЛО - тако сладак. Добро, то је - Ах, то је била несрећа. Добро, хајде да се вратимо на за петљу. Дакле, за петље су лепе, јер су они супер експлицитан. И мада су мало незгодан за писање, то је веома моћан и омогућава вам да урадите више ствари одједном. Иако петље не изгледа да има огромну количину вредности само Ипак, због тога што се осећа као да само морамо да урадимо више посла. Морамо ставити иницијализацију овде, упдате овде доле, и морамо се сетити да уради све то. Тако ћемо видети у времену које вхиле петље заправо позајмљује Сами то само различитим контекстима, различити подаци структуре попут листа и хеш табела, ствари ћемо доћи до средином семестра. Али за сада, знам да постоји овај трећи тип познат као до- док је петља. И ми смо видели овај кратко. И то може бити супер корисно са псет 1. Сваки пут када желите да урадите нешто и затим проверите да ли корисник сарађивали, а ако нису, то опет не- док петља се даје таквом логиком. Јер као наручивања од врха до дна овде сугерише, Не буквално значи ово. А ово опет и опет, шта би то могло бити? Можда то значи позивање ГетИнт или ГетСтринг а затим проверу вредности ГетИнт или ГетСтринг а затим викала у корисника уколико нису сарађивали тражећи од њих да опет и опет и опет. Где желите да урадите нешто једном, затим проверите неке стање. Дакле, хајде да пробамо ово. Дозволите ми да се заиста променити ово сада са до-вхиле петље. И ја ћу да иде напред и урадите следеће. Дакле, урадите следеће. Урадимо инт = ГетИнт (), али хајде да прво кажем корисника шта да радим. Дакле, мало другачије овај пут. "Дајте ми Инт." Зато ћу иф користити за то. А сада ћу да одем доле, а ја ћу да урадим ово док сам је, рецимо, већи од - хајде да видимо, ја је, рецимо, мање од 0 или је ја већа од 10 година. Другим речима, желим број од 1 до 9, само произвољно. Дакле, ја користим комбиновани Булову израз овде уверите се да и је мање од 0 или веће од 10, у коме Случај Учинићу то петљу опет овде. Па опет, уради ово - док сам је мање од 0 или и већи од 10 година. Дакле, сада идемо напред и урадите када смо урадили. Хајде само да урадимо брзо разум чек. принтф ("Хвала, ја је% д", и). Дакле, ово једноставан програм пита корисника за цео број, чини сигуран да је у неком опсегу, 1 до 9, инклузивно и онда се захваљује кориснику их подсетити шта су управо откуцан, баш као мало разума провере. Али, хајде да видимо да ли то ради како треба. Пусти ме да идем главу доле и поново покренути чине петљу. Хмм. "Коришћење непријављеног идентификатора 'ја'". То је чудно. Мислио сам да смо решени да. Исти симптом али другачији код. Да? ПУБЛИКА: [ИНАУДИБЛЕ] унутар два, морамо да [ИНАУДИБЛЕ]. Давид Ј. Малан: Тачно. Дакле, ово заправо нас води ка теми познат као обиму. Испада да је Ц, опет, стварно вас води буквално. А ако урадите нешто овако где прогласити Инт и онда му доделите неку вредност, али ви тај унутрашњост пар заграда, шта је то Ц не претпоставља да Само желим те 32 бита познате као ја да постоји у оквиру контекст тих заграда, у контексту линија 6 до 9. Тако сам се проглашава, а то је додељен вредност у ред 8, али чим се изван линија 9 испод коврџаве браце, и није више у обим, да тако кажем. С-Ц-О-П-Е. То више није у правом контексту. Дакле, сада постоји и, тако да је то као да нисмо имали ни изјавио је на све. Па шта је онда поправити за нешто овако, уколико Разлог је у томе што сам се проглашава унутар заграда, што је очигледно лоше? Овде? ПУБЛИКА: [ИНАУДИБЛЕ]. Давид Ј. Малан: Да. Дакле, можемо да га покрене напољу. Зато ме пусти да иде напред и брисање делова декларацију којом Ја навести тип, и дозволите ми да то урадим овде. Дакле, у складу 5, сада каже: "Дајте ми Инт." Позив сам га. Обратите пажњу на линији 9, ја не желим то да урадим, јер сам Већ имају 32 бита. Ја не желим да питам рачунар за различити 32 бита. Желим да користим те исте 32 бита. А сада, јер сам је декларисана у складу 5, то је још увек читљив да га користите у складу 11 и линија 12. Дакле, дозволите ми да покушам да рекомпајлирате и видети ако престане да виче цланг. направити петљу. Дакле, сада је "имплицитни декларација функције 'ГетИнт' је инвалид у Ц99 "Шта је то. Да? ПУБЛИКА: [ИНАУДИБЛЕ]. Давид Ј. Малан: Да. Дакле, сада сам заправо ја користим ГетИнт, то није нешто то само долази са Ц. То долази од ЦС50. Дакле, ово нам је потребно овде. И дозволите ми да се вратим на линији на доле овде и поново покренути направити. Ок, коначно. Сада смо решени да и други грешку. Дозволите ми да се сада води петље и види шта се дешава. "Дајте ми Инт." Ја ћу му дати 11. Ја ћу му дати -1. Ја ћу му дати фоо. Ја ћу му дати 5. И сада је то заиста ради. Али одзив променио разлогом овде. Зашто се каже ретри један од тих пута, али дајте инт остале три пута? Зашто је то понашање другачије? ПУБЛИКА: Дао је стринг. Давид Ј. Малан: Молим? ПУБЛИКА: Ви га дао низ. Давид Ј. Малан: Да. Тако смо му дали низ у овом трећем покушају, кад откуца фоо. Фоо је ниска. То очигледно није инт. А начин на који је реализовао ЦС50 ГетИнт је да смо не проверите да ли је нешто је мање од 0 или веће од 10 за тебе, јер како знамо унапред какво инт желите? Али ми минимално може да провери за вас, да ли корисник најмање упишите цео? А ако нису, вичемо корисника куцајући "ретри" на екран. Дакле, сада имамо програм који је петље. Ок. Сада, која од њих је некако боље конструкт? Дакле, ово је место где ствари почињу да се мало наопако, Чињеница да морате да се сетите да прогласи променљиву овде ако желите да га користите у неке витичасте заграде и споља. Али, чак и ако то изгледа мало криптичан на први поглед, само једном, сетите једноставну логику. Да би користили ништа Ц, без обзира да ли је то функција или то је променљива, треба да га укључи ако је функција у неком библиотеци, или треба да га прогласи. Али сада треба да буде екстра свесни чињенице да ви га проглашава у правом обиму. Нећеш га стављате превише чврсто унутар заграда. Дакле, дозволите ми заиста врати. Ако се вратимо на наше пример од раније, а ја идем назад на инт, инт и = 0; и <10; и + +, а ја до принтф звезде, као што је овај, а затим затворите заграда, а сада принтф и сада је - по истој логици, шта ће се десити кад покуша да саставити овај програм? ПУБЛИКА: Неважећи идентификатор. Давид Ј. Малан: Дакле, то је један неважећи идентификатор необјављени идентификатор. Сада, разлог је мало другачија. Ту је очигледно нема витичасте заграде овде, али исто идеја, иста прича важи обима. Ако сте проглашен променљиву као да сам унутар за петље, чак и ако нисте експлицитно написано коврџава протеза, мисле о њима ментално јер још увек био ту, у коме Случај сам важи само унутар за петљу. То није важећа када дођете до следеће линије, која је у овај случај је сада 10. Дакле, само неколико питања обима и слично. Добро, било каква питања? У реду, тако да је ово нека врста тривијалног мало програма, штампање само мале звезде. Али, хајде да видимо да ли се сећате овде ову песму. Ово је невероватно досадних песма деца ће певати на школски аутобус и слично. Али оно што је лепо о томе је да има ову цицлицити, при чему је "99 боца пива на зиду, 99 флаша пива. Узми један доле, прође га око, 98 боца пива на зид "А онда песма понавља 97, затим 96, па. 95, затим 94, па све доле до 0, ако сте заиста схватио далеко у аутобусу. Дакле, ово је добар програм да некако спроведу, јер је мој Боже, ако би имплементирати ово са неколико линија кода, можете испљунути цео текст на ово песма веома брзо. Али успут, можемо почети да сада задиркују осим неких ових основних петље конструката, а сада уведе функција које смо сами пишете, вратите вредности да смо се прође. Али прво, зашто не бисмо напред и да наш пет минута бреак овде? А када се вратимо, ми ћемо певати ову песму. У реду, тако да смо се вратили. А када кажем сада ћемо певати ову песму, мислим програмски, а не вербално. Дакле, овде имамо беер1.ц, која је једна имплементација овог Посебно песма. И само да буде јасно, за оне који нису упознати са оним ово изгледа, пусти ме само напред и да беер1, Ентер. Сада пусти ме покренути беер1, а оно што ћемо видети - колико боца пива ће тамо бити? Ја ћу уписати 99, као што каже песма. Ентер. А сада, ако смо се кретали кроз - Упс - ако смо се кретали кроз све ово, ми ћемо видети да ово је заиста пева целу песму. Чекај мало. Моја трака је мало забрљао. Хајде да користимо већи прозор. Дакле беер1, 99, тамо идемо. Дакле, овде имамо читаву песму, пева много брже од Рачунар него што би то било код нас. Тако приметити, међутим, овде цикличности. Она каже 99, а затим 99, затим "узми један доле, то проћи около, "онда 98. И сада понавља изнова и изнова. Дакле, ово је заправо савршена прилика за неком врстом петље конструкт. Приметите да сам врста резања овде угао. Обратите пажњу да сам рекао "98 флаша пива на зиду, 97 флаша пива на зиду ", и то је тако да када дођемо до једног боца пива, немам да брине о енглеске граматике. Али ми такође може да реши ово са мало, ако стање, можда. Ако је овај број једнина, само напред и рећи "боцу", иначе, ако је плурално, кажу "боце". Али за сада, потпуно сам сам сечење тај угао. Дакле, хајде да видимо шта ми имамо овде. Тако смо добили неке коментаре на врху. Ја укључујући ове две библиотеке, као и најчешће смо ми били. И сада пусти ме дођите до првог Стварне линије кода. Линија 17 почиње главни. Линија 21 и 20 има колико боца пива ће тамо бити? И онда ја зовем ГетИнт. И сада имам мало неког разум провере. Дакле, ово је конвенција да смо сада ћемо почети да усвајање ригорозније провере уноса корисника. Понекад једноставно не желе да их подстакне поново и опет и опет. Уколико корисник шрафови се и не сарађује, у реду. Затворите и једноставно не баве њима. И то је оно што ја радим овде. Ако је н мање од 1, ја ћу само да вичеш на корисника, "Жао ми је, то нема никаквог смисла." А онда ћу да произвољно врати 1. Дакле, опет, ово је само конвенција за навикавање. За сада, узми на вери. Међутим, до сада, увек смо били враћа 0, јер је Рекли смо враћа 0 означава шта? ПУБЛИКА: Успех. Давид Ј. Малан: Успех, то је све. Дакле, сада смо коначно почињемо да размишљамо о нон-успеси - Другим речима, угао случајевима, грешка условима - сада имам неограничен снабдевање, или најмање четири милијарде могуће ствари које могу да крену лоше у мојим програмима. И могу почети додељујући им појединачне бројеве. Сада, углавном довољно да се само врате нешто друго од 0. Дакле, ми ћемо се једноставно врате 1 за сада. Али разлог за повратак 1 је да чим се вратите 1, погоди шта се дешава са остатком програма? Она престаје. То је то. Дакле, чињеница да сам враћам 1 је ефикасно кратак спој извршење овог програма, тако да Ништа испод линије 27 ће наставити извршење. Чим главне повратка, то је то. У реду, па ако корисник не сарађују и да стигнемо до линије 30 јер откуцан на легитиман броја, овде је мој Спровођење ове песме. Тако сам први пут одштампате нови ред карактер, само за естетика. Сада имам за петљу. И приметио сам да радим ствари на мало другачијег правца. Не морам да радим мање од, не морам да радим + +. Ја уместо да кажем покрене А и променљиву, подесите га једнака н, број корисника откуцан, онда урадите следеће, тако да док сам је већи од 0, онда сам - када завршите једну итерацију ове петље. Тако да можемо да рачунамо на доле преко петље за као добро. Дакле, ово је прилично недеље сада једна ствар, са принтф. Дакле принт "% д флаша пива на зиду." Штампа "% д флаша пива. "" Узми један доле, пролазимо га око. "Штампа "% Д флаша пива на зиду." Дакле, то је још увек% д, али приметити да аргумент принтф се мења. После зареза, ја имам, јер желим да кажем 99. После овог зареза, ја имам, јер желим да кажем 99. После овог зареза, ја имам - 1, јер желим да кажем 98 у ова прва итерација, и тако даље. А сада овде доле, ја имам неку глупу малу примедбу. А онда линија 42, враћам 0 по обичају, означавајући да све је у реду. Па шта ако сам гоофед? Шта може честа грешка бити овде? Па, шта ако сам случајно рекао добро, ја не желим да рачунају до 0, желим 0 флаша пива на зиду? Зато кажем, ја је већи или једнак 0. Шта ће бити симптом да сам сада видим да ли компајлирате беер1 и покрените га? ПУБЛИКА: Негативно. Давид Ј. Малан: Да, то ће ићи негативан. Ово је офф-по-једна грешка, невероватно честа грешка направити. Идемо у ствари вратимо на терминалу и да га овде, па можемо видети више у исто време. Ентер, 99 флаша пива. Близу, али смо икада отишао толико мало предалеко. Певали смо песму предалеко доле, тако да смо сада хит негативан број. Тако да не функционише. У реду, тако да лако можемо поправити да враћајући се тако је некад било. Али шта су неки могућности сада побољшање? Па, дозволите ми да отвори беер2.ц и дођите овамо и да погледај ову верзију. Шта је прва ствар која искаче на вас као другачији у овој верзији овде? ПУБЛИКА: [ИНАУДИБЛЕ]. Давид Ј. Малан: Да, па нема више ја, јер је пало на ми знаш шта, питам корисника за н, а онда сам подешавање и једнак н, а онда сам ја мења, али ја никада нисам додиривање н поново. Дакле, шта дођавола била поента вас доделе још 32 бита сам звао само тако да ја могу да имам другачији променљиву? Дакле, у овом случају, ја сам некако схватио да непотребно дизајн карактеристика. А сада ћу рећи, док је н веће од 0, иди напред и штампање исту песму, положен н до иф као Други аргумент, и н - 1, као други аргумент овде доле. А онда на свакој итерацији ове петље, само напред и само Смањење н сама. Сада, функционално, овај програм ће бити идентични. Ако укуцамо у 99, н почиње у 99. Ја опадање, умањење, умањење, умањење. Идем да скроз доле на "Једна боца пива на зид, један боца пива. Узми један доле, проследи је около. 0 флаша пива на зиду "на крају, јер сам урадио. добили услов тачан. То је већи од 0. Нисам правио ову грешку. Дакле, што је боље, верзија један или два верзију? Чуо сам гомилу мрмљање за двоје. Зашто два? Шта је то? ПУБЛИКА: [ИНАУДИБЛЕ]. Давид Ј. Малан: Ох, у реду. Дакле, то неће ићи испод 0, али запамтите, у верзији један, оригинална верзија тачна није ишао испод 0 било. Дакле, запамтите да је ово исправна верзија. Па нека је барем упоредите два исправне верзије. Шта је аргумент у корист верзије два бића, ммм, боље? Да? ПУБЛИКА: Она користи мање простора. Давид Ј. Малан: Ок, тако да користи мање простора, зар не? Док верзија које користе 32 бита за Н, а затим још 32 бита јер ја. Верзија две користи само 32 бита за н, тако да Чини се да је плус. Друге мисли? Да ли неко жели да се расправљам у корист једног? Да? ПУБЛИКА: морате да користите додатну линију кода за н -. Давид Ј. Малан: Ок, наравно. Тако да је то фер. Дакле, ово само, барем мени - Мислим, ово стварно изгледа мало компликованије, чињеница да Ја не могу да некако ухвати све моје логике у једном лепа линија, за петљу, као за петљу могу. Ево, ја сам некако да напада на овај н - на крају петље, јер је логички неопходно. Али некако ми трља на погрешан начин, само зато што Чини одвојено од логике овде, иако, опет, то је неопходно. Друге мисли? Да? ПУБЛИКА: [ИНАУДИБЛЕ]. Давид Ј. Малан: Да. Па шта ако уместо тога, на крају песме, желео је да штампати поново име песме? Као "Хвала за играње 99 флаша пива", или тако нешто блесаво тако? Али поента је, хтели сте приступ оригиналном вредности. Чињеница да сте мутирали или мењати н на сваком итерација и стога су уништили своју првобитну вредност значи да не само да то на крају. Сада, вероватно, ми очигледно не желе да раде да је у овом програму. Па кога је брига? Али то је веома важна ствар. И да будем искрен, заиста нема никог Прави одговор овде. Обоје су подједнако исправна. Може сам уверен ни начин. Ја ћу рећи да је, у принципу, то је добар принцип ако питао корисника за неке вредности и складишти у променљива као н, само некако у принципу, то је вероватно добра да да око. И подаци које желите да мутира опет и опет, дајте себи копију тог променљиве, само тако да имају приступ оригинала. Ви трошите још 32 бита, али реалност је ово рачунар, као, два гигабајта РАМ меморије ових дана, а ми куибблинг преко 32 бита? Заиста није тако страшно. А чак и на овом уређају овде, са пола свирку или гигабајт РАМ меморије, 32-битни у односу 64 бита, није тако страшно. Свакако данас, то ће бити далеко преплављени величини самог програма, који ће бити неколико стотина килобајта, ако не и неколико мегабајта, ових дана. Дакле, разумне бриге, нико прави одговор. Али барем они су мисли које треба да почне да се пролазе кроз ваш ум? Јер у псет 0, иако смо само стварно оцекује исправност, или барем дисцлаиминг разне бубе да можда сте наишли, као што смо напред, дизајн је Биће још један кључни аспект, како писања кода и наш евалуацију код. И тако бар мисли да дају овакве ствари. И баш зато што нешто ради, не значи да је то добро, не значи да је добро дизајниран. И то је једна од ствари наставне момци и Проблем сетови ће нам помоћи да задиркује део током времена. Па, о томе шта, рецимо, овде ову верзију? Пусти ме да урадим нешто мало секси овде у овом тренутку. Дозволите ми прво да се отарасим овога. А сада хајде да решите овај проблем граматичку. Дакле, у овој верзији, желим да поправи граматику, тако да, него само реци загради а, као "боци" или "боце" - Ја не желим да смање тај угао - Такође желим да се динамички одштампате реч "боца" или "боца", чиме је коришћење чуваре Ове% с данас. Зато морам да условно проверите шта је вредност ја. И ако је 1, желим да кажем "боцу", а ако је нешто друго, желим да кажем "боце". Дакле, хајде да покушамо да се то уради. Дакле, ако сам == 1, онда пусти ме напред и прогласи - Треба низ, па пусти мене да ниски с1, јер је то Први гудачки ми је стало сада. Ја ћу да кажем "боцу". А онда, хајде да видимо, гудачки с2 - и ја ћу објаснити где идем у тренутку - "Боце". Тако се сећате да је у овој песми, морамо бити у стању потенцијално штампање ствари, две различите речи. Дакле, ако се осврнемо уназад овде, приметили да када дођемо до овај пример овде ", две флаше пива на зиду, Две боце пива, узети један доле, то прође око ", ја желим ово четврта линија за сада да кажем "једну флашу пива на зид "Тако ми треба да одлучи, да ли. желим да кажем" боца "или "Боца"? Зато ћу да произвољно рећи, у реду, Идем сада да прогласи променљиву зове С1, стринг један, који ће добити прикључен овде и овде, јер те речи су увек идентични, само због природа песме. И ја ћу да позовем с2 год реч желим да на крају се појављују овде. Сада, буквално, 99 пута од 100, то ће бити иста у оба ова случаја, јер 3 је у множини, 2 је множини, 4 је множина. Али у овом случају ћошку, где стигнемо до 2 и онда 1 или чак и онда 1 0, морам ову логику. Зато морам да проведем неко време у мом коду добијања тог права. Дакле, ако то урадим, ако сам == 1, а затим подесите с1 једнаке "боци" и с2 једнако "боца", јер то ће бити за 1 бочица, а то ће бити за 0 боце. А ово овде, шта то представља? Само да буде јасно. Ово је само коментар. Дакле, чињеница да можете имати једно линије коментаре вас значи може да коментарише свој код као што је ово, али други заједнички парадигма је, такође, да ако имате супер кратку фразу која желите да ставите себе и то је само још читљив стави је на самом крају линије кода, можете Апсолутно овако нешто. Па шта сад ако урадим ово? Иф И није једнак 1. Дакле банг једнако - Знак узвика је познат као "праска". Дакле, прасак = 1. Дакле, ако сам није једнак 1, шта сам, уместо да радимо? Па, прва реч желим да будем оно? Тако ниска 1 треба да буде "боце" за множину боце, и онда ће то бити множине "боце", као и, за сада. И ми ћемо видети да ли ово стварно постаје нам то где желимо да идемо. Па сад, ако сам доле помицати овде приметити да сам прикључивање Не само ја, већ С1. Ја прикључивање и и С1. А онда овде доле, ја сам минус 1, што је исто као и раније, али с2. Другим речима, желим енглеску реч за промену на на овом логиком. Сада већ има неких проблема у овом коду. Шта је већ избио на вратима овде? Да? ПУБЛИКА: [ИНАУДИБЛЕ]. Давид Ј. Малан: Тачно. Па већ сам прекршио лекцију обима. Тако сам прогласио С1 и С2, али сам то урадио унутар витичасте заграде, што значи да, овај код ће радити до до линије 42, али чим сам ударио линију 43, погодите шта не више не постоји? Па, погодите шта је више није у домету - ни С1 или С2. Дакле, морамо да поправимо ово. Дакле, дозволите ми да избришете декларације. А ја ћу оставити имена променљивих и избришете ово овде и избришете ово овде. А у оно линије треба заиста изјављујем те ствари? ПУБЛИКА: [ИНАУДИБЛЕ]. Давид Ј. Малан: Да, тако је вероватно управо овде, 33-исх. Дакле, гудачке с1, а затим стринг с2. И испоставило се, могу ја то. Ако сте проглашења две променљиве истог типа, ви у ствари можете само користити зарез и то у Ц. Сви У реду, тако да сада имам две променљиве - С1 и С2. Ја сам им додели вредности у овим услове овде, или овде. А онда сам их користите доле. Колико добро је то сада иде на посао? Па, то је још увек мало луд, али нека је бар видимо колико смо стечен. Зато ме пусти да иде напред и да беер3. Да ли је ово беер3? Да, ово је беер3. И сада пусти ме напред и покрените беер3. 399 99. Ми смо вероватно да прескочите већину од њих. И овде, погледај то. "Једна боца пива на зиду, један боца пива, узети један доле, то прође око, 0 флаша пива на зиду. " Али ја вам скрећем пажњу на само половина решења. Врста зезнуо овде. Дакле, чини се да су случајеви јављају кутак кад сам једнако шта две вредности? ПУБЛИКА: 2, 1. Давид Ј. Малан: 2 и 1. То није 1, а не 1. То је заиста само ова последња два строфе ове песме. Па шта ја желим, уместо да урадим? Зато мислим да сам ухватио случај где је ако сам == до 1, тада прва реч је "боца", али друга реч је "боце". Али овде, желим да променим то буде == 2. А ако је то случај, шта желим Прва реч да буде? ПУБЛИКА: "Боце". Давид Ј. Малан: "Боце", па за две боце. И онда та реч овде треба да буде - ПУБЛИКА: "Боца". Давид Ј. Малан: "Боца", једнини. У реду, хајде да умањите, вратите овамо, поново покрените маке, репризу беер3, тип 99 поново. Ок, "Сегментација грешка (језгро бацили)." Шта сам урадио погрешно? ПУБЛИКА: Ви немате вредност [ИНАУДИБЛЕ]. Давид Ј. Малан: Ах, одлично тачка. Добро, па шта није у реду овде? Дакле сегментације кривицом, а ми заправо идемо да видимо ово доста пута у будућности, намерно. Али за сада, шта то заправо значи? Сегментација грешка готово увек значи да морате некако покушали да приступите меморије, РАМ на вашем рачунару, да не поседујете, да нисте стварно питао оперативни систем за. Дакле, у овом случају, приметио шта сам урадио, што је мана у мојој логици. Доделили сам С1 и С2 вредност ако сам једнак 1. Такође сам урадио да сам једнако 2. Али ја то нисам урадио у бесконачном броју других могућности - нарочито, 3 или 4 или тачка, тачка, тачка, 99. Дакле, једна исправка за ово може да буде само хајде имају друго стање. И дозволите ми да одем овде и рећи с1 једнако - Шта би требало да буде овде? ПУБЛИКА: [ИНАУДИБЛЕ]. Давид Ј. Малан: "Боце", јер је у заједничком предмету, то је само иста ствар. Дакле, једнако цитат, завршити цитат, "боце". Дакле, за множини боце, а онда се овде, за множину боце. Ок, сада да се вратимо на мој прозор терминала, рекомпајлирање, поново је покрените. 99. Уф. И хајде да урадимо брзо разум чек. Технички, ми бисмо желели да прочитате све ово да се уверите они су тачно, али хајде да погледамо Цене познате кривци. 3 боце, 2 боце, 2 боце, 1 боца, 1 боца, 0 боца. Изгледа да смо барем поправио за сада. Али цака је у томе што бог страшно неред је ово само да реши глупи један лик граматичка детаљ. Значи, постоји нека врста разлога да смањи тај угао раније, јер је једноставно потпуно досадне морати да напише оволико кода. Али испоставило се да постоји нешто више елегантни начини изражавајући потпуно исту ствар. И ми можемо урадити на следећи начин. Дозволите ми да ово оставити на екрану за тренутак и уведе нешто познат као тернарном оператера. То је нека врста једне броду који је управо требало да се наше живи мало више секси, као што је обећано. И ја ћу да урадим на следећи начин. Дај ми жицу под називом С1, и пусти ме доделити на следећи начин. (И == 1)? "Боца", иначе "боце". Стринг с2 добија (и == 2)? "Боца", иначе "боце". Па шта је онда разлика овде? Ове две линије кода, тврдим, могу замените целу ову збрку. Тако ја то зовем неред, само зато што је некако трља мене погрешан начин на који је то толико линија кода. Није у реду. Није лош дизајн. Као, то је савршено тачно и савршено добро. Али кодирање добија заморно ако морате да се изразите, тако проклетство конкретно опет и опет и опет са једноставним Сценарио овако. Дакле, Ц има неке пречице, овако. Дакле, ово је у суштини каже да прогласи ниску под називом С1 и доделите га ни ова вредност, или је ова вредност ако је ја == - Жао ми је, морам да кажем ово јасније. Прогласи променљивих с1, доделите јој ову вредност ако је то истина. У супротном, то доделите ову вредност. Другим речима, ово је нека од једне линије начин рекавши да друго радим задатак на путу. Дакле, ако и је 1, онда само напред и ово називају "боцу". И онда је ово друго, то зову "боце". У међувремену, с2, Друга реч која треба да дефинише, ако сам једнако 2, ми ћемо подесите с2 на "боце". Иначе, подесите га на "боце". И шта то значи да је сада ја могу да идем кроз ово и избрисати све те линије кода. А када кажем, помало смешно, да је ово сада секси, то је секси у врсти стилској смислу. Чињеница да функционално, овај код заправо ће уради исту ствар. И чак иако можда изгледа мало криптичан на први поглед, јер ми не смо раније видели овај конструкт, ја бих тврде да је на крају то ће бити много више читљив и тако много лакше да се ми људи некако Разумем, јер сада можете само да прочитате Код све на једној линији. То је још увек сличан духу да ако, где је то стање и онда је то оно што је унутра, ако и ово је оно што је унутар другог. Али можемо да урадимо ово само много више елегантно. А ако се вратимо на моју терминала, што брише све тих линија и заменио их са само та два, рекомпајлирање, поново покрените боца пива са 99, обавештење да мој граматика је, у ствари, још увек тачно. Дакле, опет, нешто за почетак. 2 флаше пива, 1 боца пива. Изгледа у реду. Да. Дакле, тамо имамо много више сажето решење. Дакле, ово је, такође, као што сте добили удобније са Ц, не нужно са првом псет или чак друге, али схвате да ови конструкти нам омогућити да радимо ствари икада више елегантно. Сада идемо урадимо једну другу ствар. Дозволите ми да иде напред и отворити ретурн1.ц. Сада ћемо почети да реши још један проблем на начин који омогућава нам да напише више софистициран кода. Дакле, овде је једноставан мали програм чија је сврха у животу је за повећање вредности. И заправо, хајде да се вратимо корак. Пусти ме да урадим ово ручно. Пусти ме да урадим укључују и маин (воид). И дозволите ми да зовем ову инцремент.ц. А шта желим да урадим? Идем да иде напред и да кажем нешто као - ћемо позвати бројеве исти - инт к. Дакле, инт добија 2; иф к је% д, нова линија, к. Дакле, куцам брзо, али некако познато ствари сада. Онда ћу да урадим к + +. Онда ћу поново да одштампате исту реченицу. А онда ћу да врати 0 само да напусти програм. У реду, тако да је ово програм који корацима број. Оно прво ће да се покрене несто до 2, а онда је ће то инкрементирање и одштампате га поново. Дакле, хајде да покренете прираста, невероватно једноставан програм. Али претпоставимо сада да ја желим да коцка вредност, тако да не нешто помало произвољно. И ја стварно желим да радим к добија коцку од тога. Тако да сам могао да користи оно што се зове Пов функцију, али ја не знам знам где је још увек. Зато ћу да урадим то на старомодан начин. к пута ово једнако к пута к пута к. Тако сам цубинг вредност, множењем га себи поново и опет и опет, тако да смо добили моћ од 3 у овом случају. Дакле, сада су бројеви требало штампа треба да буде, као што ћемо видети овде - да пораст, тако да је заправо стварно не повећавати више, али ми ћемо сами напусте име - 2, а затим 8. Сада имамо почетке прилика за пречишћавање Овде, где је овај цубинг ствар множењем броја по себи према себи сама по себи осећа као ово може да буде само корисно је имати у функцији, баш као неко одлучио година - знате, некако корисно ако један од нас седне и пише иф тако да остатак света га користе, зашто не седнемо и написати функцију која се зове коцка да ли ово цубинг за нас, тако да не морају ручно имплементира појам цубинг вредности овде? Тако једноставан пример, али идемо напред и користите је као прилика да напише своју функцију. До сада, само смо користили главни, и ми смо користили друге функције људи, али нисмо написао наше. Дакле, идемо. Идем да иде напред и написати функцију која се зове коцке. И ја ћу да га преузму улаз. Дакле, њен улаз ће бити цео број. И шта ће то урадити? То ће да се изјасне инт излаз = пута улаз улаз пута улаз. А онда ће да се врати тај излаз. И онда морам да будем специфичан сада. Ова функција ће вратити Инт. Дакле, овде је онда како ћете написати своје функције. Морате прво да одлучи шта је име вашег Функција ће бити. И уопште, нешто објашњењима је добар, па ћу зову коцке. Онда морате да одредите шта ће да се врати, што је његов излаз ће бити. А ми још увек немамо много опција које. Инт, цхар, флоат, инт, ниска. За сада, ја ћу да се држи са инт, јер ја то желим да врати цео. Онда морате да одредите шта њени улаза, ако их има, јесу. А ако се коцка аргумент, потребно нешто између заграде, морате да тај аргумент име, тако да можете га назвати нешто што сте примену или писмено ова функција, и морате да га дају врсту, која је у то Случај ће бити инт. Дакле укратко, коцка је функција која траје цео као улаз и враћа целих као излаз. Дакле, шта то раде са том улазу? Па, у реду 14, изјављујем променљиву зове излаз, а ја доделите јој вредност, а улаз пута улаз уноса. А онда сам се врати излаз. Па како да користим ово онда? Шта да променим ове истакнуте знакове на линији 7 се, мислиш? ПУБЛИКА: [ИНАУДИБЛЕ]. Давид Ј. Малан: Да, тако коцка к. Дакле, к је променљива, што значи да има неку вредност. Срећом, то је типа интегер. И зато је к инт, то значи да могу да се пренесу у коцки. И иако сам превасходног вредност к са вредношћу од коцке к, као што је био случај до сада, сваки пут када имају знак једнакости и линију кода, ствари на право добија погубљени и потом бива додељен вредност на левој страни. Дакле, редослед операција је као да се надамо. Тако то функционише? Па, пусти ме да одем доле. Дозволите ми да отворим свој прозор терминала. Дозволите ми да правимо прираста, Ентер. "Имплицитно декларација 'коцке' функција је инвалид у Ц99 "Као страни. Ц99 односи на језику Ц као што је био дефинисано у 1999, која је била ажурирање преко верзији из 1989, што је ажурирање преко оригинала. Тако да је све то значи. Дакле, шта то значи да "имплицитан декларација Функција 'коцке' је неважећа "То је овде. То је тамо у линији 12. ПУБЛИКА: [ИНАУДИБЛЕ]. Давид Ј. Малан: Шта је то? ПУБЛИКА: Није раније. Давид Ј. Малан: То није пре. Дакле, ово је ствар. Ц је мало глупо, или Ц компајлери су некако глупо. Они су само стварно оно што кажете да ураде. И они, посебно, само читам горњи код на дно, лева на десно. Дакле, ако компајлер, кланг, чита своју шифру, линија 1, то схвати како да то урадите. Ох, долази главни. Ок, пусти ме напред и прогласи променљиве к. Дозволите ми да одштампате нешто. Линија 7, шта дођавола коцка? То није проглашен стдио.х. То не долази са Ц. Ја немам појма шта да радим. И тако цланг само кауције и затвара са том поруком о грешци. Дакле, можемо поправити у неколико начина. Можемо научити кланг оно коцка је за само померањем где декларација је. Тако да сам сече и залепио га на врху главни. Сада схватамо да само зато што више није главни прво, то је још извршавају по дефаулту. Главни је главни. То је стандардна функција име. Није битно где се она налази у фајлу. Али барем сада кланг је видео коцку пре него што сам га користите. Па хајде да видимо да ли је кланг срећнији сада. Нека осцилацију, то није компајлирати овај пут. Дозволите ми да покренете прираста. И заиста, чини се да се ради. Сада, можете доћи до сценарија крају где није изводљиво да се стави сваку функцију изнад сваке друге функције. Ти ћеш се заглави у овој бескрајној петљи у стварности, где је овај момак жели да буде овде, али ово момак треба да буду тамо. Тако да не ради увек. Дакле срећом, Ц има више елегантно решење. Ја ћу да ставим ово назад где је био, само зато што сам преферирају, као ствар принципа, да је главни увек бити на врху, јер то је само лепо да се види шта овај програм ради по дефаулту. А шта ћу да радим овде се изјасни како се зове прототип. Ја ћу поново изјављујем своју функцију коцке буквално копирање и лепљење. Заправо, то није буквално. Дакле, буквално копирање и лепљење линију 15 изнад линије 6. Није битно шта је линија ово заврши он. То се дешава да се на линији 4. Али не мора да буде пре главни. Али приметити разлику. Линија 4 завршава са зарезом, што значи хеј, Цланг, узимам реч за то да постоји функција позвао коцку да заузме инт и враћа инт. Али ја нећу да ти кажем шта је још. Само знам да обећам да ћу вам рећи на крају. И заиста, сада је у реду да је ово доле. Дакле, ово је генерално боље, јер онда на врху датотека, можете само да брзо изговорити, брзо ватре, једна линија сваки, шта имена ваших функција, шта њихова улаза, шта су њихови резултати су. И да буде јасно, улаз обично значи аргумент или параметар, синоним. Излаз значи повратну вредност, што га чини руку назад до мене. Дакле, у овом случају овде, коцка је проглашено на врху, али дефинисан, иначе познат као имплементирати, на дну. Дакле, сада идемо назад и поново покренути ово. Дакле, сада пусти ме напред и поново покрените маке, поново покрените прираштај. И сада се чини да се ради баш добро. Дакле, сада можемо ићи напред и факторишу нешто налик пиво пример у овом четвртом верзијом. Дакле, дозволите ми помицати овде доле. И приметите да сам некако узео ову лекцију срцу управо сада. Чињеница да сам певају исту строфу поново опет и опет, иста хор линија у песми, осетио Волим зашто не бих фактор који се у функцији? И заиста, ово би требало да буде један од мотива. Поред чињенице да би неко други у свету желе да користите функцију коцке - то је добар разлог да се фактор нешто и напишите сопствени цустом функција - ако постоји комад кода у вашем програму који само чини концептуалном смислу, да ли некако да га дам Име - као у овом случају, хор - онда можете да напишете да је сличан као посебан функцију. Ви не морате да пишете све у главни ако је само осећа чистији да издвоје и дајте му име. Дакле, у овом случају овде, приметићете да имам коментар на врху ова функција да само пева о наведени број боца. Приметимо да не морам да зовем ове ствари улазни и излазни. У ствари, овај пут сам позвао мог улаза б за боцу. И приметио овде, празнина сугерише шта? Тај хор - ПУБЛИКА: Не да га врати. Давид Ј. Малан: Не врати вредност. И заиста, функције не морају да се врате вредности. Они само могу да ураде нешто. Они могу да имају оно што се зове нежељени ефекти, који у овом случај је само гомила штампање на екрану. Дакле, приметите да овај код овде, само сам буквално украо од претходни пример. Једина разлика је уместо ја користим као моје променљива, ја сам сада користи као мој б променљива. Дакле, имам б овде доле, ја имам б овде доле, ја имам б минус 1 доле. Али код потпуно исти. Али само да ти покажем како можемо да користимо ово, пусти ме да одем Само напред и заиста променити то буде за петљу. фор (инт и = н и> н и -). Тако сам украо то од нашег претходног примера. Раније, то је у реду 37 да бих почео певајући ове досадне песму. Али уместо тога, ја ћу сада да позове хору ја. Готово. Дакле, сада у сваком итерацији ове петље, ја зовем овај други функција, хор, што ми се десило да пишем. Није написао неко други пре много година. Али хор, у међувремену, користи иф за штампање од ове четири линије. Али чињеница да зовем рефрен поново и поново у петља значи да ћу добити, на самом крају, Тачан иста песма као што сам до сада. Дакле укратко, сад, ако се осврнем на мој код, иако функционално ово је еквивалентно, приметити да је почиње да се још више читљив. Ја не знам тачно како се ГетИнт се спроводи. Искрено, не знам како се спроводи хор. Али то није важно за мене. Ја не занима, јер сада могу некако, као човек, прочитајте ово од врха до дна. И зато што се функције именован у складу са оним што су они не, мој код је све читљив. И као што наши програми добијају много сложенија - до краја семестра, можете ћеш писати стотине линија кода на језицима као што су ПХП и ЈаваСцрипт и слично - видећете да је то много лакше него да пратите ста сте урадили. А када почнете сарадњу са пријатељима или партнери или колеге, моћи ћете да напишете много више масивне програма по почињу да врше ове основне градивни блокови. Дакле, са тим рекао, зашто не бисмо назвати дан? А ми ћемо вас видети у среду. [Апплаусе]