ROB: Alle reg. Welkom by die eerste artikel. Ek is Rob. JOSEPH: Ek is Josef. ROB: So ons sal reg in 'n duik Eerste ding om te praat oor is die toestel. So hopelik die meeste van julle het reeds afgelaai. Maar jy kan sien die instruksies by cs50.net/appliance. O God, nou is ek selfbewus. Ek hoor dit nog steeds. Josef Sjoe, dit klink soos dit is war. ROB: So 'n paar mense is wat probleme met dit, so moenie wag totdat die laaste minuut van die probleem gestel probeer om die toestel op te los en om uit te vind dat dit nie werk nie. Josef, en as iets nie werk nie en jy hulp nodig het, kan jy gaan na cs50.net/discussion waar ons 'n forum waar jy jou vrae kan plaas. En ons sal kry om hulle uiteindelik. ROB: Alle reg. So dit is wat die toestel lyk. Weereens, dit is net 'n heeltemal aparte bedryfstelsel loop binne watter bedryfstelsel jy loop op jou laptop. En die belangrikste dinge wat jy word met behulp is gedit. So hopelik reeds 'n bekende terrein. Die terminale. En jy kan ook hardloop Chrome binne die toestel. Daar is 'n paar van die mense wat berig het die internet nie in die toestel werk. En sommige van hulle het net aanvaar dat daar is nie veronderstel om te wees internet in die toestel. Maar ja, daar is veronderstel internet te wees. Ek sal sê dit nou, maar dit beteken nie werklik beteken nie. As die internet nie werk nie, dit is wat jy is geneig om te moet hardloop dit op te los. As jy met internet kwessies, dit nie doen nie onthou dit, post dit op Bespreek, en ons sal sê, hardloop nie. Maar die internet moet werk. Dus is die enigste ander ding - ja, niks anders is regtig relevant. Maar ek wou net om uit te wys dat - sien in hierdie reg onder. So elkeen van jou toestel kan 'n IP-adres. En later in die semester, is hierdie IP adres sal meer betrokke raak wanneer jy werk op die web p-stel, want jy sal in staat wees om die om toegang te verkry webwerf jy werk op uit jou plaaslike Chrome deur die gebruik van hierdie IP-adres. Maar wat ek graag die IP-adres te gebruik vir - en jy hoef nie dit te doen, het ek wil net dit uit te wys - is hier. So, dit is 'n terminale venster op my Mac, dit is nie in die Toestel nie. En jy kan kyk wat hierdie bevel nie. Maar ek gaan SSH direk om my toestel. Ek weet nie wat die IP is. Josef 168 - 168.224.1.0. ROB: So een keer ek gedoen Met hierdie, inteken Nou, basies, dit is identies aan 'n terminale venster binne-in my toestel. So ek pretty much nooit gewerk binne die toestel self. Ek het net altyd dit loop in die agtergrond tot die minimum beperk en SSHed in dit. Die probleem met hierdie is dat jy nie gaan staat te wees om gedit te maklik gebruik direk uit hierdie. Maar as jy wil 'n ware koel te wees hacker, dan moet jy gebruik om 'n command line teks editor in elk geval. So Vim en Emacs en Nano, al hierdie verskillende alternatiewe. Nano is geneig om die maklikste om te wees. En ek dink dit het geen accentuering. O, nee, dit heeltemal nie. So jy kan gebruik Nano, want dat 'n mens is redelik maklik. Jy sien al hierdie gebooie aan die onderkant. Hierdie klein wortel simbool. As jy nog nie voorheen gesien het, sal jy waarskynlik sien dat dit 'n baie nou. Dit beteken gewoonlik die beheer wortel, soos die onderste linkerkant van jou sleutelbord beheer karakter. So hier is dit vir my hier - O, dit is nie afgesny as ek zoom in So beheer, X is hoe Ek gaan om te stop. En dit sê ek kan getref Y vir Ja, vir die besparing, N vir No So dit is Nano. Vim en Emacs geneig effens meer te wees ingewikkeld en oorweldigend. Maar jy kan kry gebruik om dit, en dan sal jy mal daaroor. So dit is dit. Josef Geen behoefte om dit te doen. ROB: Ja. Jy is vry gedit te gebruik vir die res van die semester. So 'n toestel-verwante vrae? Of het jy enige gedagtes oor wat anders moet oor gepraat word die toestel? Ja. Spreker 1: Wanneer jy in jou SSHed ding, was die wagwoord Crimson? ROB: Ja. Die wagwoord vir pretty much alles in die toestel gaan wees Crimson. Spreker 2: installeer soos 'n ware IDE op die toestel, sal dit werk? ROB: Ek dink Eclipse het wel 'n Fedora weergawe, in welke geval, ja, jy kan dit doen. Dit is waarskynlik nie regtig die moeite werd. Spreker 2: OK. So is dit waarskynlik makliker as ek wou gebruik Eclipse, net gebruik maak van die inheemse en dan oplaai na - ROB: O, dit is waarskynlik ook makliker. Maar jy kan dit werk binne die toestel. Josef, en vir die kamera, is die vraag was, kan jy 'n ander installeer IDE binnekant van die toestel? ROB: Eclipse, synde 'n voorbeeld van 'n IDE. Enige ander toestel vrae? Alle regte. So sal ons nou oor na command line koppelvlak-verwante dinge, so CLI. En weer, ek is net gaan om te werk in hier, want dit is identies aan werk binne 'n terminaal venster binne die toestel. Hoe is dit font soek? Is dat 'n groot genoeg? Alle regte. So is daar 'n klomp opdragte wat Jy moet kry mooi gebruik te regdeur die semester. Die groot twee vir die opgevolg is LS, lys die lêers in hierdie gids; en CD, so verander die gids. So ek kan verander na die lessenaar en dan 'n baie algemene patroon is CD aan 'n gids en onmiddellik LS Wat is in die gids. Mense het ook soms nie besef nie dat Tab voltooiing is 'n ding. Dus, net soos CD, vh, en dan het ek getref Tab. Ek tik byna nooit uit die hele ding. En dan as ek hou slaan Tab weer, dit sal outomaties begin notering vir my. So kan ek cd vhosts, plaaslike gasheer. En dit is net gaan - in die geval dat jy nie gehoor het nie die term voor, gids is net 'n ander woord vir die gids. So nou as jy sien - Kom ons bring wat aan die bokant. So nou as jy sien in hakies, jy sien die klein tilde, streep, vhost, streep, plaaslike gasheer. So het die tilde, wat verwys na my huis gids. Dit is 'n gids jy wanneer jy ssh in Dit is die gids wat jy in wanneer jy maak 'n terminale. Dit is waar jy begin. En so ek is binne-in my huis gids, en ek is binnekant van die vhost Gids binnekant van my tuisgids. En dan is ek binnekant van die plaaslike gasheer Gids binnekant van dit. So 'n paar ander nuttige dinge met CD - of wel, in die algemeen, so dot altyd verwys na die huidige gids. CD, dot is 'n mooi waardeloos opdrag. Maar dit is die verandering van die huidige gids. 'N meer bruikbare een in terme van CD is dot, dot, wat gaan net op een gids. En daarop dat hierdie - Ek wil aliasse te sê, maar hierdie simbole, dot, en dot, dot, die werk vir pretty much enige opdrag wat jy gaan om te dink van die bestuur van. Dus, net soos CD is waarskynlik waar jy gebruik van die meeste, maar dit is nie dinge wat net cd verstaan. Dit is pretty much iets jou hele command line verstaan. Baie van die programme te verstaan dot dot en Dot. So het die ander nuttige kinders - CD, stamp. So wat gaan om my te bring aan die laaste gids wat ek was in So soms ek sal iets te doen soos, O ja, ek werk hier. En ek sien 'n paar fout met iets, en Ek gaan ondersoek dit deur te gaan na 'n paar random Gids iewers. En ek weet nie of dit sal laat my daar. Dit sal. So ek doen wat ek wil in hierdie gids. Blah, blah, blah, blah, blah. En ek was soos, alles reg, ek wil terug na waar ek was gaan. CD, stamp nie, en dit bring my terug. So ek gaan 'n baie om te gooi van hierdie op jou vandag. Ek verwag nie dat jy om te onthou almal van hulle. Dit is soort van net weet dat hulle bestaan. En dan later wanneer jy wil, hmm, ek wil terug te gaan na die gids wat ek was net op, O, wag, iets soos wat bestaan. Jy hoef nie te tik net in die hele gids weer. Josef, en uiteindelik sal jy net gebruik om hulle oor en oor weer, en dit sal die spier-geheue word. ROB: Ja. So hoe ek gesê het, dat tilde is om jou huis gids. So kan ek cd, tilde. Maar ek het nie eens te doen dat as ek net - Ek sal terug te gaan na die gids sodat dit is nie 'n sin voorbeeld. Maar as ek net doen CD, dit is ook die dieselfde as, gaan na my huis gids. Ek doen Command, K. Josef Jy kan ook tik duidelik, die woord, en dit moet duidelik nie. ROB: En ek dink ook beheer, L doen dit ook. So baie verskillende maniere. Ek dink daar is 'n paar verskille waar duidelike en beheer, L net regtig stoot dit aan die bokant en Ek kan nog steeds blaai terug. Opdrag, K letterlik vernietig alles, en jy kan nie terug te blaai. Op die heel minste, dis hoe dit werk in iTerm2. Ek weet nie hoe ander dinge - O. Met SSHing, so as jy op Windows, jy gaan te hê PuTTY te laai ten einde te ssh sedert Windows nie het soos 'n ingeboude SSH hulpmiddel. Van Macs, kan jy net SSH direk van 'n terminale venster. OK. Vrae? Met LS, so iets te kry wat gebruik word om met die meeste van hierdie opdragte is - Wel, ek sal net doen een. LS, stamp nie, l. So bietjie, l is wat ons gaan 'n vlag te roep om LS. En 'n groot deel van hierdie bevele het vlae wat jy kan hulle laat oorgaan. So in hierdie geval, stamp nie, l is 'n vlag wat vertel dit vir my 'n volle lys van al die inligting van hierdie lêers. So hier sien ons dat die lessenaar was verander op 30 Julie om 12:54. Afgelaai is aangepas by September 6. Dit is die huidige grootte en grepe van hierdie dopgehou. Jy hoef nie te verstaan al hierdie dinge. Hierdie dinge aan die linkerkant van hierdie drwx se, wat baie meer betrokke raak later wanneer jy te doen het met - wat te doen het met wat regte het om te kyk na hierdie lêers. En so, as jy nie die enigste gebruiker hierdie rekenaar, sal jy in staat wees om te sê, OK, ek moet die enigste een wees toegelaat word om te kyk na hierdie lêer of ek gaan toelaat dat almal om te kyk na hierdie lêer. So iemand anders op my rekenaar kan kyk na hierdie lêer. Ek weet nie eens wat dit - wat beteken dit doen? JOSEPH: Ek is nie heeltemal seker nie, eintlik. ROB: geen idee nie. Josef Maar as jy nie weet nie, is daar 'n nuttige opdrag wat jy kan gebruik om jou te vertel wat die uitset beteken. En as jy tik in die mens voor die opdrag - so M-A-N. ROB: Man. So man is 'n ander een dit is baie nuttig. En man, LS. So het die man bladsye, het hulle albei beveel dat jy gaan word met behulp op die opdrag lyn, en hulle het ook ' funksies wat betrokke sal wees met C. So jy kan 'n mens - en ek geïgnoreer 3. Maar man 3 printf gaan bring die C-weergawe van printf. Maar as ek net doen man printf, dit is gegaan om die opdrag printf wat gebeur by die opdrag lyn. So man, LS. Die man bladsye kan mooi wees oorweldigend. Hier, al is, sal jy hierdie lys te sien van al hierdie vlae wat LS verstaan. So as ons gaan te stamp nie, l, en - Ek gaan net hierdie op jou te gooi. Maar om te soek, wil jy eerste druk op die vraag merk of streep knoppie. So streep. En dan kan ek soek vir alles wat ek wil hê. So ek gaan streep vir stamp, l. En daar was dit. So gebruik 'n lang lys formaat. Dit help nie om my uit te vind wat daardie spesifieke kolom bedoel, maar ek aanvaar iewers in hier dit sou verduidelik dat. So gebruik die man bladsye vir enige opdrag dat jy nie dadelik verstaan. Ek is redelik seker dat jy kan selfs 'n mens, man. 'N koppelvlak tot die online verwysing handleidings. O ja, een laaste een wat dalk effens relevant is, is LS, stamp nie, a. So sien as ek net doen LS, Ek kry hierdie vyf lêers. As ek dit doen LS, stamp nie, 'n, ek 'n baie meer lêers. So die ding in gemeen tussen al hierdie nuwe lêers is die dot vooraf. So het die konvensie is dat 'n lêer wat begin met 'n dot weggesteek. So jy wil nie die lêer te sien, moet jy nie wil om dit te hê mors met jou gids aanbieding. Dit is eers wanneer jy uitdruklik vra, Alle reg, LS, stamp nie, 'n, wys my. Die A staan ​​vir al die lêers, insluitend verborgenes. So 'n paar ander opdragte. O, vrae op daardie stadium? Ja. SPREKER 3: As jy dit doen LS, a, wat is die dot, dot? ROB: Oh. So dit is wat ek praat. Dit is dieselfde ding waar Ek kan hou cd, dot, dot. So tegnies, dot dot en, dot is lêers wat in elke enkele bestaan gids waar die dot lêer verwys om die huidige gids. So as ek CD, dot, is ek net gaan om te bly in die gids. En dot, dot, verwys altyd na die vorige Gids een vlak. So as ek gaan in hout en LS, stamp nie, al, Ek sal sien dot, dot. CD dot, dot bring my by die vorige gids nie. Ja. OK. So 'n ander baie belangrike opdrag is RM. So dit is wat ons gaan te gebruik om te verwyder. En laat my eintlik 'n ander doen opdrag eerste. So mkdir. Mkdir is hoe jy kan skep dopgehou. En Ek sal 'n tydelike gids skep en gaan in daardie tydelike gids. En soos verwag, dit is leeg. Maar as ek LS, stamp nie, 'n, ek het nog 'n punt en dot, dot, want dot verwys na die huidige gids. En dot, dot verwys na die vorige gids nie. En dié sal altyd bestaan ​​nie saak die gids jy is in En dit is 'n heeltemal onnodig opdrag, maar raak. Ek is net dit te gebruik, want dit is 'n maklike manier om lêers te skep. So raak 'n, raak b, c raak net gaan drie lêers genoem te skep, b, en c wat heeltemal leeg. So het die punt van my skep wat in die eerste plek is net so dat RM hoe ons dit kan verwyder. So RM, a. Dit gaan my te vra, te verwyder gereelde leë lêer 'n? En dan sal ek sê ja. So as ek vir seker weet dat ek wil vee die lêer sonder om te wees gevra, verwyder gereelde leë lêer?, dan RM, stamp nie, f gaan wees om die vlag wat sê, dwing die verwyder sonder selfs waarna my, o, is jy seker jy wil die lêer te verwyder? Ja, ek is seker. So RM, stamp nie, fb net doen dit sonder om te vra. So kom ons maak 'n paar meer dopgehou. mkdir, tmp2, CD, tmp2, raak 'n, kontak b. OK. So nou is ek wil verwyder tmp2 as 'n gids. So RM tmp2. Jy kan nie tmp2 verwyder, dit is 'n gids. So die probleem hier is dat RM nie onmiddellik werk dopgehou. Dit is net bedoel vir lêers soos nie-gids lêers. En ja, wat ons kan doen hier is RM, stamp nie, r. Dit staan ​​vir rekursief, wat dalk nie vir jou iets beteken nie. Maar wanneer jy na rekursie, dit sal beteken dat meer. So RM, stamp nie, r, tmp2 gaan rekursief gaan in daardie gids. So aftrek in die gids tmp2? Ja, laat ons gaan in daardie. Wil ons tmp2 te verwyder / a? Ja. Het ons wil verwyder tmp2 / b? Ja. Nou wil ons verwyder die gids tmp2? Ja. En so nou die gids en alles wat binne dit is verwyder. Daar is tegnies 'n bevel rmdir wat jy kan gebruik om te verwyder dopgehou, maar dit werk net op 'n leë dopgehou in elk geval. En om dit te sien nie, laat ons net doen mkdir, tmp2 weer. Tmp2, raak 'n. OK. So as ek probeer dirtmp2 te verwyder, sal dit sê Gids nie leeg. So ek pretty much nooit gebruik die verwyder rig opdrag in elk geval, want RM, stamp nie, r sal werk op 'n leë dopgehou en nie-leë dopgehou. En ook, as ek nie wil hê gaan deur die hele proses van neerdaal in die gids en die verwydering van elke individuele lêer, RM, stamp nie, rf, tmp2. En nou is dit weg. Iets om versigtig te wees oor is RM, stamp nie, rf. En dit maak my bang om selfs tik dit, want as ek per ongeluk druk Enter of iets. So RM, stamp nie, rf, tilde sou sonder waarna my, die f nie gevra my, dit sal outomaties verwyder my hele huis gids en alles wat daarin is. Sodat jy kan dink dit is 'n dom ding om te doen. En goed, dit is. Maar dit kan baie maklik gebeur deur ongeluk as, sê, ek wou verwyder my streep, vhost gids. En net in die vinnige tik, Ek het per ongeluk doen. Dit sal rekursief beide my verwyder tuisgids en die vhost gids in hierdie spesifieke gids wat net gebeur nie nou bestaan ​​nie. Maar dit sou nog steeds verwyder my hele huis gids. Ten minste deur nie met 'n F, dit het my eerste sal gevra word. En ek wil wees, o, nee, ek wil nie om dit te doen. Maar mense, streep, insluitend my geneig om te kry in die gewoonte altyd rf-ing. Selfs gereelde lêers wat ek kan net RM, c, ek is geneig om net RM, stamp nie, rf, c. Net versigtig wees wanneer jy rf-ing. SPREKER 4: Wat beteken C doen? ROB: C is ek praat oor wat C lêer in hierdie gids, wat RM, c. Josef, en meer gevaarlik, as jy gebruik 'n ster, verwys dit na alles in die gids. So, wat ek gewoonlik geneig is om te doen, is ek sal gaan in 'n gids en ek wil verwyder al die lêers daar in. So RM, stamp nie, rf, ster. ROB: Ja. RM, stamp nie, rf, ster. Josef, en as jy nie versigtig is nie watter gids jy in - Ek was nie in tydelike, maar ek was per ongeluk in my huis gids, dan sal ek alles verwyder in my huis gids. En ek het eintlik wat voor gedoen het, en Ek dink jy dit gedoen het voor of Jay het dat gedoen het nie. ROB: Ek het per ongeluk verwyder - so ignoreer dat opdrag vir 'n bietjie. Josef nie pret. ROB: So in die streep bin gids is 'n n klomp van die binêre lêers waar daar sal vertroud te wees kinders soos klang. Wel, kletteren en basies al hierdie dinge wat ek hardloop op die bevel lyn is in hierdie streep bin gids. Josef Like LS is hier. ROB: So dot, streep, LS sou lys van hierdie gids. Josef Rm is ook in hierdie gids. ROB: Ek het per ongeluk RM, rf-ed bin, wat enige opdrag wat ek kon verwyder moontlik ooit wil. Wat dan het ek net weer 'n nuwe toestel op daardie tydstip. Josef So wees baie versigtig wanneer jy gebruik om hierdie opdrag. Publiek: [onhoorbaar]? ROB: Ja. Dit is ook 'n slegte gewoonte te kry in. As jy sien, ek is nou - Wel, jy kan nie sien nie, maar my zoom-in miskien kan. So ek is nou root @ toestel. So jharvard is die gebruiker wil ons julle altyd gebruik word. Wortel is die gebruiker wat toestemming absoluut niks doen nie. So sien wanneer ek jharvard, As ek probeer om CD - Wat is 'n gids wat? O, wortel is 'n goeie voorbeeld. So CD, wortel. Toestemming geweier. Want as ons kyk na hierdie lys - en weer, het jy nie hoef te heeltemal verstaan. Maar hierdie drie koppeltekens sê wat nie enige ander laat gebruikers in hierdie gids. En die gids gebeur word besit deur gebruiker wortel. So die feit dat ek jharvard en geen een wat nie wortel word toegelaat in hierdie gids, wat beteken dat ek gaan toestemming geweier raak wanneer ek probeer om CD in dit. So wanneer ek wortel, ek het toestemming om te doen absoluut niks, insluitend essential lêers na die toestel en vernietig die hele ding. So dit is 'n slegte gewoonte te kry in net rond te loop jou bedryfstelsel as wortel. Ek doen dit in elk geval. Vrae? En ek sal verlaat wortel, bly soos jharvard. OK. Meer relevante opdragte. So gaan terug in ons tydelike, die MV opdrag staan ​​vir beweeg. Jy kan skuif na 'n. Nou wil ons dit te noem b, Dus is dit nou genoem b. Of miskien ons wil om te beweeg b een gids. So nou hierdie gids se leeg. Ek kom terug na my huis gids te gaan, en sien ons dat b is hier, want die tuisgids was een gids uit die gids wat b was in Daar is ook CP. So CP is kopieer super artikel, dot, teks. Ek kan noem dit is, dot, teks. Nou het ons albei die super artikel, dot, teks, en s, dot, teks. Dit werk ook op dopgehou. Ek RF-ed 'n enkele lêer. So CP - Wel, die eerste kom ons probeer CP, tmp, tmp2. So laat Gids tmp. So soortgelyk aan RM, die standaard gedrag is om nie op dopgehou werk. En weer, soortgelyk aan RM, die standaard gedrag - goed, om dit uit te werk met dopgehou is 'n, bietjie-r weg. So het die temp rekursief kopieer Gids tot tmp2. En so nou het ons albei die tmp en tmp2, en dit is nie wat nuttig sedert tmp was leeg in die eerste plek. Tmp2. Nou laat kopieer tmp in tmp2. En ons sien dat tmp2 het ook die lêer a, omdat die gids en om alles binnekant van die gids is kopieer. En dit kan 'n bietjie hulp As sê jy werk op die probleem stel een - of eintlik, later probleem stelle is nog meer belangrik, want daar sal 'n hele klomp wees lêers en dinge. Maar jy net wil, vir 'n split Tweedens, jy wil, alles reg, ek is gaan om iets anders te probeer. Laat my net my hele pset1 kopieer Gids tot pset1 Friends sodat as Ek beland skroefwerk dinge, ek kan terug te gaan na my Friends gids. Daar is meer gepaste maniere van weergawes back-up jou kode, maar dit is altyd 'n vinnige manier om net te maak seker dat jy het 'n afskrif van iets dat jy oor om te verander. So eggo is ook 'n eenmalige opdrag dat soort sillily sal net druk op die command line presies wat jy wou eggo. So eggo hi. Ons sal net druk hi. Echo hallo wêreld. Ons sal druk hallo wêreld. Dit kom in gebruik wanneer jy begin die kombinasie van opdragte. En weer, nie verwag dat jy heeltemal nog verstaan ​​dit, maar dit is iets om te aanskou. En dan as jy Googlen vir voorbeelde of jy besef jy wil doen iets is, kan dit nuttig wees. So laat ons, as 'n voorbeeld, so LS, stamp nie, l. So hier sien ek die uitset van LS, stamp nie, l. En ek sê OK, ek wil winkel wat in 'n lêer. Al hierdie uitset hier, Ek wil in 'n aparte lêer te sit. So hierdie klein groter as simbool is wat ons gaan om te bel. Ons is redirecting die uitset in 'n lêer. Kom ons noem die lêer blah, want dit is wat ek is geneig om altyd dit noem. So nou sien ons het ons 'n lêer blah reg hier. En as ek dit oopmaak het, sal ek sien dit is presies die uitvoer van die opdrag dat ek net gehardloop. En so, kan jy - As dit was uitset na 'n lêer, die is insette van 'n lêer. Wat is 'n opdrag dat ek - JOSEPH: Ek dink jy kan gebruik meer of minder waarskynlik. ROB: Maar hoe oor net minder blah? Ek weet nie. As jy in hierdie scenario kom, soos daar is psets dat dit nuttig vir. JOSEPH: Jy kan dit in die pyp eggo. Pyp die lêer in eggo dit te sien. ROB: Dit is die pyp. Josef Jammer. ROB: Alle reg. So is dit uitset na 'n lêer. Dit is kry die teks van die lêer en oorhandig dit aan die program. En jy sal ook sien hierdie man. So dit is 'n soort van doen albei gelyktydig. En eintlik, ek sal stel twee nuwe beveel net gebruik te maak van dit. Geskiedenis is 'n handige opdrag wat net gaan uit te druk 'n lys van enigiets wat ek nog ooit hardloop 'n opdrag lyn. So hier sien ons alles wat ek het bestuur die hele tyd. Baie van die LS se. En nog 'n nuttige opdrag is grep wat die doel is om te soek oor teks soek na patrone, goed, soek vir alles wat jy wil om te kyk vir. En so 'n handige gebruik hier is, sê Ons wil die geskiedenis aan te gryp. En ek wil om te kyk vir die instruksies waar ek - wat is 'n nuttige een om te kyk vir? Josef [onhoorbaar]? ROB: Of laat ons kyk net vir almal raak, vir watter rede ookal. So dit is hoe dit sal lyk. En jy nie heeltemal hoef te verstaan ​​dat. Maar die idee is hier, is die geskiedenis gee dieselfde uitset dit hier gedoen het, waar dit uit te druk om die hele geskiedenis van alles wat ek ooit hardloop. Ons is dan verby dat - So in plaas van om dit te druk op die skerm, ons wil om dit te slaag om die opdrag grep wat op soek is na alle gevalle van die woord te vat. En so die gebruik van hierdie kombinasie van die gereedskap geskiedenis en grep, ek kan sien, OK, hier is al die bevele wat ek ooit hardloop, en hier is 'n bietjie algemene een. Ons is aan die onderkant. En dit is ook aan my die opdrag Ek het net gehardloop wat moes woord touch in dit. Maar die pyp is 'n mooi nuttige ding vir die kombinasie van verskeie programme. En eintlik is dit 'n kortpad vir die laat my uitset geskiedenis blah in te dien, en laat my Grep die gebruik van die lêer blah as wat ek wil om te kyk oor. So die pyp is net 'n kortpad vir die twee opdragte. Ja. SPREKER 4: [onhoorbaar]? ROB: Ja. Wat is - Oh. Kom ons toets. So kat, hond, vis. So ek wil grep. Dash, r, weer, gaan wees rekursief, so ek wil om af te daal al dopgehou. Ek wil rekursief grep vir almal - en laat my tydelik te kry dit uit die weg geruim. Ignoreer my. OK. So ek wil om tydelik grep vir alle gevalle van die woord vis. En so hier wat ek doen is grepping rekursief vir die woord vis. En ster beteken oor al hierdie lêers in hierdie gids. En so is dit vir my 'n Toegang geweier want dit is nie toegelaat om te lees spesifieke lêer. Maar dit gevind vis in die lêer, toets. Ek kan ook sê, spesifiek, het ek net wil om te kyk in die lêer blah, in welke geval dit nie sal vind nie. Ek wil net om te kyk in die lêer, toets. Dit sal om vis te kry. Dit is 'n baie handig opdrag om te weet in die algemeen. Daar is 'n paar alternatiewe vir Grep wat veronderstel is om meer te wees programmeerder vriendelik, maar ek is geneig nog steeds terug te val op grep. Vrae? OK. Is daar ander opdragte? Oh. Net 'n eenmalige een wat ek altyd vind om pret is biologies. So sien wanneer ek in hierdie pragtige full-screen af, ek het geen soos top toolbar of iets nie. So Cal gee my net 'n mooi klein kalender wat is reg nou afgesny, Ek neem. Maar mooi klein opdrag. JOSEPH: Dit is [onhoorbaar]. Ander opdragte wat jy mag hê gesien sluit klang en maak. Ons gaan oor hulle in meer besonderhede later. Maar as jy het gewerk die PSET, moet jy vertroud met hulle. ROB: Alle reg. Vrae oor command line dinge? Alle regte. So laat ons beweeg na 'n paar C-verwante dinge. Veranderlikes wiskunde. OK. So, net soos wat ons gehad het wiskunde in nuuts af, jy kan ook gebruik wiskunde in C. Voor ons by die geheel, so veranderlikes. Onthou dat wanneer jy vertel 'n veranderlike soos int x of y float, jy te gee voordat tik die veranderlike naam. So tipes ons tot dusver gesien is int, vlot, dubbel, lang lang, wat ek weet nie eintlik as ons gesien dat so ver. Daar is 'n paar ander mense. Ons het sien kar. Daar is kort, wat is soos dit is die teenoorgestelde van lang lang waar dit kleiner as 'n heelgetal. Ons het ook gesien string. So, wat is spesiaal string? Hoekom sou ek sê dit is nie hou int? SPREKER 4: Dit maak nie regtig bestaan ​​nie. ROB: Ja. Dus is die enigste rede waarom ons het string is omdat wanneer jy dit doen hash, sluit cs50.h. En ons sal sien voorbeelde van hierdie later - O, wat nie so goed hanteer nie - waar cs50.h is om iets te doen langs die lyne van die tipe def, kar ster, string. En so dit is om te sê dat ons nie eens weet wat 'n kar ster is nie. Maar dit sê ons wil string. Enige plek waar jy het al met behulp string, jy kon gewees het met behulp kar ster, wat eintlik 'n tipe wat bestaan ​​in die C-taal. Maar ons sal kry om dit. O ja, en dit gaan terug. Netjies. So dieselfde ding met Bool waar ware en valse. Dit is nie regtig 'n ingeboude tipe in C. Inteendeel, dit is net, het dit die waarde nul? Dan sal ons net oorweeg dit vals is. Het dit die waarde - Wel, beteken dit nie 'n waarde wat nie nul is nie? Dan sal ons dit oorweeg om waar te wees. So een is waar, twee is waar, enigiets nul is waar. So dit is die. Vrae oor verklaar veranderlikes en veranderlike tipes en alles wat? Ja. SPREKER 4: Vir n lang lang, in die boek, dit het gesê dit het 'n lang lang int te wees. Maar net lang lang werk? ROB: So het hierdie tipe wysigers. So int x. So kan ons ook sê unsigned int x. Ons kan sê kort int x. Ons kan lang lang sê int x. Maar pretty much enige van daardie dinge wat ek het net gesê, unsigned int, kort int, lang lang int, kan jy ontslae te raak van die int en dit net sal aanvaar wat jy bedoel int. So unsigned x, wat net beteken - jy weet hoe om normaalweg met 'n int, jy kan sê x is gelyk aan die negatiewe 3? Met 'n unsigned int, jy kan nie. Josef, en weer vir die kamera, die vraag was, wat is die verskil tussen lang lang int en net lank lank? ROB: Ja. So ek sal byna nooit skryf lang lang int. Ek sal 'n lang lang skryf. Josef Enige vrae? ROB: OK. So simpel herinnering van dit is hoe Ons verklaar 'n veranderlike en inisialiseer die veranderlike en verklaar 'n ander veranderlike en inisialiseer dit alles in een stap. So het die verklaring van die veranderlike en die inisialisering veranderlike het nie om maar kan wees op dieselfde lyn. So het ons die standaard wiskunde operateurs wat jy gebruik om - plus, minus, verdeling, tye. Daar is ook modulo, wat ons sal sien. Daar is nie, ten minste in C, 'n ingeboude in die krag magsverheffing kappie operateur. Wel, daar is 'n kappie-operateur, maar dit is nie mag nie. Josef Maar dit is nie magsverheffing, ja. ROB: Moenie die kappie gebruik om te aanvaar dat dit beteken soos kwadraat of wat ook al. So 'n paar dinge in te hou omgee oor afdeling. Ek sal staan. So verklaar inisialiseer antwoord. So ons float antwoord sê gelyk aan 1 gedeel deur 10. Druk antwoord tot twee desimale plekke. En dit is die soort van ding wat ek sou 'n mens printf om uit te vind wat wat die heck is%, dot, 2f beteken? En dit net beteken, goed, ignoreer die 0.2. En%, f is wat ons gebruik te druk om te dryf. Die 0.2 sê, druk wat dryf tot twee desimale plekke. So hierdie program het 'n fout, en jy kan hierdie gesien voor in 'n paar voor CS kursus. Maar wat is dat die fout? SPREKER 5: Zero. ROB: Ja. So wanneer ons sê, antwoord gelyk 1 gedeel deur 10, ons wil die beantwoord word 0.1. Maar 1 gedeel deur 10, 1 is 'n integer, 10 'n heelgetal is. En so wanneer ons 'n heelgetal gedeel deur 'n heelgetal, ons gaan om terug te kry 'n heelgetal. So 1 gedeel deur 10 is 0.1. Aangesien dit nodig om te gee ons 'n heelgetal, dit is net gaan om weg te gooi wat desimale plek en sê dat die antwoord is 0. En so wanneer ons druk antwoord hier, dit gaan druk 0,00. Josef, en net so 'n aantekening, is dit eintlik gooi weg wat is na die desimale punt. So as jy in plaas gehad het 6 gedeel deur 10, jy dalk dink dat dit sou gee jy 0.6 en dan sal jy rond tot 1. Maar eintlik, wat gebeur wanneer dit tik take dit is dat dit druppels wat na die desimale punt. So 0,6 beteken geword 0. ROB: Ja. En ons sal sê afkappen vir daardie. So wanneer jy gooi 'n int, die desimale kapt. So die oplossing vir daardie - daar is eintlik twee. En ek gaan die tweede te doen, want hierdie een is 'n baie makliker fix. So 'n oplossing is gebruik dryf in die afdeling. En regtig, jy het net te maak een van hulle 'n float. Maar dit is 'n bietjie duideliker net beide van hulle dryf om te maak. So 1,0 gedeel deur 10,0 is verdeel twee dryf. So die antwoord sal uiteindelik 'n 'n vlot, en so sal jy korrek druk 0,10 hier. Iets wat nie so goed werk oor wat is goed, seker nie, was dit maklik genoeg om te skakel na 'n 1 dryf deur dit 1,0. Maar wat as plaas moes ons twee heelgetalle soos int x is gelyk aan 1 en int y gelyk aan 10, en dan het ons wou om te doen x gedeel deur y? So dit is nie maklik om net doen X.0 of iets. So het die fix te wat beslissende. So gooi is 'n manier om te skakel C van die een veranderlike tipe na 'n ander. So hier, 1 'n heelgetal is. En deur om hierdie float in die voorkant van dit is ons beslissende 1 na 'n float. En so sal dit omskep die 1 na 'n 1.0. En dit sal omskep die 10 tot 'n 10.0. En dan dinge optree soortgelyk aan die vorige weergawe het ons net gewys waar, soos verwag, kry ons 0,10 en dit sal druk nie. En ons kan dit doen met veranderlikes, ook. Dus kan ons sê, float x gedeel deur float y. Josef Enige vrae? ROB: So, net soos in 'n gereelde wiskunde, ons het operateur voorrang. So in wiskunde klas, is jy meer geneig om dit te noem volgorde van bedrywighede. Hier is die amptelike term is operateur voorrang. Maar die operateur voorrang geniet, of die meeste operateurs, is as jy sou verwag. So, net soos in wiskunde, 2 keer 10 is gaan word nouer as gegroepeer hierdie 10 gedeel deur 2 en dan 2. Die volgorde van bedrywighede, sal dit doen 2 tye 10, 10, gedeel deur 2, en dan dit sal nie 20 plus 5 plus 2. So dit is as wat verwag is, en jy kan gebruik hakies aan te groep uitdrukkings. Jy kan nie vierkantige hakies gebruik tot die groep se uitdrukkings. Ja? SPREKER 5: Kan jy werklik net terug te gaan 'n sekonde? Kan jy gooi 'n int na 'n string? ROB: So in C, kan jy enigiets gooi jy wil enigiets wat jy wil. Dit beteken nie dat dit 'n goeie ding om te doen. So wanneer jy gooi 'n int te 'n string, wat beteken - en ons sal kry in hierdie baie meer deeglik - Josef Heelwat later. ROB: Ek wou nie veel later sê so ek probeer om my sin te verander. Ons kry in dit baie meer deeglik later waar regtig wanneer jy 'n string veranderlike - so 'n string kan arbitrêr wees lank, reg? En ons het gesê dat 'n int is vier grepe en lang lang agt grepe en 'n float is vier grepe. So 'n string, net soos 'n int, het slegs 'n sekere aantal grepe om dit te. En dit sal vier grepe. Maar 'n string kan mooi wees arbitrêr lang, reg? So hallo wêreld reeds, as dit is 10 karakters of wat ook al, wat reeds gaan wees oor die 4 grepe Ek kan inpas in 'n string. En so hoe snare regtig werk, is dat hulle is waar in die geheue dat string word gehou. En so hier, as ek sê string x gelyk Hello World, binnekant van x is net sê, o, Hello World gestoor op hierdie spesifieke plek in die geheue. So as ons probeer om 'n heelgetal te gooi nie 'n string, dan het ons probeer om te interpreteer 'n paar random deel van die geheue as 'n string. En dit byna altyd breek dinge. Josef Maar as wat verwar jy, sal ons wees wat dit meer in diepte later. ROB: Ja. Dit is waar jy gaan te kry in wysers. En dit is 'n belangrike stuk twee weke van hierdie kursus. SPREKER 6: Werk dit soos voorwerpe in ander tale of nie regtig? ROB: So in ander tale, voorwerpe verteenwoordig sal word met behulp van wysers. Dit is nie dieselfde ding nie, al is. Enige gedagtes? Josef No Geen gedagtes. ROB: OK. Josef Volgende. ROB: Net gaan met dit. Alle regte. So modulo. Net soos ons het plus, minus, verdeel en vermeerder. So modulo is een wat jy kan nie gesien het nie. En dit is net sê, gee vir my die res van. So 55% 10. Die res van doen 55 verdeel 10 sou wees 5. So 55% 10 is 5. En 3% 5 sou wees 3. 8% 8 sal wees 0. 16% 15 sal wees 1. Josef Een ding om daarop te let met hierdie, Ook is dit dalk nie werk soos verwag as jy 'n negatiewe getal. So negatiewe 5% 4, sommige mense dalk dink dit is - wat sou jy dink negatiewe 5% 4 sou wees? SPREKER 5: One. Josef So sommige mense sê een, sommige mense sê negatiewe een. Maar wat - ROB: Ek sou nie eens sê een van hulle. Josef Twee, jammer. Sommige mense sê - ROB: Drie. Josef Drie? ROB: Negatief - wat was die - negatiewe vyf - Josef Drie, drie, drie. Jammer. Omdat modulo, oor die algemeen, wanneer jy elders gesien het, het dit gewoonlik beteken terug 'n positiewe getal, reg? ROB: So wanneer ons sê in wiskunde,% 10's, hulle is geneig om te wil hê jy moet gee - As ons mod deur 10, dan verwag ons te 'n getal tussen 0 en 9. In hier, dit is nie die geval dat jy kry negatiewe getalle teruggekeer. Josef so negatief 5% 4 sal negatiewe 1 wees. ROB: Maar dit is selde dat jy mod-ing negatiewe getalle te begin. Slaan hierdie. Josef Ja. ROB: Meh. OK. So 'n laaste ding om te wys oor dryf is dit is 'n gevaarlike gedrag, maar dryf is nie 'n presiese verteenwoordiging. So terug na grepe gaan weer, onthou dat 'n int is altyd vier grepe en 'n float is altyd vier grepe. So Lucas se voorbeeld is redelik goed. So dink 1 gedeel deur 3. So 0,3333333. As ek net 32 ​​stukkies, hoe kan Ek slaan 0,33333 presies? En dalk, vir watter rede ookal, sê jy, Alle reg, goed, laat ons net sê dat hierdie spesifieke 1011001, laat net sê dat moet 0,333333. Wel, jy het slegs 'n beperkte aantal daardie stukkies, so dit is onmoontlik om te stel elke enkele Wisseltrofee punt waarde gegee net 32 ​​stukkies. Wel, dit is onmoontlik om enige te verteenwoordig swaai punt waarde gegee oneindige - Wel, gegewe 'n beperkte aantal stukkies. So die probleem hier is, wel, toe ons gebruik te druk tot twee desimale plekke, ons het korrek die antwoord kry 0,10. Maar onder die enjinkap, dit is regtig gestoor word so na as moontlik aan 0.10 as daardie stukkies kan verteenwoordig. Is dit op die volgende skuif? Of is dit nie? Josef Ja, dit is wat. ROB: Blegh, blegh. Josef Ja, jy kan net trek die notas van 'n bietjie. ROB: Ek gaan net om te vergroot op die laaste op daardie. Oh my gosh, dit is [onhoorbaar]. So dat die getal. Dit is wat gedruk sal word as ons hardloop die program. En sien dit is nie regtig 'n groot deal As ons net omgee oor soos 02:58 desimale plekke. Soos ons net oorspronklik gedruk 0.10, en dit is hoekom ons het niks verkeerd nie. Maar wanneer ons begin om in die presiese, presiese aantal wat dit is verteenwoordig, sien ons dat dit nie kan presies verteenwoordig 0,1. En 'n deel van die probleem hier is soos, Alle reg, dit is goed, maar, wel, eerste, wat as ons probeer om te doen, antwoord gelyk aan 0,1 gelyk? Is dit gaan om terug te keer waar of vals? En so dit is moeilik om te sê. Ek dink dit eintlik kan terugkeer waar. Sal dit die eerste keer - Ek weet nie. Die antwoord is wanneer jy begin handel met drywende punt waardes, jy mooi veel moet nie gebruik word om gelykheid As gevolg van hierdie onakkuraatheid. En vir al wat jy weet, is dit die honderdste desimale plek wat die swaai punt was nie in staat korrek te hanteer. En so gelykheid sal net nie, selfs Al is die getal - as jy was met presiese syfers, die getalle moet het juis dieselfde. Dit is oor die verloop van soos 50 berekeninge met behulp van hierdie swaai punt waardes, kan die fout bou op en op en op, en Dinge word net verkeerd. Josef, en daar het regtig bekende voorbeelde van hierdie gebeurtenis. Soos NASA ingenieurs gekry het hierdie verkeerd is, wat veroorsaak dat vuurpyle te ontplof in die lug nadat hulle is van stapel gestuur. En baie van die kwessies soos dit. So ja. SPREKER 6: Wanneer jy sê 0,3 f, beteken dit kortknip die res? Of is dit rond op of af? ROB: Sal printf rondom? JOSEPH: Ek dink printf kapt. ROB: OK. So kan ons insgelyks gaan in die teenoorgestelde rigting van hierdie waar, in hierdie geval, die naaste kan dit stel 0.1 was met hierdie nommer. Die naaste is dit dalk in staat wees om verteenwoordig 0.2 in die teenoorgestelde rigting, ,199999996356 of iets. So as ons gaan in die rigting van die dinge, dan printf 0,3 f sou terugkeer 1,99 in plaas van 2,00. Josef, en ek is nie heeltemal seker op daardie. Jy wil dalk 'n klein, min te skryf program om net seker te maak dat. ROB: Al wat ons is seker is, is dat as jy probeer om dit te gooi nie 'n int, en gooi 'n int gaan veroorsaak dat dit die desimale geselekteer, indien jy probeer om te gooi 1.9999999 na 'n int, kry jy 1. En so moet jy oor die algemeen gebruik om die round funksie in die wiskunde biblioteek. Vrae? OK. Josef So beweeg op aan voorwaardes en Boolse uitdrukkings. So jy het hierdie gesien het nie. En eintlik, laat my maak seker my rekenaar in die regte formaat hier. Ruimte. Jammer, ons gaan hê om te gaan 'n bietjie met donker aan die kante. Maar ja, julle het gesien dit voor in krap. So hierdie reg hier is 'n uitdrukking wat gebruik word in 'n voorwaardelike verklaring. So beantwoord groter as nul vertel waar of vals is. En dit is werklik belangrik, want hulle toelaat om ons te voer logika in ons kode. So byvoorbeeld, is dit 'n program geskryf in Scratch dat die gebruiker vra vir 'n heelgetal en vertel hulle of Die heelgetal dat hulle vir jou gegee het, was 'n positiewe of negatiewe getal. En die sukses hier te sien is jy die eerste druk van die verklaring, gee my 'n heelgetal. En dan vra jy hulle vir 'n heelgetal. En dan moet jy gebruik voorwaardelike logika oor hier om te kyk of dat die getal was eintlik groter as nul is of nie. So hier het ons 'n Boole-uitdrukking binnekant van 'n voorwaardelike As verklaring. Is daar enige vrae? Is daar enige vrae oor wat? OK. So is daar meer as net groter as, natuurlik. Jy kan bou Boolse uitdrukkings Met die meeste van die soort van dinge wat jy sou dink in wiskunde. So groter as. Dit moet 'n minder as. Jammer. En die spasiëring. ROB: God verbied jy laat dit. JOSEPH: Alle reg. So groter as, minder as, groter as, of gelyk aan, minder as, of gelyk aan. Ons gebruik dubbel gelykes om te kyk vir gelykheid, omdat enkele gelyk middel opdrag, reg? Ja. En dan kan ons ook nie gelyk nie deur gebruik uitroepteken, gelyk. En dit uitroepteken simbool kan ook uitgebrei word sodat as jy wil enige soort van Boole te Keer uitdrukking, kan jy dit doen. So dit sal evalueer om waar te slegs indien die antwoord is minder as of gelyk aan nul. Enige vrae oor wat? OK. So kan jy ook kombineer hierdie uitdrukkings gebruik logiese en en logies. So dit is net die En simbool, wat moet skuif, 7 wees. En dit is die pyp simbool, wat nie 'n laer geval L. Dit is die een dit is reg bo jou Tik sleutel. So gebruik jy twee van hierdie te simboliseer logiese en die logiese Or. So dit sal slegs terugkeer waar as antwoord is een, twee, drie, of vier. En dit sal net terug waar as antwoord is verder as dit aan weerskante. So dit is nie een, twee, drie, of vier. En die manier waarop jy wil gebruik wat in 'n uitdrukking - ROB: Of 'n nul of 'n vyf. Josef Zero of 'n vyf. Jammer. Ja, ja, ja. OK. En nou verby hier, op dieselfde manier wat jy sou daardie uitdrukking gebruik, 'n kleiner uitdrukking kant van 'n As voorwaardelike verklaring, sal jy dit ook gebruik om die dieselfde manier deur net om dit binne die hakies van die As verklaring. So hierdie printf sal slegs brand indien antwoord is een, twee, drie, of vier. Enige vrae oor die kombinasie uitdrukkings? So is daar 'n ander voorwaardelike Konstrueer ons noem 'n As / Else. So basies, dit nou beteken, OK, as iets wat ek wou kyk nie waar is, dan gaan na die Else en verrig wat ander aksie. So in hierdie geval, het ek gevra die gebruiker vir 'n heelgetal. Is die heelgetal groter as nul? Ja? Wel, dan is hulle opgetel 'n positiewe getal. Indien nie, dan moet dit negatief of 'n nul. So jy pluk 'n negatiewe getal of 'n nul in hierdie geval. Ja. Of 'n nul. En dan het ons ook Indien / Else, As en anders. So dit laat ons voer 'n reeks van dinge net as die eerste mense faal. So in hierdie geval, nou is ons die maak van die laaste een wat jy kies nul. So as hulle nie opgetel 'n positiewe of 'n negatiewe getal is, dan moet hulle opgetel nul. So dit gaan net af in die ketting soos hierdie. So 'n voorbeeld van hoe 'n As verskil van - 'n As / Else is anders net 'n reeks van Ifs. En dit is 'n algemene vraag wat mense vra is, goed, as jy soos 'n 95 in CS50, wat sal hierdie program vertel nie? SPREKER 5: Jy het 'n A. Josef Ja. Jy het elke enkele een van daardie reg. Jy het 'n A, jy het 'n B, jy 'n C en 'n D, reg? So al hierdie geëvalueer kry in orde is. Dus, terwyl 'n 95 is groter as 90 is, is dit ook groter as 80 is, is dit ook groter as 70, en dit is ook groter as 60. So jy het al van daardie grade. En ek neem aan jy sou wil net die A. Die manier om dit te los, is om te vervang dié met Else / As 's. So in hierdie scenario, sien dat 95 is groter as 90, en dan is dit nie die res evalueer van die state. Enige vrae oor wat? So is daar 'n ander soort van voorwaardelike struktuur wat ons hier het wat ons roep 'n skakelaar verklaring. So dit kan jy basies kyk wat die waarde van 'n nommer wat jy sit in die skakelaar stelling is. So in hierdie scenario, ons skakel op n, en ons sê, o, as n een, dan druk die verklaring. En dan breek, wat beteken uitgang uit die skakelaar verklaring. As dit nie was nie een nie, dan, wel, net uiteindelik seker al daardie gevalle. En so is dit kontroleer of dit een of twee of drie, en dit druk dienooreenkomstig. En wat van hierdie standaard navraag hier middel is as hulle nie 'n tree van daardie, dan sê ongeldig. So kom ons sê ek vra vir 'n en die gebruiker gee my vier. Wel, dit ooreenstem met een van daardie gevalle so dit sal druk uit wat in die standaard afdeling. Ja, bevraagteken? SPREKER 5: Kan jy Boole gebruik uitdrukkings in plaas van een, twee, of drie? Josef Dus die vraag is wat jy kan gebruik Boolse uitdrukkings in plaas van een, twee en drie? En in C, ek glo jy kan dit nie doen nie. Maar in ander tale, wat jy dalk ontmoeting aan die einde van die semester soos JavaScript, jy kan. Wel, sou jy eers bereken dat die waarde en dan gebruik dit in die skakel verklaring. Ja? ROB: So deel van die voordeel van skakelaar state is dink as jy dit gedoen het as 'n As / Else, so asof n gelyk gelyk aan een of wat ook al. Else / As n gelyk is gelyk aan twee, wat ook al. Else / As n gelyk is gelyk aan drie. So die manier waarop die program sou loop, is dit sou agtermekaar gaan af die lys en kyk, is N een? Nee. Is n twee? Nee. Is n drie? Ja. Doen dit. Terwyl met skakelaar state, is dit eintlik in staat te stel om dit te wees baie vinnig. En so gou as wat dit sê skakelaar, dit sê, alles reg, n is twee, ek is onmiddellik gaan om te spring na die plek waar Ek is veronderstel om te gaan uitvoer. Ek gaan nie eers te kontroleer, is n mens, is N twee? Dit kan onmiddellik begin doen wat dit veronderstel is om te doen. En as gevolg van dat, dit kan nie neem Boole voorwaardes. Of anders dit sal moet doen om die volgorde, soos al die regte, is n groter as nul? Anders is n groter as 10 of wat ook al. Josef In hierdie geval, as jy gebruik As / Else, As, dan die oorskakeling hardloop ongeveer drie keer vinniger as die As / Else, As. Ons kan die skakelaar te organiseer in sulke 'n manier wat ons nie breek nie na elk van die gevalle. So in hierdie geval, ek skeiding die getalle wat ons kies in een en twee is nie groot getalle en drie wat 'n hoë getal. So in hierdie geval, as n een of twee, is dit sal die geval getref en dan sal dit val deur, want Daar is geen breek. En dit sal eindig hier. So as ons kies een, sal dit die printf doen en dan so breek dat nie een van dit uitgevoer word. En natuurlik, as hulle kom in drie of iets anders, dan sal dit slaan diegene en nie daarheen te gaan, en dit plaas sal voer die ooreenstemmende lyn. Is daar enige vrae oor wat? Ja? SPREKER 4: Wil jy 'n fout as jy het 'n pouse na die geval een, maar dit nie iets het om dit te doen? Josef So die vraag is sal jy 'n fout as jy 'n pouse na geval ', maar daar is niks om te doen? En die antwoord is nee. Jy sal nie eintlik 'n fout. Ja, mm hmm. So as 'n soort van 'n klein verandering hier, Ek gaan 'n printf hier te plaas. Oeps. So, wat sou hierdie druk as Ek sit een in as insette? Ja. Dit sal jou vertel dit het nie 'n groot aantal keer, reg? Want dit sou getref dat die eerste geval, dit sal nie breek nie, en dit sou val deur na die tweede geval. Enige vrae oor wat? ROB: Het jy 'n ander vraag? Josef OK, afkoel. Alle regte. So daar is iets anders wat ons noem 'n drieledige operateur wat is basies 'n alternatiewe sintaksis te doen As en dan anders. En dit kan jy doen dit alles op een lyn. So in hierdie spesifieke program, Ek vra die gebruiker vir n. En as n groter as 100, sê ek vir hulle het hulle opgetel 'n groot aantal. Else ek sê hulle pluk 'n lae nommer. So kan ons hierdie baie lang sintaksis te gebruik, string, S, en dan kyk as n groter as 100 en ken dit dienooreenkomstig. Maar ons kan nog baie meer bondige maak hierdie deur die gebruik van hierdie drieledige operateur sintaksis Dit behels 'n vraag merk en 'n kolon. So het die vraagteken in wese is vra 'n vraag, reg? ROB: Miskien zoom in op wat. Josef Ja. Goeie punt. So dit is die drieledige operateur. Ek het eers die vraag vra, is n groter as 100? As dit is, dan sal ek voer die eerste deel voor die kolon. As dit is nie, dan het ek voer die tweede deel na die kolon. So as n groter as 100, dan is dit optel hoë en sit wat in string s. As n is minder as 100, is dit optel lae en dan sit wat in string s. So wat hierdie groot stuk verkort af in net dat een lyn. SPREKER 5: Is dit gewild? JOSEPH: Ja, dit is baie gewild vir dinge waar in wese wat jy wil nie 'n opdrag wat gebaseer is op 'n soort van toestand. En in hierdie geval, is ons probeer 'n waarde string s te wys. Dit is nie so nie - Ek dink ek regtig verkies nie dit in ander gevalle. Maar dit is veral nuttig vir hierdie opdrag. ROB: Dit is 'n redelik algemene patroon waar jy 'n paar veranderlike wat jy gaan om te sê, as iets, stel hierdie veranderlike een waarde, anders, stel hierdie veranderlike na 'n ander waarde. En dit is die scenario waar gebruik om 'n drieledige. Josef, en jy spaar baie van die lyne, reg? En dit maak net jou kode waarskynlik 'n bietjie meer leesbare. Ja, bevraagteken? SPREKER 6: Vir 'n drieledige, kan jy gaan, string s gelykes s, vraagteken? En dan kan jy, sê, vyf verskillende opsies. En afhangende van wat die aantal N is, sal jy een van daardie te kies? Josef So die vraag is, is daar 'n soort van sintaksis waar jy kan string doen s is gelyk aan n, en dan meer as twee opsies nadat vraagteken? En 'n eenvoudige antwoord is nee, daar is nie regtig 'n goeie manier om dit te doen nie, tensy jy wil nes verskeie drieledige operateurs binnekant van mekaar. Jy kan dit doen soos n groter as 100, vraagteken, en dan nog 'n drieledige operateur, n groter as 50, vraagteken, en nes dit so. Maar in daardie scenario, jou kode is kry soort deurmekaar en slordig, en dit dalk beter wees om net te gaan na 'n As / Else verklaring op daardie tydstip. ROB: En ook, as 'n kant nota, PHP verkeerd implemente die drieledige operateur sodanig dat geneste ternaries nie eens werk soos hulle moet nie. Josef Ja. So raak dit 'n bietjie verwarrend, veral wanneer jy gaan verskillende tale. ROB: Dit is verwarrend genoeg dat tale is verkeerd nie. Josef So eintlik, net om te verduidelik, nie almal weet wat dit % S nie hier? Enige vrae oor wat? Ek dink net vir die kamera, die% s basies laat ons het 'n plekhouer vir 'n string. En dan aan die einde, het ons bepaal dat die veranderlike wil ons in hierdie te sit plekhouer is s. Sodat basies s en dit plaas dit hier. En dan sal dit uit te druk, het jy opgetel 'n hoë of jy opgetel 'n lae nommer. OK. So loops toelaat om dinge uit te voer in sirkel bewegings, reg? Jy kan teëgekom het dit in Nuuts af in die vorm van Forever lusse of herhaal totdat of Herhaal 'n spesifieke aantal kere. So hoekom is dit goed vir ons? Wel, in C, kom ons sê ons het hierdie lied geïmplementeer in Scratch wat sing, is dit die lied wat nooit eindig. Dit gaan net aan en aan en vir ewig en ewig. Wel, jy kan nie regtig 'n program wat 'n oneindige aantal van die printf state in dit, reg? So in hierdie spesifieke scenario, een manier wat jy kan doen om hierdie werk en te maak dit vir ewig te druk is om te plaas gebruik 'n lus. So 'n rukkie lus sal voer wat is in die liggaam van die twee stutte wat behoort dit op grond van wat die toestand is. So in hierdie spesifieke voorbeeld voor, indien Ons wil dit vir ewig te druk, wat kan ons doen? Wel, seker nie, reg? So hierdie soort van 'n kombinasie van die idee van 'n paar Boole-uitdrukking saam met 'n lus. En ons geleer het oor Boolese uitdrukkings vroeër. So wanneer die toestand binne dat terwyl bly getrou, hierdie lus sal voer op en op en op. En in hierdie geval, as ons net verskaf dit ware, dit veroorsaak 'n oneindige lus wat druk die lied oor en oor en as ons voor sonder gewenste met 'n program wat 'n oneindige aantal printf state, wat nie moontlik nie. So meer dwingend, al is, jy kan gebruik om dit met 'n veranderlike en 'n toestand. So kom ons sê ons wil herhaal die frase, heeltemal getroubleerd, 10 keer. So, wat jy kan doen met 'n lus is kan jy die eerste keer inisialiseer 'n toonbank veranderlike buite die Terwyl lus tot 10. En dan basies, elke keer as jy gaan deur die lus, jy druk die verklaring en dan kan jy verminder die counter veranderlike tot aan die einde, op 'n sekere punt, wanneer ons trek ek genoeg keer, 1 uit ek genoeg keer - en net ek minus minus te verduidelik beteken dat ek gelyk het ek minus 1. Dit sal basies bring ek af na die punt waar een keer het ek 'n nul, hierdie toestand is nie meer waar en sodat dit uitgaan uit van die lus. So totaal getroubleerd druk slegs 10 keer. Enige vrae oor 'n rukkie lus? OK. So is daar 'n manier waarop ons kan doen wat ons net het in 'n meer bondige wyse met wat ons noem 'n For-lus. So 'n For-lus bestaan ​​uit 'n inisialisering, 'n toestand, en 'n werk, net soos wat ons gehad het voor in hierdie Terwyl lus. So kom ons neem 'n blik. In hierdie Terwyl lus, ons het 'n inisialisering, dan het ons 'n voorwaarde dat ons nagegaan. En dan het ons 'n update stap op die top. Met 'n For-lus, hierdie basies neem hierdie drie dinge en kondenseer dit af in een lyn. Dus is die eerste ding wat dit nie in die Vir lus is die inisialisering. En dan doen jy 'n kommapunt, en dan jy doen om die toestand, wat ek groter as nul gaan daar, en dan sal die update stap. So dit kry uitgevoer op die einde van die lus liggaam. So het hierdie twee programme is wese ekwivalent. Enige vrae? So, wat is een verskil tussen die twee? Kan iemand wys dit uit? Dit mag dalk 'n bietjie subtiel. Dit is net 'n baie klein verskil. Ja? SPREKER 5: Jy sal nie in staat wees om te gebruik die ek veranderlike buitekant van die For-lus [Onhoorbaar]? Josef Presies. So dit is iets wat ons sal kry om later genoem veranderlike omvang. Maar in wese, hierdie int Ek lewens buite hierdie Terwyl lus. So een keer hierdie Terwyl lus is gedoen uitvoering, sal ek in staat wees om later het ek om te gebruik in die program. Terwyl met die For-lus, die int ek is scoped binnekant van die For-lus. En omdat dit is die binnekant van hierdie gedeelte van die For-lus, wat begin by die hakies en eindig met die krullerige stut daar. Enigiets wat verklaar is binne hier kan nie buite gebruik word. So as ek probeer ek om buite te gebruik, sal dit sê vir my, swart simbool. En wese, sou ek nie in staat wees om dit te gebruik. Beroof en wel, 10 jaar gelede, in letterlik alle gevalle, krulhakies is wat jy gebruik om te bepaal die omvang van 'n veranderlike. So is daar, int Ek is gelyk aan 10 is die binnekant van die verklaarde stel krullerige draadjies. En so is daar dan so lank as wat jy probeer ek om te gebruik voor hierdie krullerige stut, dit is goed. Jy kan sien wanneer jy tik maak, moet jy sien stamp nie, stamp nie, st, gelykes, C99. So dit is 'n nuwer weergawe van C wat GCC geïmplementeer het, wat ook ' hierdie kortpad. So dit gebruik om nie in C. toegelaat en jy kan sien waarom, want dit int Ek is buite hierdie krullerige stut, maar dit is nog steeds beskou as in die omvang van hierdie krullerige draadjies. Maar dit is 'n baie maklike ding, en daarom is dit 'n goeie uitbreiding. Josef Enige vrae? OK. So, wat is meer nuttig is dat dit soms jy soort van dinamika in jou lus, reg? Jy wil nie net noodwendig druk heeltemal getroubleerd al die tyd, jy wil aftel van 10 of iets. En so kan jy die toonbank veranderlike gebruik binnekant van die loop as well. En in hierdie geval, is hierdie program net aftel van 10 al die pad af. En wat beteken dit nie druk? Dit maak nie druk nul, reg, want as - Ja, dit is ook nie druk 11. Daarom is dit nie druk nul, want toe Ek is nul, onthou, dit evalueer die toestand voor dit gaan oor die lus liggaam uit te voer. En toe ek is nul, dit is vals, so dit nie uit te druk aftel nul, is dit net druk uit te tel af 10 al die pad af tot 1. As ons werklik wil om dit te druk nul, dan sou ons 'n gelykaanteken sit na hierdie groter as teken. OK. So 'n manier om insette validering te doen, wat is wanneer jy vra die gebruiker om te doen iets wat jy wil om seker te maak hulle volg jou instruksies, is om te gebruik Terwyl die lus, reg? So in hierdie geval, ek vra vir 'n positiewe getal en dan is ek wag vir insette. En dan het ek nagegaan Terwyl die insette is minder as nul is, bly vra hulle. So lank as wat hulle gee my 'n aantal wat nie positief is nie, bly vra, bly vra, bly vra. Maar wat is 'n soort van vreemde oor hierdie? Of wat nie optimale oor lyk hierdie struktuur reg hier? Enigiemand? Ja? SPREKER 6: Jy herhaal die opdrag twee keer. JOSEPH: Right. So het ons twee printf state hier, reg? So is daar 'n manier waarop ons kan dit net kry tot een wat sal maak dat ons kode makliker om te lees en 'n bietjie meer skoon. En dan sou ons nie hoef te het kry in twee keer so goed. En een manier waarop jy dit kan doen, is om deur die gebruik van 'n do-while lus. En 'n do-while lus is basies 'n ander vorm van 'n lus waar alles wat binne die krulhakies kry ten minste een keer uitgevoer word. So hier, verklaar ek, int insette, buite eerste. En dan het ek net sê, doen dit opdrag terwyl insette is minder as nul. So dit treffers die Do eerste. Dit sal altyd voer dit ten minste een keer, so dit sal altyd vra die gebruiker vir insette ten minste een keer. En dan is dit evalueer wat insette, en dit gaan oor in 'n sirkel. Ja, bevraagteken? SPREKER 6: Is daar 'n manier om dit te doen [Onhoorbaar] tipes, soos as jy sê, GetString, en iemand [onhoorbaar] is daar 'n manier om te [onhoorbaar] Josef So die vraag is, is daar 'n manier insette validering te doen as die gebruiker nie in die regte tipe veranderlike? So as ons vra vir 'n int en hulle gee ons 'n string plaas. En in die funksies wat ons implementeer Vir jou, getint, GetString in al daardie funksies, wat hulle eintlik reeds doen dat die soort van basiese tipe insette validering onder die enjinkap. So as jy die gebruik van die funksies wat ons jou gegee het, jy het nie regtig om. Maar as jy wil meer te kyk na hoe jy eintlik kan doen, kan jy kyk onder die enjinkap by die lêer I/O-- nie lêer, die standaard I / O funksies soos 'n lees van die standaard insette en standaard produksie. En jy kan 'n beter begrip te kry van hoe jy dit doen. ROB: Een probleem, al is, is spesifiek met die voorbeeld wat jy gesê, jy verwag 'n string en ek in 'n int. Hoe sou jy die verskil tussen doelbewus wil die string 123 versus wil die int 123? So string, dit is redelik baie daar is geen goedgekeur is, is dit net wat hulle aangegaan sal jy interpreteer as 'n string. Int is makliker, want maak nie saak die insette wat jy neem uit die gebruiker, jy is altyd die neem van 'n string. En sodat string Jy kan dan kyk, is al hierdie eintlik numeriese syfers? Josef OK. Enige vrae oor 'n do-while lus? ROB: O ja, en dit is ook - terug te gaan na die omvang, 'n ietwat gemeen fout probeer om 'n plaaslike te gebruik veranderlike vanuit hierdie do-while lus binnekant van hierdie toestand. En eintlik, as ons net ontslae geraak het van hierdie en gesê int insette gelyk Getint, dan is die samesteller sal skree ons, want insette bestaan ​​nie buite die omvang van die hierdie krullerige draadjies. Josef, en dit is hoekom ons moet hierdie besetting hier. OK. So kan jy ook weg te breek van 'n lus vroeg as jy wil. So dit is 'n ander manier van die uitvoering van wat ons het net geïmplementeer word. En in plaas van die gebruik van die toestand binne die hakies gebruik ons ​​'n Indien verklaring binnekant van die liggaam van die do-while lus. En basies, wanneer die insette is uiteindelik groter as nul is, sal ons breek uit van die lus. En so sal ons almal gaan die pad af hier. En jy kan sien dat dit waarskynlik in hierdie verkies word scenario, want dit is 'n bietjie bietjie skoner en 'n bietjie bietjie makliker om te lees. Dat dit, jy soort van ekstra lyne in dit. Dit is net 'n bietjie minder mooi, Ek dink, in 'n sin. Ja, bevraagteken? SPREKER 4: sal breek net julle uit 'n stel van draadjies? JOSEPH: Right. So die vraag is net breek kry jy uit een lus? En die antwoord is ja. So as jy geneste Vir loops, vir Byvoorbeeld, as ek vir int Ek is gelyk aan 0 tot en met 10 en dan vir int J gelyk aan 0 tot en met 10, as ek breek uit die innerlike lus, ek sal nog steeds gaan na die buitenste lus. So dit sal hou die verrigting van die bedrywighede op die buitekant. Enige vrae oor wat? Ja? SPREKER 5: Maar breek net funksies vir krullerige draadjies, nie vir ander stellings? [Onhoorbaar] Josef So die vraag is sal breek enigste funksie vir sirkelroetes in teenstelling met ander state soos As? En ja, dit is die geval nie, want jy breek uit 'n lus, regs, in 'n sin. ROB: In die oorgrote meerderheid van gevalle, is dit dit is die soort van As iets, dan breek. So jy hoef nie te breek om aansoek te doen om die As wat wikkel rondom dit. En ook, dit is nie veel van 'n lus, maar onthou dat skakelaars is ook gebreek uit deur breek. Ons het gesien breek gebruik met skakelaars voor. Josef, en jy kan ook gebruik om hulle Terwyl in sirkelroetes en Vir loops. Enige vrae? OK. So Volgende is funksies. So jy kan een van hierdie BYOB gebruik het blokke in jou Scratch projek. En dit basies kan jy 'n stel van te definieer instruksies gevolg moet word. En wat ek bedoel met dit is laat dink Terug na wiskunde, regs, algebra. Jy het wat ons noem 'n funksie van x, sommige veranderlike, en laat ons sê hierdie funksie is f van x is gelyk aan x plus 5. So jy kan dink f van x as hierdie swart boks wat neem 15 in en dan produseer 20. Sodat meer algemeen, 'n funksie iets wat neem 'n paar insette en produseer dan 'n paar uitgange. En hoekom is funksies goed? Hulle is goed vir 'n aantal redes. So het iemand wil 'n steek te neem teen watter organisasie beteken? In terme van die rede waarom funksies is nuttig? Ja? SPREKER 4: Dit maak jou kode meer leesbare. JOSEPH: Right. So een van die dinge is dit maak jou kode meer leesbare, reg? In plaas van om soos int x is gelyk aan x keer x maal x, kan ek kubus van x, Dit is meer leesbaar en meer verstaanbaar vir 'n leser. Organisasie is ook in terme van verdeel jou kode in hanteerbare gedeeltes, sodat in plaas van om te implementeer dit alles in 'n lang artikel in die belangrikste, kan jy soort van verdeel dit in soos, OK, kom ons skryf 'n funksie iets te kubus, laat ons skryf 'n funksioneer om iets te vierkant. Die manier wat jy kan verdeel dit in klein, bietjie dele wat jy kan pak in teenstelling met die probeer om te pak 'n groot probleem in 'n keer. ROB: Of selfs klein ou dele wat jy en 'n maat kan pak. Josef Ja. ROB: So in plaas van albei jy probeer om een ​​te plant funksioneer op dieselfde tyd. Josef vereenvoudiging. Iemand wil 'n raaiskoot te neem? Ja? SPREKER 5: Meer herhaling. JOSEPH: Right. So een ding wat jy kan doen met vereenvoudiging is dat dit soort van op dieselfde lyne as herbruikbaarheid is dat een keer skryf ek 'n kubus funksie, dan kan ek net gebruik wat oor en oor en oor weer in my program in plaas van tik x maal x maal x oor en oor en oor weer. En vereenvoudiging hier ook net beteken dit maak jou kode soort makliker om te ontfout sodra jy verdeel hierdie up in funksies. Want dan kan jy lokaliseer waar jou probleme soort is. Enige vrae? So 'n idee is om onttrekking, reg? Hierdie swart boks. Soos jy weet wat getint doen toevoer van die gebruiker te ontvang? Ons het nie regtig vir jou gesê het, reg? Al wat ons het vir jou gesê is getint doen presies wat dit sê dit nie. So selfs as ons jou nie vertel hoe dit werk, jy weet nog steeds. So in hierdie geval, is dit 'n quadruple funksie wat nie verskillende dinge tot 'n toevoer 'n uitset te produseer. En jy kan 'n aantal quadruple deur dit te vermenigvuldig met vier. Of jy kan dit wat ons noem bietjie skuif dit deur twee. En ons sal dek hierdie 'n bietjie later. En daar is geen behoefte om te weet hoe om hierdie funksie werk eintlik so lank as wat dit werk soos aangedui. So onder die enjinkap, kan ek soos, terugkeer insette keer agt gedeel deur twee. En jy sal nie weet nie, reg? Al wat jy hoef te weet, is dit doen wat dit sê. So wat is die nuttige ding oor die onttrekking. En nog 'n ding is 'n soort van hierdie idee van die spoor van die kode na een spesifieke afdeling. So as jy 'n probleem het, moet jy dit nie doen nie het om te gaan oor jou kode probeer om vas te stel waar die probleem was. So in hierdie geval, ek geïmplementeer kubus verkeerd. Ek het gedink kubus is vermenigvuldig deur drie. So in hierdie geval, dit is 'n program dat net het vermenigvuldig deur drie oral. En daar is nog 'n program wat gekraakte kubus uit in 'n funksie. En so nou as ek wil my fout reg te stel hier, ek het elke enkele lyn te los van die kode in die program. Terwyl aan die ander kant, as ek die funksie, ek moet net om te verander wat verkeerd was in een plek. So in Rekenaarwetenskap, ons bel en uitgange. Insette parameters genoem of argumente en uitgange genoem terugkeer waardes. En ons sal sien hoe dit help ons soort van definieer 'n funksie in 'n tweede. So, dit is 'n funksie definisie vir cubing. So dit neem 'n inset, en dan dit gee dat die getal tye homself drie keer. So laat breek dit neer. So het ons 'n funksie kop, wat basies bestaan ​​uit drie dinge. So het ons die parameters, wat is, soos ek gesê het, die insette in hierdie funksie. En dan gee ons die funksie 'n naam. In hierdie geval, is dit genoem kubus. En dan het ons presies weet wat die tipe van die terugkeer waarde is. So in hierdie geval, my kubus funksie neem in 'n heelgetal en dit het ook stuur heelgetal. So as ek slaag in twee, twee is 'n heelgetal is, dit gee agt vir my, wat 'n heelgetal is. So terug tik naam parameters. Vrae oor wat? En dan is die terugkeer waarde is eintlik gespesifiseerde aan die einde deur te sê terugkeer en dan weer terug alles bevat die terugkeer waarde. So in hierdie geval, as ons dit alles saam 'n funksie neem in parameters, is dit genoem iets, en dit gee iets wat die tipe dat ons sê dit gaan wees. Enige vrae? So hoe kan ons gebruik om 'n funksie? Wel, ons skryf 'n funksie en dan Ons gebruik dit in ons program, reg? So ek het dit kubus, en dan kan ek gebruik kubus. Maar wat belangrik is om daarop te let is dat om sake. As ek 'n kubus hieronder hoof, is dit gaan loop in kubus. En op hierdie punt, daar is niks genoem kubus in die program, en dit is net gaan om te wees, ek het geen idee wat kubus is. So sal dit vir jou, implisiete verklaring van funksie. Dit is die fout wat wys. En so in hierdie geval, kubus is onder hoof, sodat dit nie gaan om te weet oor dit. SPREKER 5: So belangrikste is gewoonlik die laaste funksie gedefinieer? Josef So die vraag is, is die hoof gewoonlik die laaste ding wat jy wil definieer? En nee. Dit is omdat ons gewoonlik graag hoof te wees by die top, reg? Want dit is die eerste ding wat jy wil hê dat die programmeerder die opening van die program te sien. En so hoe kan ons los hierdie uitgawe van ons wil hoof te wees by die top, maar die funksies wat ons wil hê, ons wil hê dat hulle te wees onder belangrikste nog in staat wees om te gebruik hulle binne-in van die belangrikste? Wel, ons gebruik wat ons noem 'n funksie prototipe. So, wat 'n funksie prototipe wese is, is dit die eerste keer neem wat die handtekening of die funksie kop van wat ons wil uit te voer af hier, en ons het dit op die top van 'n program. So in hierdie geval, sê ons dat, wel, later in ons program, ons gaan 'n belofte om dit te implementeer te maak funksie genoem int kubus, wat neem 'n heelgetal insette. So nou, want dit is bo hoof, hoof, dit gaan om te sê, O, goed, later in die program, wat gaan wees daar sodat ek kan verwys na dit, so ek sal laat dit net gaan deur vir nou. En dan aan die onderkant, Ons implementeer kubus. En dan sal hoof net sê, Wel, sal dit soort van skakel hierdie twee simbole saam. En ons sal dek wat dit beteken later. En so het dit sal weet dat dit die kubus funksie wat dit moet gebruik. ROB: Die [onhoorbaar] oor wil hoof aan die onderkant of top, ek het albei gesien. Daar is dinge wat net soos hoof aan die onderkant te sit. Maar een keer 'n projek kry veral groot, gewoonlik hoof is in 'n dien al sy eie. En op daardie punt, soos die int kubus lyn sal - binnekant van stdio.h n klomp lyne, net soos wat int kubus int insette lyn. En so die voorlopers is dinge wat jy geneig is om te sit in kop-lêers, op watter punt, beteken dit nie saak nie. Wel, dit maak nie saak nie. Diegene altyd aan die bokant. En as hoof is nie 'n lêer van al sy eie, jy hoef nie te bekommer oor om individuele funksie prototipes in die lêer. Josef, en ons sal kry om 'n bietjie bietjie later, toe Rob begin praat oor die samestelling. En so is daar ook 'n verskil tussen parameter en argument. En parameter is net wat Ons noem hierdie insette wanneer Ons definieer die funksie. En ons noem dit 'n argument wanneer ons eintlik slaag dit in die funksie. So in hierdie geval, dit is 'n parameter, Soos ons vantevore gesê. En wanneer ons dit werklik te gebruik daar, kubus van x, dan is x self is wat ons noem 'n argument om die funksie kubus. ROB: So parameter se argumente is - daar is hierdie onderskeid, baie verwar verwissel. Op hierdie punt, vir my, is dit soos een van die woorde wat toe ek sien dit in die wild, ek kan nie help nie, maar onmiddellik vraag of hulle gebruik dit in die korrekte konteks, omdat die verskil is subtiel genoeg dat net almal is geneig om - Ek sê byna altyd argument ongeag van wat ek bedoel. Josef, en funksies is ook nuttig vir wat ons noem die newe-effekte. So 'n funksie kan geen insette, en Dit kan ook produseer geen uitgange. So in hierdie geval, is ek definisie van 'n subroutine wat geen terugkeer waarde. En om dit te spesifiseer, gebruik ons wat ons noem 'n leemte hier. En so het die newe-effek van hierdie funksie is dat dit net druk dinge uit na die bladsy. Dit maak nie eintlik neem enige insette, en dit nie eintlik produseer enige uitgange. Maar dit kan in die sin nuttig wees As jy wil, byvoorbeeld, debug iets in jou program, as jy wil 'n bietjie subroutine te skryf wat druk uit, kom ons sê, die inhoud geheue of iets. En so hierdie newe-effekte is soms nuttige buite die konteks van net graag insette en uitsette. Enige vrae? En hierdie spesifieke segment te beëindig, Wat beteken hierdie program doen? Ek gee julle 'n paar sekondes deur dit te lees. Op 'n baie basiese vlak, wat ons wil sê, is dat dit swaps x en y, reg? So hoeveel van julle het eintlik dink dit sal x en y ruil? Lig jou hand. Niemand. OK. Wie dink dat dit sal nie x en y ruil? En die bedrag van wat nie die hele kamer. So 'n paar mense is nie seker nie. OK. Dit is redelik. So laat ons gaan deur wat gebeur wanneer jy funksies eintlik eerste oproep in Om hierdie vraag te beantwoord. So dit is wat die geheue soort lyk. Dit is soort van soos 'n vereenvoudigde model van wat die geheue lyk soos wanneer jy 'n program. So daar is iets genoem die stapel hier en iets genoem die hoop. En dit groei na die middel van die geheue. So in hierdie geval, wanneer jy noem 'n funksie is, is dit kry op die stapel. En dan ook al is vervat in daardie funksie bly in wat ons noem dat funksie se stapel raam. En so 'n mooi visualisering te kry hierdie, let's - byvoorbeeld, het ons die program hoof vroeër. En binne-in van die belangrikste, ons noem kubus. So hoof sal eerste gaan op die stapel raam, want dit is die eerste funksie Dit is genoem. En dan wanneer kubus binnekant van die naam hoof, word dit op die top van die belangrikste binnekant van die geheue. So, wat jy hier sien is dat kubus het sy eie parameters en sy eie plaaslike inwoners. So wanneer jy eintlik iets slaag om 'n funksie, die parameters dat dit kry afskrifte van wat was geslaag in uit die hoof. En soort van verduidelik, laat loop deur 'n program. So het ons die stapel; dit is net die stapel gedeelte. En wat ons doen, is ons eerste inisialiseer x en y aan die een en twee. So ons het hierdie klein bokse. Hulle is in die belangrikste se stapel sit raam op die stapel. Hulle bevat een en twee. Nou noem ons ruil. Wat gebeur is dat ons slaag x en y in ruil, en ruil skep sy eie kopieë van daardie veranderlikes binne gebruik van sy stapel raam. So nou daar, ons het 'n, wat bevat die waarde wat x het, en b, wat bevat die waarde wat y het. So een, twee. En jy sal sien dat dit 'n afsonderlike van x en y binnekant van hoof. So het ons nou 'n tydelike veranderlike 'n te bevat. Ons het 'n gelyk aan B, dus is dit veranderinge vanaf een na twee. En dan sit ons b gelyke te temp, wat een. En dan nou stop uit ons van hierdie funksie. Wanneer jy die uitgang van die funksie, die stapel raam kry inloer die stapel. Ons noem dit stoot. Jy stoot 'n stapel raam op die stapel en jy pop as uit die stapel. En so wat gebeur, is alles wat was in daardie stapel raam soort van net gaan in vlamme op. En sodat nie meer bestaan ​​nie. Maar wat sien ons? Ons het nog nooit werklik verander die waardes van x en y, reg? So diegene gebly plaaslike na. En deur 'dinge in ruil, ons eintlik nooit daardie waardes verander. En wat noem ons dit? Ons noem hierdie verbygaande waarde. So in C, wanneer jy dinge in funksies, is dit verby hulle deur waarde en maak 'n afskrif van hulle vir die funksie te gebruik. En ons sal leer oor iets genoem verby verwysing later, maar dit is 'n manier wat jy kan hierdie probleem op te los. Maar ons sal nie bekommerd wees oor wat tot later. ROB: En eintlik, die term, verby deur verwysing nie so C nie eens verby verwysing. C uitsluitlik het verby waarde. Maak nie saak wat jy doen, jy is altyd verby 'n afskrif van iets. Dit is net dat, soos ek soort van genoemde wat voor met wysers en dat 'n string is regtig net vier grepe wys na iewers in die geheue. Wel, as ek hierdie string en dit is vertel my dit is waar die string - Wel, as ek dit wyser om hierdie plaas in die geheue, dan kan ek verby 'n afskrif van daardie wyser na 'n funksie, en daardie funksie nog steeds weet waar in geheue is. So beide van hierdie wysers wys na dieselfde plek in die geheue, en dit is hoe ons gaan in staat wees om dinge wat buite die te verander huidige stapel. Josef Wil jy om te doen die opstel? ROB: Nee, dis 05:30. Josef OK. Dit is 05:30. OK. So sal ons dek die opstel Ek dink in die volgende artikel, of jou artikel leier op daardie tydstip. En - ROB: Enige vrae? Josef Enige vrae? Ja? SPREKER 5: Gebruik snare van CS50, enige funksies wat ons wil gebruik vir diegene, sal dit wees soos C funksies. CS50 het nie in en gegaan gemaak om enige bykomende. ROB: Korrekte. Enige van die C soos [onhoorbaar], het jy sou gebruik wat op ons snare. Josef, en een laaste ding wat ek wil noem, is dat ons 'n styl gids vir hierdie klas. ROB: O, ja. Josef So as jy kom uit 'n programmering agtergrond voordat jy dalk sekere konvensies wanneer jy kode skryf soos om draadjies op dieselfde lyn of bepaalde maniere van insp of die name van jou veranderlikes. In hierdie klas, ons wil om te volg 'n spesifieke styl gids net omdat, Wel, as jy gaan uit en werk in bedryf, is jy verwag gaan die styl gids van die te volg maatskappy waar jy gaan. Soos byvoorbeeld Facebook Ek dink het 'n besondere soort van noem konvensie. En daar is verskille tussen die kameel omhulsel veranderlikes en net soos skei hulle met karakters. En ook, ek dink die belangrikste, soos byvoorbeeld, inkeping, reg? Ons krulhakies begin waar die toestand is, en hulle is op die volgende reël. En ons sit ook krulhakies in selfs al is dit net een lyn. En 'n baie tye, is daar maniere om te doen dit waar jy die draadjies kan laat af is dit net een reël onder die As verklaring. Maar in hierdie klas, ons wil om te volg 'n spesifieke styl gids net so jy gebruik om daardie soort van ding. ROB: Ja, en die styl 50 gaan dwing hierdie styl gids, en ons is gaan Style 50 te gebruik tot graad jou kode. So dit maak dinge makliker vir ons en hopelik nie moet maak dinge wat veel erger vir jou gegee gestandaardiseerde styl moet nie wees dat onrealisties. Josef, en uiteindelik, om die styl te vind gids, gaan na manual.cs50.net/style. En ja. SPREKER 4: Is jy gaan af te dwing enige karakters per lyn? ROB: Ja. Josef Jammer, ouens. ROB: Dit is soos een van die enigstes. Op hierdie punt, ek is OK met 120. Ek is OK met gesê 120 karakters per lyn. Ek verstaan ​​dat daar 'n paar limiet. Ek dink 80 is so klein, maar ons af te dwing. Josef Persoonlik dink ek met C, 80 karakters is meer OK. Sodra jy begin om na ander tale soos JavaScript en PHP, nie so redelike net beperk dit tot 80 karakters. OK. Wel, dit was die super-afdeling. Is daar iemand wat wil lekkergoed? SPREKER 4: Ja.