>> [Prehrávanie hudby]
>> DAN AMRMENDARIZ: Každý, vitajte na CS50 seminár,
iOS App Development s Swift.
Som Dan Armendariz, a ja som učiteľ informatiky tu na Harvarde.
>> A ďalšie hodina bude víchrica prehliadka toľko vecí
o tejto téme, ako sme sa vojde.
Budem sa po celý zdrojového kódu že budete vidieť online ešte dnes.
Mohli by sme neboli schopní skutočne ísť nad všetkým
že som, že som ukáže vám v tejto hodine.
Ale aspoň dúfam, že prostredníctvom pripomienky zdrojového kódu,
budete môcť pokúsiť sa zistiť, čo presne sa deje na tie veci
že nemáme dosť dostať.
>> Celkovo možno povedať, štruktúra dnešná diskusia bude nasledujúci.
Začneme sa robiť niektoré základné syntax s jazykom Swift,
ísť do niektorej z viacerých pokročilých Syntaxe Swift jazyka.
Vzhľadom k tomu, jazyka je naozaj moderné a to
má veľa vysokej úrovni rysy, veci, ktoré máme nie
je vidieť na C v celej CS50, alebo Dokonca aj niektoré iné jazyky
že sme začali použitie v CS50 ako je PHP,
takže budem musieť pokúsiť zaviedli aj niektoré témy, ktoré
sú vztiahnuté k jazykoch vyššej úrovne že nemusíte vidieť do hĺbky v CS50,
ale uvidíte neskôr počítačovej vedy triedy.
Takže to Bude to zhutnenie hodinu.
A prosím, neváhajte ma nechať vedieť, ak máte nejaké otázky.
Takže ak máte záujem v tom rozvoja
s Swift, alebo naozaj akýkoľvek iOS pre vývoj aplikácií,
existuje niekoľko požiadaviek.
Po prvé, musíte používať Mac, bežiaci v príkladoch
že budeme používať dnes, relatívne nová verzia operačného systému
X. V tomto prípade, bežím X 10.5.
Môžete byť spustený 10.11, ak chcete.
Ale všetko, čo budete pozri zapája Xcode 7 a novšie,
ktorý má najnovšiu verziu Swift, ktorý je swift 2,0.
To je vlastne celkom dôležitý rozdiel.
Veľa syntaxe má zmenilo docela významne
v niektorých prípadoch od Swift 1.0, ktorý bol prepustený v minulom roku,
na Swift 2.0, ktorý práve vyšiel tento rok na jeseň.
Takže ideme ukázať Swift 2.0.
Veľa vecí, ktoré hľadáte pre online
keď sa snažíte dostať ďalšie informácie o rôznych vecí,
možno budete chcieť explicitne vyhľadávať Swift 2
skôr než len obyčajný starý Swift, aby sa uistil, že dostanete syntaxe správna.
>> V skutočnosti je tento všeobecne platí.
K dispozícii je rýchly množstvo vývoja deje v Swift jazyku
Od tej doby Apple to prepustený, myslím, čo, je to už niečo cez rok
teraz.
A veci sa zmenili dramaticky v tom čase.
A tak nebuďte frustrovaní ak, keď ste rozhliadať
pre tém na Swift alebo ako dosiahnuť niečo, pomocou niektoré príklad kódu
alebo niečo, že to tak nie je skutočne pracujú na Swift 2.0.
Uistite sa, že ste hľadali špeciálne pre túto verziu
pokúsiť sa minimalizovať efekty rôznych verzie a tie druhy vecí.
>> Budem sa snažiť poukázať len niektoré veci ktoré sa budú líšiť, aby staršie verzie.
Ale je to niečo, čo si dať pozor.
To asi bude jeden z najväčších bolestí hlavy
že budete mať s Swift je zistenie, príklad kódu, ktorý je starší, aj len
o pár mesiacov, sa snaží používať to v modernejšom projektu.
A to jednoducho nefunguje.
Začínaš chyby kompilátora, syntax Chyby, všetky druhy bláznivé veci.
Takže jednoducho byť pacient s že, a dúfajme, že budete
majú celkom pekné zážitky s Swift celkovo.
>> Teraz môžete skutočne join-- a ja dúfam, sme vlastne ešte This rok--
CS 50 je Apple app vývojový tím, ktorý
vám umožní inštalovať žiadne aplikácie ktorý vytvoríte na vašich zariadeniach so systémom iOS.
Takže sa pozrieť na túto adresu URL, ak máte záujem o tom, že.
>> Takže len pár veci, o Swift sám.
Jedná sa o zostavený jazyk.
Ale uvidíte, že niektoré z funkcií, ktoré používame
tomu, aby mohla byť použitá aj v trochu ako interpretovaný spôsobom rovnako.
>> Mnoho syntax je požičal z C. Je založený a napísaný v jazyku C.
A tak sme sa vidieť, že existuje veľa takeaways
z vašich súčasných znalostí z C, ktorý môžeme port Swift.
>> Ale sú tu veci, ktoré robiť to veľmi odlišné od C
Je to veľmi silne zadali.
K dispozícii je automatická správa pamäte.
Nebudete musieť používať malloc alebo zadarmo kdekoľvek.
Je určený pre univerzálnosti.
Takže inými slovami, môžete ho použiť v najrôznejších kontextoch a situáciách, od Apple Watch
iPhone celú cestu až do OS X, a dokonca aj niektoré servery, dokonca aj niektoré skriptovanie.
Ale uvidíme, že podpora pre skriptovanie
nie je tam ešte dosť as to je v iných jazykoch.
Takže s najväčšou pravdepodobnosťou budete používať to výhradne pre rozvoj
na počítači Mac alebo iPhone.
>> A to má veľa moderných prvkov.
A mnoho z týchto vecí sú veci, ktoré budeme sa snažiť riešiť dnes,
ale aj naše témy, ktoré úprimne povedané, môžeme venovať celé kurzy.
V skutočnosti, CS 51, ktorý je ponúkol ďalšie semester,
sa zameriava veľa na týchto témach , Ktoré sú popísané nižšie.
Takže môžete stráviť celý semester pochopenie týchto vecí.
Ale budeme sa snažiť dostať cez ne
aspoň tak, že vás môže pochopiť, čo je
deje, keď sa pozriete na Swift programu
a musí byť schopný zaseknúť svoju cestu cez to pre finálnu projekt.
>> Teraz jeden z najlepších spôsobov, ktoré môžete získať ďalšie informácie na túto tému
je úprimne povedané práve prostredníctvom Apple za predpokladu, dokumentáciu k Swift.
Je tu veľa API ktoré sú k dispozícii.
A to je dobrá domáca základňa pre vás hľadať, konkrétne veci, ktoré
chcete urobiť s API zahŕňajúce iOS.
Ak chcete používať fotoaparát príklad, môžete začať hľadať tu,
a tiež používajú Google a Stack Overflow, ako by ste normálne.
>> Akékoľvek otázky týkajúce sa tejto predtým, než sme sa skočiť priamo?
Dobre.
Poďme ďalej.
>> Takže najprv, mám Počet napríklad súborov.
A budem sa snažiť do kroku cez ne relatívne rýchlo.
Toto je súbor Ahojte všetci pre Swift.
Je to veľmi jednoduché.
Je tu oveľa viac komentáre ako existujú konkrétne kód.
Všimnite si, že skutočná kódu je na samom dne na riadku 14.
To hovorí, že tlač.
A potom je to volanie funkcie.
Sme prechádzať do nej Reťazec s názvom Ahoj CS50.
Všimnite si, že je žiadne bodkočiarkami.
Všimnite si, že nie je int main.
Je tu žiadny z Cruft, že sme mali s C.
Keď sme pomocou Swift týmto spôsobom, ktorý je práve napísal v textovom súbore
a uložené na mojom počítači, potom Môžem skompilovať a spustiť ho.
>> Všimnite si, že tu nie som nepoužívate CS50 IDE.
To predpokladá, že som beh a že som na OS X,
a že som Xcode už nainštalovaný Na tomto stroji, aby pre tento
skutočne funkciu.
Ale to je len normálne textový súbor že sa potom môžeme zostaviť a upravovať.
Tak uvidíme, ako to vlastne funguje.
Čo keď chcem, aby to kompiláciu?
swiftc 1.swift.
Po chvíľke alebo dvoch, to uvidí, že máme teraz
zostavil toto do súboru s názvom 1.
A teraz sme tlačený našu CS50, naše Hello World aplikácie trochu.
>> Všimnite si jednu vec ako dobre, je, že v predvolenom nastavení,
sme nemali zadávať a / n vytlačiť nový riadok.
Štandardne je funkcia v tlači Swift vytlačí novú linku pre vás.
Môžete odovzdať fakultatívny doplnková Parameter to povedať, že tak neurobí.
Ale Google pre viac informácií o to.
V predvolenom nastavení, bude to robiť tlačovú linku.
>> Dobre, tak poďme ďalej potom sa na niektoré iné.
Tak ako môžeme vlastne definovať premenné?
Môžeme si robiť, že je to za použitia jednej z dvoch metód.
A ten, ktorý chcem vám povedať, o Prvým z nich je táto definícia rokov.
A to je dôležité pretože účinne
to, čo robíme, je definovanie konštantu.
Chystáme sa vytvoriť premennú, alebo skôr konštantný s názvom názov,
poskytovať k nej niektoré data-- v Tento prípad, reťazec Dan.
Ale pomocou tohto ROKOV kľúčových slov, hovoríme
že tento proměnná-- alebo Znovu constant-- nazvaný
meno je nikdy byť zmenený.
Je to bude nemenná po celú dobu doba trvania tohto programu
alebo po celú dobu trvanie kontextu
že táto premenná je k dispozícii.
>> To je veľmi dôležité, že keď máte nejaké dáta, ktoré nie sú
sa zmení vo vašom programe, a uvidíte celý rad príkladov
o tom, kedy chceme použiť nechať proti druhej syntaxe
je dôležité, aby ste používali nechať všade tam, kde je to možné, pretože to prináša informácie
jazyk, ktorý je nebude zmenený,
a môže v skutočnosti vykonať veľa optimalizáciou
zlepšiť rýchlosť a bezpečnosť vášho programu.
A bezpečnosť, myslím nenechám že havárie s bláznivými chybami
že by sme mohli byť zvyknutí vídať v C.
>> Potom môžeme použiť reťazec interpolácie zapouzdřit to v reťazci.
Takže môžeme vidieť v tom print linka, tlač ahoj,
a potom pomocou spätného lomky otvorených parens, a potom meno môjho premenné,
v tomto prípade konštantný, zatvorte zátvoriek.
Ja som v podstate potom dosadení Obsah tejto premennej s názvom meno
vnútri reťazca a potom tlač tam výsledok.
>> Je tu ešte jedna ďalšie zmeny tohto súboru čo je to, čo mám, na samom vrchole,
dal do shebang líniu, ktorá v podstate len špecifikuje
že chcem použiť Swift interpret, ktorý
Znamená to, že som sa už nemusí zostaviť tento konkrétny program.
Môžem len spustiť ho ako jeho vlastného scenára.
Ale to je v tomto prípade, za scény zhromažďuje a potom
spustený.
Je to len na nás neviditeľná.
>> Dobre, tak poďme ďalej.
Takže tam to trochu podvodu že sa práve stalo predtým.
Ukázal som ti, že mohli definovať konštantu.
A ja som mohol poskytnúť niektoré údaje na to.
Ale v tomto prípade, si všimnite, že som to neurobil v skutočnosti určiť typ dát
že to je.
A to preto, že kompilátor, Swift môže
odvodiť typ dát len ​​na základe Na základe údajov, ktoré som do neho.
Pretože vie, že na základe vyhodnotenia tejto variabilný tu, tieto dáta vpravo
tú, to vie, že je reťazec.
A tak táto konštanta meno teda bude reťazec rovnako.
>> Ale môžeme byť aj explicitné o type, ktorý je
budeme používať pre konštanty alebo premenné
pomocou tejto syntaxe instead-- nech názov hrubého čreva String rovná
Dan, čo v tomto prípade znamená, že sme bude definovať konštantný názvom meno.
Bude to byť typu String.
A hodnota bude Dan.
Teraz na druhú stranu, ktoré môžeme vytvoriť variables--
a to sú meniteľné premenné, ktoré znamená, že sú v skutočnosti deje
zmeniť ich obsah niekedy v trvaní kontexte
že táto premenná je defined-- my pomocou kľúčového slova var miesto prenájmu.
Ale opäť, v predvolenom nastavení, ak neviete, že je potrebné manipulovať, že dáta,
skúste použiť nechať pre zlepšenie výkonu.
>> V tomto prípade, môžem potom špecifikovať typ dát
že očakávame, že budeme vo vnútri táto nová premenná s názvom štítok.
Bude to byť reťazec.
A budeme sa spojíte dva reťazce dohromady, reťazec ahoj,
a reťazec predstavovaná variabilné, alebo skôr konštantný názov.
>> Takže to je pekné, pretože to je trochu PHP ako v tej my
majú veľmi jednoduché reťazenie reťazcov.
Nemáme automaticky použiť ľubovoľný druh pamäťového riadenie
zväčšiť veľkosť a robiť nejaký druh smiešnych vecí tam.
To funguje ako by sme vlastne očakávať.
>> Dobre, nejaké otázky o tom myslíte?
>> Teraz sa ďalší dôvod, prečo potrebujeme, budete mať možnosť
aby bolo možné definovať, čo typ dátových premenných
Je to preto, niekedy nie Chcete inicializovať premenné
s niektorými dát na bod definície.
Takže v tomto prípade, povedzme že chcem začať zadanie
Niektoré stupňa do úrovňovej knihu.
No ja viem, že jedným z premenné, ktoré chcem byť
sa chystá byť premenlivý stupeň.
A vieme tiež, že my chcem, aby to bolo celé číslo.
Ale možno my doteraz majú, že stupeň k dispozícii.
>> V Swift, musíte definovať typ dát
ktorý je spojený s premenná alebo nechať na konštantnej
Ako môžete skutočne použiť túto premennú.
Vzhľadom k tomu, že je silne napísaný, budete musieť pripojiť typ
s týmito premennými.
>> Takže v tomto prípade, ak som správne inicializovaná najprv s nejakú hodnotu,
potom musím povedať, čo Swift Očakávam, že typ dát byť.
A to bude aj naďalej že rovnaký typ dát
v celej histórii tohto programu.
>> Teraz môžete byť v pokušení, akonáhle Vytvoril som tento stupeň premennú
a ak ju má celé číslo 100, teraz, ak I
chcete skúsiť zřetězit reťazec s týmto celé číslo,
by mohol byť v pokušení aj naďalej používať že prevádzkovateľ reťazec zreťazenie
ako sme to urobili len pár riadkov predtým.
Ale bohužiaľ, Tým sa vlastne nie je
pracovať, pretože ste v podstate vykonáva
operácie na dvoch rôznych typov.
>> Teraz je to veľmi odlišné od iných jazyky ako PHP, ktoré sú naozaj
loosey Goosey s ich druhom typov.
Sú rovnako ako, jo, čo, je mi to jedno.
Daj mi jeden typ, a možno budem robiť správnu vec.
>> V tomto prípade, je Swift veľmi prísna o typoch
že máte čo do činenia s.
Tento operátor zhrnutie alebo operátor zreťazenie
má v podstate niekoľko rôznych možností.
Môžete to urobiť zhrnutie s celými číslami, alebo
môže robiť zreťazenie, a možno niektoré ďalšie veci rovnako.
Ale ak tento subjekt neuznáva čo je na jednej strane toho,
alebo skôr ich kombináciu dva druhy, nie je to, čo to je očakával,
potom to bude spôsobiť zlyhanie.
>> Takže v tomto prípade, čo to znamená mať reťazec plus celé číslo?
Výhodne v kontexte toho sme pravdepodobne chcieť
urobiť operáciu reťazec zreťazenie.
Ale samozrejme je počítač nemá tento druh kontextu.
A preto je treba poskytnúť že dodatočné informácie
aby mu vedieť, čo to je to, že chceme robiť.
>> Takže inými slovami, skutočnosť, že Swift je silne zadali
znamená, že musíte urobiť trochu ďalšej práce
aby si to k prevádzke tak, že by ste chceli.
Avšak v dôsledku toho, že je bezpečnejšie.
A až budete mať vziať do úvahy tieto typy,
veci jednoducho úprimne začať sa celkom dobre fungovať.
>> Takže v tomto prípade, a potom by sa nám vykonať zreťazenie
výslovným odlievaním celé číslo do reťazca
od zabalením do tejto kapitál funkcie S String,
a potom pomocou metódy zreťazenie operátor zmeniť našu štítok premenné,
a potom ho vytlačiť.
>> Zatiaľ je všetko dobré?
Dobre, poďme ďalej.
>> Teraz existuje celý rad údajov typy, ktoré môžeme použiť v Swift.
Ako ste si zvykli na, môžeme vytvoriť premenlivý poľa.
Iba A to pole môže obsahovať jediný typ.
>> Takže v tomto prípade, budeme vytvárať mutabilní pole celých čísel, ktoré
budeme nazývať známky, a my budeme schopní pre ukladanie, že v tomto hranatých zátvorkách
Formát ako ste Zvykli v rôznych iných jazykov.
Ale všimnite si, že tu sme definuje niekoľko vecí.
stupňa je premenlivý proměnná-- nebudeme používať nechať kľúčové slovo.
Takže to znamená, že môžeme potom upraviť Obsah tohto poľa.
To je typu Array Int, a môžeme povedať, že
na základe tu týchto hranatých zátvorkách.
>> Teraz jeden z pekných vecí na tom je, že sme
majú prístup na mnohé Ďalšie informácie
o pole len pomocou niektoré jednoduché bodka notácie.
Tak napríklad, grades.count poskytuje nám
počet položiek, ktoré existujú v tom, že pole, ktoré potom môžeme pristupovať pekne
ľahko jednoducho pomocou tejto dot notácie.
>> Ak chcete pridať ďalšie položky na tomto poli,
nemôžete robiť štýl PHP kde stačí explicitne definovať,
pri danom indexe, nejaká hodnota ktoré chcete vložiť.
Namiesto toho použite append metóda v type poľa
pripojiť tejto položky, 95, do tohto zoznamu.
>> Takže teraz to pole má nasledujúce contents-- 100, 0, 90, 85.
A teraz sme pripojený 95 sa, že rovnako.
>> Existujú aj iné spôsoby môžeme pripojiť veci.
Môžete skutočne používať operátor sčítania,
ktorý bude interpretovaný ako operácie pole pripájací.
A potom môžete pripojiť ďalšie pole, ktorého obsah je 70 a 80,
do tejto matice.
Takže teraz máme obsah v tejto premennej
grades-- 100, 0, 90, 85, 95, 70, a 80.
To je len pekný malý syntaxe cukor, ktorý Swift poskytuje k nám.
>> Takže ak chceme sčítať stupňa, sme snáď
bude chcieť opakovať nad každú položku v tejto slučky.
A my to majú v Swift, pojem zo slučky for, ako by ste očakávali.
Ale spôsob, akým sme naznačujú, rozsah sa mierne líšia.
Takže v tomto prípade, aby Stručne povedané všetko, budeme
chystáte vytvoriť dočasný premenná nazýva suma, aby nás
udržať tento počet.
>> A všimnite si našu FOR stavba tu slučka.
Pre index v 0 .. <grade.count.
Takže táto konštrukcia, 0 .. <grades.count je rozsah operácie, kde sme
hovorí, že budeme vytvárať rozsah čísel od 0 nahor
sa ale s vylúčením grades.count.
Takže to bude mať hodnotu 0, 1, 2, 3, 4, 5, až do avšak mnoho jeden
Pred grades.count.
>> Takže toto je niečo iné ako to, ako sme sa sa zvyčajne používajú pre slučky
tam, kde by ste mať nejaký index premenná, nastavte ju na hodnotu 0 na prvý,
a potom integrovať že až niektorí hodnota menšia ako počet položiek
v tomto poli.
>> Takže tam je modifikácia k tomu, v skutočnosti,
čo nám umožňuje veľmi ľahko nastaviť rôzne typy rozsahov.
Ak zmeníte tento rozsah do tri bodky, 0 ... grade.count,
to predstavuje rozsah 0 na grades.count vrátane,
čo znamená, že toto číslo je tiež potom zahrnuté v tomto rozsahu.
>> Ale to je veľmi šikovný Pre tieto presné veci,
keď máme vykonať iterácie cez slučku
pretože tieto indexy sú indexované nula, ako sme videli v iných jazykoch
tiež.
Akékoľvek otázky týkajúce sa tejto pre slučke?
>> Takže tam je implicitná definícia tohto indexu premenné,
ktorých hodnota začína na 0, a pokračuje v každej slučky iterácii
zvýšiť o 1 až do bodu, ktorá sa rovná grades.count,
na ktorom mieste, slučka preruší.
>> Všimnite si, že v našom reťazci Interpolácie tu,
skutočne môžeme vykonať niektoré jednoduché manipulácia na tieto hodnoty.
Takže index plus 1 budú skutočne vykonať zhrnutie uvedené hodnoty
preto, že index je, v Tento prípad, celé číslo.
A v tú chvíľu, že bude potom byť prevedená na reťazec
a interpolovať do tohto reťazca tu, a vytlačiť tak, ako by sme očakávali. ,
>> A pekná vec o pole je tu
že sme tiež schopní mať Načítanie hodnôt a nastavenie hodnoty
pomocou hranatou zátvorku zápis ako sme videli v iných jazykoch.
>> Dobre, takže odtiaľto, máme teraz vypočítať náš súčet všetkých našich tried.
Teraz druh budúci logickým krokom by bolo
urobiť operáciu divízie nájsť sa priemer týchto tried.
Ale niečo dôležité Tu sa deje, ktoré
je to, že táto suma je možná celé číslo.
Ale my potrebujeme vykonať niektoré druh dvojitého divízie.
A to bude nesmierne dôležité, keď
Chceme na vykonanie tejto operácie, pretože to, čo hovoríme
je to, že musíme skutočne vykonať rozdelenie na dve dvojlôžkové.
A znova, pretože Swift je veľmi silne napísaný,
musíme explicitne nastaviť všetky položky k štvorhre predtým sme vlastne
vykonanie tejto operácie.
>> Tak, aby pre nás vykonávať dvojaký rozdelenie,
že to nie je dostačujúce len jeden z týchto položiek za double.
Obaja majú byť double v poradí pre SWIFT
byť istí, že tento je to, čo chceme robiť.
Tak sme sa potom explicitne obsadiť suma, ktorú sme vypočítaný vyššie
a počet tried až zdvojnásobí, a vykonajte tejto operácie a obchod
že do tejto novej premennej, alebo skôr táto nová konštanta s názvom priemer,
ktorý bude mať aký typ, si to predstaviť?
Dvojlôžková izba, jo.
Takže v tomto prípade sme Nemusíte to špecifikovať
pretože to môže byť odvodená z Prevádzka aký typ priemere dát
bude.
A Swift je všeobecne celkom dobrý o tom, že schopný odvodiť typy.
>> Chcete vidieť bežať, alebo môžem ísť ďalej?
Chcem ísť ďalej.
Akékoľvek otázky týkajúce sa niečo z toho?
Skvelé.
>> Teraz budeme začať sa dostať do dobré stuff-- definovanie funkcií,
a niekoľko ďalších typov, ktoré sú jedinečné Swift, že nemáte
videný v iných jazykoch až do tohto bodu,
ale sú prítomné v inej jazyky, ktoré môžete nájsť neskôr.
Takže prvé, ak chcete, pre definovanie funkcie,
ju definovať spoločne s funky slovom funkcie, a potom názov funkcie,
a potom sa v zátvorkách, argumenty Chceme, aby funkciu prijať.
Tieto argumenty musia tiež specify-- generally--
musí tiež určiť typ dát, ktorá sú, ak možno vyvodiť.
A uvidíme, že len málo námietka v len trochu.
>> Takže v tomto prípade máme Funkcia tzv printGradeCount.
Budeme akceptovať proměnná-- alebo skôr v tomto prípade,
constant-- volal zadávanie známok.
A to bude mať zadajte pole celých čísel.
Teraz je tu niečo, že je naozaj dôležité tu
že chcem, aby ste pochopili.
To je to, že v predvolenom nastavení, sú tieto argumenty ktoré sú vstupy do tejto funkcie je
definované s implicitné nechať kľúčové slovo, čo znamená, že nemôžem zmeniť to
gradebook variabilný tu.
A to nejako dáva zmysel, pretože ste odovzdávanie dát dovnútra.
A možno to nechcem ktorý sa má zmeniť z pod tebou.
Je možné výslovne uviesť že sa jedná o premennú tým, že
VaR kľúčové slovo tu.
Ale to je chyták, že sme všimol ľudia robili v minulosti
je, že sa predpokladá, že to bude byť premenná, keď v skutočnosti to
je konštanta.
>> Dobre, takže tu potom, v tomto prípade, nie sme určujúce žiadny typ návratu.
Ukážeme vám, ako na to že za chvíľu.
Ale všimnite si, že tu máme len jednoduchý, ak stavu.
V prípade, že je gradebook prázdny, čo v tomto prípade
je len vlastnosť tohto integer poľa, potom vytlačiť niečo.
V opačnom prípade budeme robiť niečo iné.
>> Veľmi jednoduché tak ďaleko myslím.
Ale ma zastaviť, ak máte nejaké otázky.
>> Teraz je táto funkcia, priemer, tiež berie niektoré parametre, alebo skôr jeden argument,
čo je gradebook, a tentoraz sa chystá vrátiť dvojaký typ.
Vzhľadom k tomu, že je výpočtovej priemer a to je
bude skutočne vrátiť, že Vypočítaný priemer volajúci linky.
>> V tomto prípade sme špecifikovať vrátiť typ po šípkou.
A to môžu cítiť trochu divný na prvom mieste.
Vyrástol si zvyknutá na stanovenie návrat
zadajte pred názov funkcie.
Ale ak si myslíte, že to čo sa týka matematiky,
ako keď máte matematiku , Ktoré definujú funkciu,
máte funkciu s niektorými vstupy, a to produkuje výstup.
A to je presne to, čo toto má napodobniť.
A je tu pár ďalších jazykov ktoré majú podobnú syntax rovnako,
ale asi nikto, že ste videli na CS50.
Ale stále nemajú byť zmätení tým.
Šípka znamená, že to, čo sa deje ktoré majú byť vrátené v tomto prípade.
OK, tak ako budeme vypočítať tento priemer?
No, ak sa gradebook prázdny, no a potom sme
vracať 0, čo možno rozumný spôsob, ako zaobchádzať toto.
Neviem, poďme prísť späť, že v trochu.
To môže v skutočnosti nie je byť rozumný spôsob,
vypočítať priemer, pokiaľ máme prázdnu zadávanie známok.
>> Potom jednoducho budeme hrať našu zhrnutie.
Všimnite si, že tu sme vlastne majú alternatívnu verziu
pre sláčiky, čo nám umožňuje iterácii nad každú jednotlivú položku v poli
a umiestniť každý prvok do vlastného premennej.
Zadaním pre platové triedy gradebook, čo hovoríme
je to, že budeme implicitne vytvorte novú konštantu nazvanú
trieda, ktorá bude reprezentovať každý jedinečný položka v Gradebook
zakaždým, keď cyklus for iteruje.
Takže prvýkrát, že je to beh, bude trieda
ako prvá položka v Gradebook.
Druhýkrát, že to bude Druhým bodom, tak ďalej a tak ďalej
až gradebook má vyčerpala prvkov.
Potom budeme môcť sčítať, že trieda do nášho súčtu premennej
a vrátiť Náš priemerný ako sme videli skôr.
OK, nejaké otázky?
Ano?
Divákov: Mám dve otázky.
Číslo jedna, hypoteticky, môže spustenie celé číslo na toto?
Nemusí to byť double, je to pravda?
DAN AMRMENDARIZ: Môžete zopakovať na túto otázku?
Divákov: Môžem celé číslo, ako je priemer?
DAN AMRMENDARIZ: Môžete robiť celé číslo ako priemer?
Takže vrátiť celé číslo Priemerná namiesto double?
>> Publikum: Return-- vás majú, že práve teraz nižšie.
DAN AMRMENDARIZ: Priamo tu, návrat 0.0?
Publikum: Hej, len vrátiť 0.
Takže to bude buď 80 alebo 85, ale nie 85,2.
>> DAN AMRMENDARIZ: Takže v tomto prípade, takže je tu pár rôznymi spôsobmi
odpovedať, že.
Dovoľte mi, aby som na ne odpovedať v poradí.
Takže keď som sa, aby tento návrat 0, a 0 je celé číslo.
A tak, že spôsobí, že Chyba typu pre tento prípad
pretože sa očakáva dvojité ale sa potom vracia celé číslo.
Ak by som sa chcel vrátiť celé číslo, môžem.
Môžem nastaviť návratový typ do int, vrátiť 0 tu
a vykonať dvojitú divízie.
Ale potom by sme boli robí celočíselné delenie.
A tak sme potom by sa dostať Priemerný že by sme možno očakávali.
Ale áno, môžeme modifikovať typy týmto spôsobom.
>> Publikum: A za druhé, vás majú jeden dvojlôžková na vrchole.
Ale dole, keď vás robiť vrátiť Dvojlôžková,
to je už automaticky vrátenie Double formátu.
Prečo stále musíte definovať s šípkou na vrchole s manželskou?
>> DAN AMRMENDARIZ: So V prípade, že je to súčasť
z the-- tak opakovať otázku, pretože je to implicitné z návratu
typy tu, aký typ to vlastne je, musíme byť explicitné s Swift
o tom, čo chceme vrátiť z tejto funkcie
tak, že keď sa robí písanie kontrola, to môže uistite sa,
že to, čo sme vlastne napísal dole vlastne zodpovedá to.
Takže je to niečo ako šeku sami sa nejako situácia.
Ale tam are--
>> Divákov: [Nepočuteľné] šíp?
>> DAN AMRMENDARIZ: existujú prípady, keď môžeme určiť, že môžeme implicitne
nastavte typ návratu.
Ale v tomto prípade, vôbec sa mi nepáči si myslí, že by to fungovalo.
Je tu nejaký iný syntax že uvidíme neskôr.
>> Dobre, takže tento zdroj kód je trochu iný
pretože tento analyzuje argumenty z funkcia, ktorá voláme.
Dovoľte mi, aby som vám ukázať, ako to funguje Než sme sa vlastne ďalej
na niektoré zaujímavé veci že sa deje v Swift.
>> Takže v tomto prípade, keď som len spustiť tento kódu, Všimnite si, že to, čo robí
je-- zatiaľ čo to druh dáva mi divný chybu.
Musím odovzdať pár celé čísla ako argument príkazového riadku.
Tak uvidíme, 150 a 80, a stlačte Enter zistiť, čo je to vlastne robí.
Je to prijatie každého z tieto hodnoty sú celé čísla.
Je vkladanie je do Gradebook.
A potom je to predvádzanie že priemerný výpočet
a výstup, ktorý, ako by sme očakávali.
>> Ale samozrejme že sa niečo deje na tejto zamieta niečím
niečo ako celé číslo.
Ako ste si možno pamätáte z doby, kedy sme boli rokovania s argumentmi príkazového riadku
v C a ďalších jazykoch, úplne prvé 0-tý položka v tomto argumente príkazového riadku
Zoznam je názov príkazu že sme vlastne popravený.
Takže v tomto prípade, ja som len opakovanie cez všetky argumenty príkazového riadku sa.
Ale ja nerobím žiadny druh Fancy skontrolujte, preskočiť, že prvý z nich.
Som len explicitne alebo implicitne, že som kontroly, ktoré z týchto typov
sú celé čísla, než som v skutočnosti vykonanie tohto výpočtu.
>> A to je v podstate čo sa tu deje.
Pre každý argument argumenty procesu,
Budem vykonávať nejakú kontrolu.
A v tomto prípade, idem pokúsiť sa najskôr previesť
tento argument na celé číslo od prevedením explicitné obsadiť,
preto, že je, na vstupe, reťazec a nie v skutočnosti celé číslo.
>> Ale to je trochu divný syntaxe, ak nechať dielik zodpovedá Int (argumentu).
Čo sa vlastne deje tu je extrémne
dôležité, aby vaše pomocou Swift.
To je to, čo je s použitím volal voliteľný typ.
>> Takže táto funkcia Int (argumentu), vráti nielen celé číslo, ale vráti
čo sa nazýva voliteľný celé číslo.
A tak to je druh typu na vrchole typu.
Môžete nejako si to predstaviť ako je to vracia ako balíček.
A keď otvoríte, že balíček, buď
má celé číslo, ktoré je výsledkom, alebo má v nej absolútne vôbec nič.
A to je užitočný ako kontroly chybový mechanizmus, pretože v tomto prípade
môžeme zistiť, bol tento typ konverzie úspešná?
Ak by to bolo, potom to je v skutočnosti bude mať celé číslo vnútri.
V opačnom prípade, že to bude mať nejaký hodnota, ktorú budeme nazývať nevyužité,
vyjadrujúce nie je celé číslo vôbec.
Je to naozaj reprezentatívne ničoho.
>> A tak, ak konštrukcia nám umožňuje rozbaliť ten balíček,
že voliteľná väzba.
A ak sme schopní rozbaľovať, že baliť a nájsť celé číslo vnútri,
potom to, čo hovoríme Tu je, že sme sa potom
dovoliť, aby hodnota, ktorá bude uvedená do táto konštanta s názvom stupeň.
A táto časť if, horná časť if
pobeží, pretože to Vybaľte bol úspešný.
>> Ak to len tak sa stane, že došlo k chybe možná
V tomto explicitné konverziu typu z reťazca na celé číslo, možno
je to hodnota ABC napr.
A to vlastne nebude previesť na celé číslo.
Potom sa vráti nil, čo nie je celé číslo.
A to if aj potom zlyhá.
trieda nebude existovať, pretože nemá celočíselné obsah.
A to bude spustiť tento iný blok miesto.
Ano?
>> Divákov: Níl je N-I-L?
DAN AMRMENDARIZ: nil je N-I-L, áno.
>> Takže to je možno jeden z najťažších vecí, o Swift,
zvlášť keď ste v buriny na app iOS
a ste vlastne pokúšate urobiť nejaké rozvoja tam.
Je to bude revať na teba asi nepovinná.
Je to bude vás so žiadosťou o otázniky a výkričníky.
Ale akonáhle ste zistili out-- ak vás venovať nejaký čas premýšľaním,
čo sa deje s voliteľnými typy, ušetríte si veľa bolesti hlavy
ako sa snažíte napísať aplikáciu v Swift.
>> Je to vlastne veľmi výkonné funkcie.
A budete mať len vziať moje slovo pre to teraz.
Ale uvidíme túto konštrukciu a niektorí iní to páči
V niektorých iných zdrojového kódu, ktorý vám ukážeme v len trochu.
>> Sú nejaké prvými otázkami tu?
Takže dôležité, je to, že jedlo so sebou voliteľný typ je akýsi metatype.
To má buď hodnotu, a ak áno, potom to
bude možno musieť túto hodnotu spojenú s tým, alebo to nemá žiadnu hodnotu vôbec,
a je reprezentovaná nulovú.
Zvyšok je možná ako by ste očakávali.
>> Takže poďme rozbehnúť obtiažnosť ešte raz.
A tentoraz, poďme sa pozrieť na niektoré Iné typy dát, ktoré skutočne existujú.
Jedným z nich je slovníky, ktorý je veľmi podobný Pythone slovníkov.
Je to trochu podobné hash tabuľky v C. Je to v podstate mapovanie klávesov
kde kľúče môžu byť reťazce.
A keď sa pozriete na tie kľúče, tieto klávesy bude mať hodnotu.
Takže to nie je úplne poľa, ale namiesto toho, viac úzko spojená
na mapu hash alebo hash tabuľky.
>> Pozrime sa, ako sa to má do práce, než sme vlastne
ísť do zdrojového kódu samotného.
Ak by som len spustiť to, nič sa nedeje.
To mi hovorí, že som očakával niektoré parametre nasledujúceho typu.
Takže budem poskytovať to nejaký problém nastaviť mená,
tak pset0, možno som dostal 100.
A pset1, mám 5.
A potom sa na skúšku, I robil naozaj dobre a dostal 30.
A pardon, som trafil priestor tu.
>> Keď som stlačte klávesu Enter, môžete vidieť že vykonáva niektoré výpočty.
To hovorí, že sú tri gradebook stupňa, pset1, pset0, skúška.
A gradebook má tento špecifický priemer.
Takže znovu, pracujeme s týmto Gradebook myšlienkou,
ale budeme pokračovať v iterácii s zložitosti našej funkcie.
>> Takže na začiatku, sme len bude vytvoriť funkciu, ktorá
je zodpovedný za tlač použitia.
A tam je to východ funkciu, ktorá bude len
násilne ukončiť aplikáciu.
To nie je niečo, budete používať v iOS app.
Toto je len v prípade, s argument príkazového riadku.
Ďalej začneme smerom k Xcode.
Ale to je špecifický pre príkazu čiary program Swift.
>> Poďme sa pozrieť na niektoré z zaujímavé veci tu.
Poďme sa pozrieť, len pár zaujímavé veci spomenúť azda
je to, že vo svojej funkcii tlač počtu stupňov,
môžete pripomenúť, že som mal ten zoznam z items-- pset1, pset0 a skúškou.
Môžete skutočne rýchlo a to ľahko urobiť
tým, že na zadávanie známok, čo je Slovník, ktorý má kľúče a hodnoty.
Nájsť všetky kľúče je cez Metóda, ktorú tu dot kľúče,
a použite túto joinWithSeparator, ktoré sa potom všetky kľúče
ktoré sme písali v, pset1-- alebo Ospravedlňujem sa, pset0, pset1, a exam--
a zřetězit ich dohromady pomocou čiarku a medzeru
vytvoriť jeden dlhý reťazec.
To pripojiť operácie je len fenomenálne užitočné v rôznych súvislostiach.
A tak je to práve táto joinWithSeparator.
>> A to je jedna vec, ktorá je zmenilo od Swift 1 Swift 2.
Tam bývala Python style-- ak ste
oboznámení s Python-- python štýl pripojiť metódou na reťazcoch.
Ale to už nie je prípad Swift 2.
Ak chcete použiť, ak chcete, zřetězit rad vecí
spolu s reťazcom.
>> Tak snáď potom v našej diskusia o priemere skôr,
to robí trochu väčší zmysel pre nás nastaviť priemernú funkciu
byť prípadná dvojitá skôr než len explicitné double.
Vzhľadom k tomu, že sme mali neobvyklý stav, kedy,
Čo keď gradebook vlastne nemá žiadne hodnoty v rámci nej?
Aký by mal priemerný výnos?
>> No, možno budete v C by urobil niečo
ako predpokladu hodnotu Sentinel ako 0,0, alebo možno záporné číslo,
alebo niečo, čo len reprezentovať skutočnosť, že tam bola nejaká chyba podmienku
a vy možno nie sú v skutočnosti mať schopnosť vypočítať uvedený priemer.
No krása zadaním voliteľný typ by sa to urobiť.
A ja som teraz hovoril všetky tieto slová, ale to vlastne nepoužíva Voliteľne.
Ale uvidíme, že v práve minúty, kde môžeme nastaviť priemer
byť nepovinný dátový typ tak, aby ak to vlastne vracia niektoré údaje, potom
vrátime sa, že dáta.
V opačnom prípade sa vrátime nil, hovorí, že toto
nemá žiaden zmysluplný výpočet.
>> Poďme k niečomu inému.
Takže z tu, sme sa pri pohľade na všetky tieto príklady v príkazovom riadku.
Ale naozaj to, čo budete sa bude zaoberať, je Xcode.
A jedna z pekné veci o Xcode je, a konkrétne v Swift,
je, že máme tento čomu sa hovorí detské ihrisko.
A detské ihrisko, je vôbec app iOS.
Ale to vám umožní experimentovať s Swift vo veľmi jednoduchým spôsobom.
Môžete zadať všetky vaše kódu.
Je to pekne syntax tu zvýraznené.
Pri vytvorení nového súboru, spýta sa vy, ak chcete vytvoriť detské ihrisko.
Ale pekná vec, o Playground je to, že na pravej časti okna,
to vlastne ukáže, Výstup z kódu.
Takže keď som sa posunúť dole, môžeme vidieť, čo výstup rôznych riadkov kódu
v skutočnosti sa stane byť.
>> Takže v tomto prípade, ideme zmenili smer len trochu
a hovoriť o niečom, čo je naozaj dôležité tejto vysokej úrovne spôsobom
že Swift prevádzkuje, a to je tento nápad, uzáverov.
A pravdepodobne ste videl trochu v JavaScriptu.
Pre tých z vás, ktoré sú v CS50, uzávery
sú veľmi populárne, veľmi dobrý spôsob, ako robiť na vysokej úrovni, čo v moderných jazykoch.
Ale je to tiež trochu ťažké zabaliť hlavu okolo prvýkrát.
Takže ak sa pozrieme na to Prvýkrát, to je v poriadku.
Stačí sa pozrieť na zdrojový kód a vidieť ak môžete prísť na to doma.
>> Takže v tomto prípade, povedzme, že sme chcete vytvoriť mnoho exponentov
s nejakou pevnou hodnotu.
Takže v tomto prípade môžem vytvoriť funkciu.
Budem hovoriť moc 2, ktorých jediným cieľom v živote
je vziať nejaký vstup a double to, a vráti túto hodnotu.
Všimnite si, že som tu prijíma jeden typ dát.
Bude to byť premenná s názvom x.
To je typu Double.
A ja idem vrátiť dvojitým tu.
A ja som jednoducho ísť robiť veľmi, úprimne povedané, celkom
naivné spôsobom zdvojnásobiť túto hodnotu.
A ja vám ukážem, prečo tento je užitočné v len sekundy.
>> Všimnite si, že tu máme túto ponuku znova. niečo v 1, dot
dot dot, 2, čo znamená, že táto slučka bude prebiehať dvakrát.
Ale to predstavuje fiktívny premennú.
To znamená, že som to naozaj bude možno pomocou tohto premennej kdekoľvek
vnútri tejto slučky.
Chcem len tento riadok kódu spustiť dvakrát,
bez toho aby museli vedieť, je hodnota tohto rozsahu.
>> Takže v tomto prípade Bežím výsledok časy x dvakrát, ktoré v podstate
Znamená to, že som kvadratúra túto hodnotu.
A to sa stane práce, ako by sme očakávali.
Sila 2, odovzdaním hodnoty 2.0 nám dáva výkon 4.
3.2 práce pre 10,24.
>> Teraz si môžeme robiť podobné vec pre silu 3.
Ale teraz zmení iba rozsah.
Pre dummy premenné v 1 až 3, násobiť 3 krát,
a urobiť to isté.
>> Takže to môže cítiť trochu neprirodzený.
Ale je to dôležitá vec, ktorá tu
je to, že pri pohľade na tieto dve funkcie, je tu
len jedna vec, to je niečo iné, ktorá je táto hodnota v rozmedzí.
Všetko ostatné o týchto dvoch Funkcie, výkon 3 a sila 2,
sú v skutočnosti, identické, pretože pracujú rovnakým spôsobom.
>> Takže v tomto bode, trochu poplach je potrebné ísť preč.
Dúfajme, že to, čo hovoríte, Viete, to cíti trochu
ako zdvojenie úsilia.
Možno, že existuje spôsob, že by som bolo možné zapouzdřit to všetko
a zabezpečiť funkciu alebo vytvoriť funkciu, ktorá
robí presne to, čo chcem, bez museli písať to explicitne.
A to je to, čo sila o uzavretí nám umožňuje robiť.
Takže poďme sa pozrieť na to.
A ja budem stráviť pár minút na to, pretože to
je docela dôležité pre Swift.
Vidíme to po celú dobu.
Chystáme sa definovanie funkcie.
Bude to byť nazývaný powerOf.
Bude to akceptovať Parameter volal y typu int.
Ale pozrite sa na návratový typ.
Návratový typ je v zátvorky, dvojitú šípku Double.
Čo znamená, že túto funkciu, táto funkcia powerOf,
vracia funkcie.
To znamená prijatie Double a vrátenie Double.
Takže to môže znieť druh šialený, ale poďme nalistujte trochu
a pozrieť sa, čo sa stane.
Sme vnútri tejto funkcie powerOf.
Sme vytvorenie novej funkcie volal exponentiator,
ale nezáleží na tom, čo to je.
>> Všimnite si, že tento má vstupná hodnota x.
A to je pričom v dvojlôžkovej a vrátenie Double.
A to je rovnaký kód, ktorý sme videli vyššie, okrem toho, že na hodnotu 2
alebo hodnotu 3, a to hornú hranicu v tomto rozmedzí,
bol nahradený táto hodnota y, ktorý
bol prvý parameter našej powerOf funkcie.
A v tomto bode, my vrátiť exponentiator.
Sme vrátenie funkcie.
>> Je to niečo ako malý myseľ vyfukovanie.
Ale poďme si predstaviť, čo sa stane, Keď som túto funkciu volať powerOf
a prechádzajú do neho nejakú hodnotu ako 2.
Čo to znamená, že Mám teraz hodnotu
2 pre y, čo znamená, že túto hodnotu y v tejto funkcii exponentiator
bude to, že hodnota 2.
Ale Vraciam to Funkcie exponentiator.
>> Takže upozornenie, čo Swift hovorí, že vytvorili v tomto prípade.
nech námestí je definícia, že je to funkcia, ktorá prijíma Double
a vráti double.
Vytvoril som funkciu že štvorcov niečo
použitie tohto mechanizmu tady.
A naozaj to, čo sa deje, je že sa vracia túto funkciu
exponentiator, ale táto hodnota y je zabalený vnútri nej.
A tak teraz zakaždým, keď som použiť premenná alebo táto konštanta s názvom
štvorec, to bude to správať ako funkciu.
A tak som sa potom volať, že premenné ako by som nazval funkciu,
a odovzdať do neho číslo, ako je v tomto prípade 3.
A ja sa potom námestí túto hodnotu.
Takže 3 druhú potom stáť 9, ako môžeme vidieť tu.
>> Naozaj blázon, ale teraz Umožňuje mi príležitosť
vytvoriť iné powerOf funkcie.
Ako môžem povedať, v poriadku, no teraz chcem vytvoriť novú funkciu, powerOf (3),
a uložiť, že na A konštantný nazvaný kocky.
A teraz kocky bude byť samostatná funkcie, ktoré potom bude
trvať nejakú hodnotu ako vstup a kocky hodnota ako môžeme vidieť na dolnom riadku
sem.
kocka 2 bude mať za následok 8.
>> Dúfajme, že celkom pekné veci.
Vy ste nikdy nevideli.
Odporúčam vám pozrieť sa do uzávery a skúmať to trochu viac.
Je to naozaj silný vec vidíme veľa v JavaScripte a niektorých iných jazykov.
Je to naozaj veľmi dôležité pochopenie API rovnako
že sa dostaneme do pár sekúnd.
Ano?
>> Divákov: Ak tak urobíte powerOf (2), zátvorka, a potom
ďalšie zátvorka, ďalší input-- ste v podstate výmenou námestí.
DAN AMRMENDARIZ: Tak sa pozrite na posledný riadok tu.
Je to v skutočnosti úplne možné tomu, že reťazenie, ako ste navrhol.
Takže powerOf (5), znamená to, že ideme mať exponentiator z 5 sem.
Takže to je v podstate bude byť to isté ako 4 až piate sile,
preto, že sme vytvorili exponentiating fungujú tak, že na piatej silové,
a my sme prechádza do , Ktoré fungujú na hodnotu 4.
A dostaneme túto hodnotu že očakávame, 1024.
Divákov: A nie je to meno, tak to uľahčuje
čítať, námestie čokoľvek.
>> DAN AMRMENDARIZ: Správne, presne tak.
Takže predtým, než som len dať to do tu, takže konštantné
že to robilo to ľahké, že názov.
Ano?
>> Publikum: V tejto súvislosti powerOf, je to časť
programovacieho jazyka na rozdiel od toho, ako
myslieť na powerOf v [nepočuteľných]?
DAN AMRMENDARIZ: So V tomto prípade, powerOf
je jednoducho názov z Funkcie, ktoré som definovaná tu.
Takže to nie je vlastné na jazyk sám,
ale namiesto toho, je to len funkcia, ktorá má
že názov preto, že som dať mu to meno.
Nejaké ďalšie otázky?
Dobre.
>> Teraz je to skvelé.
Ale vy nebudete vidieť Mnoho záverečných funkcií, ktoré
sú ako to, kde môžete definovať, vnútri jednej funkcie, inej funkcii.
A môžete to urobiť.
Ale je to trochu nie je naozaj nutné, je to tak?
Rovnako ako prečo sa definovať to Funkcia tzv exponentiator
a potom sa hneď vrátiť.
Prečo nemôžem jednoducho hneď vrátiť túto funkciu?
>> A v skutočnosti, to je práve myšlienkou koncepcie s názvom
anonymné funkcie, kde anonymné funkcie nie sú v skutočnosti
majú meno, pretože oni Nemusíte mať jeden.
A tak je v tomto prípade, v 7B, môžeme nájsť presne to.
Je to všetko rovnaký kód, robí presne to isté,
ale teraz sme to zmenil ľahko tak že táto funkcia powerOf okamžite
vráti funkciu.
Všimnite si, že po návrate, tam je otvorená zložené zátvorky.
Je to očakáva tento vstup Double.
Je to očakáva, že produkcia Double.
A potom sa v kľúčové slovo oddeľuje kód sám o sebe.
Tak toto je anonymný funkcia.
To nie je v skutočnosti mať meno, zatiaľ čo predtým to bolo volané exponentiator.
Ale ako sme videli, len naozaj neuviedla exponentiator
mimo tejto funkcie.
Takže na tom nezáležalo.
Takže to anonymné funkcie takzvaný pretože to je bezmenný,
ale je to stále používa v kontexte tohto kódu.
>> Ďalší pár z nich som bude pokračovať dúfajme
fúkanie vaša myseľ trochu.
Môžeme zjednodušiť to ešte viac.
Vzhľadom k tomu, ako bol bystro poukázal už skôr,
Možno sme skutočne vedieť, o vyvodil z tohto kódu, čo
Výstup tohto kódu bude.
A v skutočnosti, v tomto anonymný funkcie, možno v podstate odvodiť typy dát.
>> Takže v tomto jednom, my už treba explicitne definovať
typ dát, ktorá je bytia Vstup a výstup z tejto funkcie
na pár dôvodov.
Jedným z nich je, že sme je definovaný, a to až u Prototyp funkcie obvodového,
aký typ dát tohto anonymných funkcie by sa vstup a výstup.
A z druhého, sme možno vyvodiť z kódu
tu dole, že prijímame vstup, ktorý je typu Double
a vrátenie Double.
>> Všimnite si, že tu máme nie je výslovne definované názvy argumentov
že táto funkcia je prijímať.
A tak vidíme, môžeme odkazovať na tieto parametre pomocou $ 0, $ 1,
tak ďalej a tak ďalej, v závislosti na počet tohto parametra používa
v tejto funkcii.
>> To je niečo, čo sa deje vidieť veľa, je to otvorený kučeravé držiak
Definícia po ktorom nasleduje $ 0, a potom niektoré operácie,
a potom uzavretý zložené zátvorky.
To je anonymný funkcia ktorý vykonáva túto operáciu.
To má tento parameter kde je to typ je odvodený.
To prvé parameter je $. 0
A niektoré operácie je deje, že $. 0
>> Divákov: Takže znak dolára znamená parameter v podstate,
a 0 znamená prvý?
DAN Armendariz: To je správne.
Takže znak dolára v podstate znamená, parameter, a 0 znamená prvý.
Ale funguje to konkrétne Tento prípad, kedy som sa volal
argumenty v mojom anonymný funkcie.
>> Divákov: Má Perl alebo niečo máte Tento znak dolára, dolár 0 tam?
DAN Armendariz: Má, ktorý je mi ľúto?
Divákov: Má mať Perl Tento dolára 0, dolár 1--
DAN Armendariz: Nie som príliš oboznámení s Perl,
ale PHP, čo definuje premenné založený na dolári.
A tam môžu byť niektoré jazyky že majú vlastnosti, ako je táto.
V skutočnosti, Swift vypožičiava mnoho funkcií, ako je tento
z mnohých ďalších jazykov.
Vidíme náznaky Python v ňom.
Táto definícia typu Zdá sa, že pochádza z OCaml.
A máme len veľa veci z mnohých rôznych jazykov.
To je jeden z pekné vecí o Swift
je, že to trvá veľa z najlepších nápady od banda jazykov
a shoehorns ich všetky dohromady do jedného super-jazyka.
V skutočnosti, ak dovolíte, aby pokračovať fúka svoju myseľ,
takže sme robili všetko.
Môžeme snáď zjednodušiť to trochu bit by si uvedomil, že, samozrejme,
Swift má exponentiating funkcia postavená v roku.
Keby som importovať Darwin, ktorý je len knižnica
Ponúka tejto funkcie s názvom pow, teraz Môžem zjednodušiť svoj výkon funkcie
byť nasledovné.
To sa bude vracať táto anonymný funkcie.
>> Ale pozrite sa na to, ako jednoduché to je teraz.
To je anonymný funkcia, ktorá prijíma nejaký druh dát,
a bude jedno Argument špecificky,
odvolával sa na $ 0, ktorá je typu double.
To sa chystá vrátiť typu Double.
Avšak návrat vyhlásenie Teraz je implicitná.
>> A to je to presne štýl, ktorý sa je veľmi, veľmi prevláda v Swift,
všade.
Ideme do vidieť po celú dobu v Swift.
Takže som ukazovať toto všetko ste kvôli tejto syntaxe.
To je veľmi časté vidieť, čo znamená, že ho
je anonymný funkcia ktorý vykonáva
niektoré operácie na týchto argumentov.
A tam je implicitná výnos.
Tak to je úplne to isté Pre nás to hovorím, tu.
>> Pretože táto kučeravé Držiak je funkcia,
Sme vykonať túto operáciu Na prvý argument.
Budeme sa vrátiť to.
Ale toto vonkajšie priznanie je vracať celú túto funkciu,
že celá anonymný funkcie že sme práve vytvorili.
Nejaké ďalšie otázky?
Dobre, ja nie chcete vedieť, vy ste na to pripravený,
ale môžeme ísť ešte šialenejšie s Swift.
Ste pripravení?
OK, to je skvelé.
>> Teraz sme vlastne mať možnosť k, v Swift, pretože, ako modulárne
a, ako na základe protokolu, je, aby definovať svoje vlastné šalejú operátormi.
Rovnako ako v tomto prípade sme mali no pohon pre exponentiation-- dobre,
pre vykonávanie právomocí niečo.
Ale môžem, v Swift, definovať nový subjekt, ktorý robí presne to.
Takže v tomto prípade je banda syntaxe sem.
A ja vám umožní pozrieť sa na to doma, keď sa pozriete na to.
Ale my definovanie tohto Infix operátor, **, ktoré sa nám potom umožní,
definovaním čo to Funkcie ** vlastne
to, prijať ľavú ruku bočné a pravá strana,
a potom sa vrátiť exponent, ktorý ľavá strana na pravej strane.
>> A tak teraz zrazu I vytvorili nový čitateľa.
Tak 2 ** 3 prostriedku 2 na tretiu mocninou.
[Myseľ vyfukovanie SOUND] To by sama o sebe by vás mal byť rád,
OK, skrutku C. idem Swift celú cestu.
Toto je skvelé.
To je celkom fantastické.
>> Aj keď je to skvelý príklad.
Ale ja mám nikdy raz vonku v tomto príklade vlastne
definované vlastné operátor.
Ale napriek tomu, to ukazuje Veľa moc Swift
a prečo je to vlastne naozaj cool.
OK, áno?
Divákov: Ak ste definovanie vášho vlastného operátora,
Ako vieš, že nemáte náhodou pokúsiť sa vytvoriť operátor, ktorý je
v niekde v C, rovnako ako skryté niekde v Swift,
ako ten, ktorý vám obskurní nemusí nevideli.
>> DAN Armendariz: Takže, ak sa snažíte definovať vlastné operátormi,
existuje riziko, definovanie jeden cez existujúce operátora.
Že ide do úrovne detailov, ktoré Nemyslím si, že máme čas prejsť.
Ale, že je tu riziko.
A to je v skutočnosti veľmi dôvod, prečo Nechcel som používať symbol striešky, ktorý
keď sme písanie von moc, zvyčajne použite 4 malá strieška 5 alebo tak niečo
ako to, že vo chvíli, keď sme Gchatting kamaráti alebo čokoľvek iného.
Ale v tom prípade, že v skutočnosti by spôsobil kolíziu.
A tak som sa vyhýbal to len preto, Náhodou som vedieť, v tomto prípade
že skutočnosti, ktoré by túto kolízii.
>> Dobre.
Teraz bohužiaľ, pre posledných sedem minút,
Musím sa držať fúkanie vaša myseľ trochu.
Takže mi dovoľte, aby som vám ukázať niektoré ďalšie veci rovnako.
>> Sme vám ukázané túto myšlienku s týmito anonymný funkcie,
Tieto uzávery, ktoré umožňujú užívateľovi druh prejsť okolo funkcií.
Môžete ich vrátiť.
Môžete s nimi manipulovať.
Môžete robiť všetky druhy šialené veci.
>> Ale jedna vec, ktorá ďalší sa stane, že sú užitočné
je schopnosť, na rozdiel na návrat týchto funkcií
vo funkcii, odovzdať funkciu ako parameter na inú funkciu.
Tie by mohli byť myslenia dobre, prečo na Zemi by som chcel niečo také urobiť?
>> No, povedzme, že chcem, , Aby tento operátor, ktoré som
pracoval tak tvrdo na vytvorenie a použitie to veľa rôznych čísel
v poli.
Takže v tomto prípade mám rad integers-- 1, 4, 7, 2, 5, 10, 56.
A ja chcem, aby ich všetky zdvojnásobiť.
Mimochodom, že by sme typicky to urobiť, je len písať
jednoduchý pre sláčiky, ktoré iteruje cez všetky z nich
a vykonávať nejaký druh square operácie nad nimi,
zadávanie týchto nových hodnôt do nového variabilné, alebo skôr, nové pole sem.
A hodnota výstupu Výsledkom je potom všetky tieto polí,
alebo skôr všetky tie Prvky teraz na druhú.
>> A mohli by sme urobiť to isté vec pre Cubing to,
ale trochu poplach by mal ísť preč
hovorí, že možno existuje nejaký spôsob, že by sme
bolo možné zjednodušiť tento trochu.
A v skutočnosti je.
Čo keby sme mohli vytvárať funkciu, ktorá nám umožňuje
akceptovať, ako dravec, funkcia?
Takže v tomto prípade trvať pozrite sa na tieto argumenty.
Chystáme sa prijať zoznam zdvojnásobí.
A potom pôjdeme prijať funkciu
v premennej nazvanej f, ktorá sa deje vziať s manželskou posteľou a vrátiť double.
A celý výstup celého tejto funkcie
volal mapper sa chystá vrátiť maticu s názvom double.
>> Čo to by ma potom umožní urobiť, je iterovat cez tomto zozname
a urobiť to isté, ale teraz aplikovať túto funkciu na každej
z jednotlivých hodnôt v tomto zozname.
Takže som naozaj neviem, čo je f.
Nezáleží na tom, ku mne.
Ale tak dlho, ako bude potrebné v dvojlôžkovej, vykonáva nejaké operácie na to,
a potom sa vráti Dvojlôžková izba, tak by som potom
schopný mapovať túto funkciu naprieč každý prvok v zozname.
>> A tento typ programov je tzv vyšších rádov funkcie,
kde sme okolo funkcie asi ako parametre
a robiť veci s funkciami.
Je to niečo ako s ohľadom na všetky tieto myšlienky, ktoré sme sa naučili v CS50
a brať ich triedenie o na ďalšiu úroveň.
A to je všetko CS51 štýl veci.
A tak pôjdeme do hĺbky viac v triedach, ako je to.
>> Ale to je tiež tu dôležité, pretože my
vidieť mnoho funkcií ktoré sú použité v Swift
že v podstate robí to, kde sme
niektoré čísla, niektoré polia čísel.
Chystáme sa prejsť okolo toho poľa do nášho mapper.
A my sme tiež bude prejsť nejakú funkciu, ktorá
sme už definované tu.
Bude to byť štvorec.
A ideme do tej doby štvorec všetkých týchto čísel
a obchod, ktorý do tohto výsledku tu.
>> Takže v tomto prípade sme formulovali sme vlastné funkciu nazvanú mapper.
Ale to presne vec je, V skutočnosti, zabudované do Swift.
Existuje celý rad Funkcia tzv mapa.
K dispozícii je funkcia máp, tam je zníženie funkcie,
a tam je filtračná funkcia, ktoré v podstate platí funkcie
ku každému prvku v Zoznam je upraviť nejakým spôsobom.
>> Divákov: Takže, pretože ste transformáciu dáta do iného formátu
cez function--
DAN Armendariz: Správne.
Jo, takže funkcie že sme prijatím
transformuje dáta v nejakej ceste.
V tomto prípade sme boli buď kvadratúra, alebo sme boli Cubing to,
alebo naozaj, mohli by sme hrať žiadna operácia na nej vôbec.
>> Ale dovoľte mi potom ukáže, ako to bude vyzerať v praxi.
A opäť, Bežím trochu času. takže si nie som
bude môcť prejsť všetky zdrojového kódu tu v detaile.
Ale ja som povzbudiť vás k tomu, že.
Budeme to písať, akonáhle najskôr po tomto rozhovore.
>> Ale ak sa pozriete na to, Predpokladáme, že máme zoznam čísel,
pole čísel v tomto premenné volaných čísel.
Potom sme chcete vykonať túto Filter operácie na týchto čísel.
Takže filter je vyššia objednať funkcia, ktorá
prijíma poľa a tiež funkcia.
A na každom prvku v tom, že pole, vykonáva funkciu.
>> Ak sa, že výnosy funkcie pravda, udržuje túto položku.
Ak sa táto funkcia vráti hodnotu false, to zahodí túto položku.
A potom sa to vráti zoznam , Ktorá je potom tvorená all
z týchto položiek, ktoré boli filtrované.
>> Takže inými slovami, je to rovnaký nápad sa gradebook.
Mohli by sme mať rôzne stupne akosti Do tohto čísla hodnotou tzv.
Mohol by to byť 100 a 70, a 40, tak ďalej a tak ďalej.
Čo tento filter robí, je upozornenie že je to, že syntaxe cukor
pre anonymné funkcie.
Jedná sa o anonymné funkcie príslovie že parameter, že som prijal
bude, ak o to je väčší ako 70 ° C,
potom to bude vráti true, čo znamená, že že položka bude mať na tohto filtra.
Takže buďme trochu konkrétnejšie o tom.
Mám Ak toto pole čísel a skladá sa z 100, 70 a 40,
Aj vykonať tento filter operácie na každom z nich.
Tak, že prvý je táto hodnota 100.
100 väčšie alebo rovné 70 je pravda, ktorý
Znamená to, že 100 je držaná v táto nová kópia tohto poľa.
70 tiež prechádza.
Ale 40 nie je.
Takže to, čo je vrátená v passingCount je pole prvkov 100 a 70--
100, čiarka, 70.
To boli len dva položky, ktoré boli uchovávané.
A tak dôvod, prečo som sa rýchlo prešiel Mnoho z týchto druhov vyššieho rádu
veci sú, pretože to je to, že spoločná vec, ktorú uvidíte v Swift docela
často, vykonáva nejakú operáciu pomocou tejto anonymný syntaxe funkcie.
>> Tam je nejaký super veci.
Prepínače sú naozaj silný v Swift, Mám na mysli, rovnako ako blázon, blázon silný.
Môžete použiť prepínač, a môžete skutočne aplikovať
do rozsahov, čo je tak trochu blázon, a robiť fantázie podobné veci.
>> Ale v posledných niekoľkých minút, Chcem preskočiť pomerne ďaleko
a ukázať vám konkrétny príklad toho, ako môžeme vytvoriť v iOS pomocou Swift.
Takže keď robíte to, budete musieť vziať
A Look at-- na Apple dokumentácie, oni
majú veľa naozaj dobré tutoriály pre vytvorenie prvej aplikácie.
A ja povzbudiť vás k tomu že preto, že vás
cez všetky kroky, čo presne kliknite na vytvoriť aplikáciu iOS.
>> Ale tu máme túto aplikáciu iOS.
A je to naozaj celkom jednoduchá aplikácia.
Ak by som to plynúť, dovoľte mi ukázať vám, ako to vyzerá.
Všetko, čo to v podstate robí, je to vytiahne z internetu spis JSON
že som uložené na serveri.
A to JSON súbor definuje, obrazy, ktoré umožňujú
aby som potom prechádzať, na mojom app, obrázky z môjho webového servera.
>> Takže mám tu getNextImage.
To načíta obrázok z internetu, a potom ju zobrazí na displeji.
>> Takže je to celkom jednoduché.
Ale cieľom je ukázať, , Ako môžeme kombinovať veci
z posledných niekoľkých týždňov CS50 do skutočnej iOS aplikácie.
Inými slovami, možno jeden z veci, ktoré budete chcieť urobiť,
je mať aplikácia iOS, ktorý môžete vytiahnuť dáta z internetu
a ukázať užívateľovi nejaké informácie.
To je úplne bod z tohto zdrojového kódu tu.
>> Takže je tu veľa povedať o ako to urobiť skutočný iOS rozvoj.
Tam je veľa bláznivé syntaxe že sme nevideli ešte dosť
ako trieda, čo je to trieda v skutočnosti je.
Môžeme do značnej miery ignorovať že v súčasnej dobe.
>> Ale všimnite si, že sme obsahovali v rámci tohto rôzne vecí
že sme už videli, ako funkcie, ktoré majú špecifické mená.
A keď sme sa dať tie, Funguje správne názvy
ktorá sa očakáva od iOS, v skutočnosti to cíti trochu čarovné.
Ale keď si vytvoriť iOS aplikácie, tam
sú špecifické názvy funkcií, ktoré sú volány samotný telefón
pretože aplikácia sa nahráva vyskúšať vytvoriť proces, ktorý v skutočnosti
beží vaše aplikácie.
Takže znova, je tu veľa vecí, ktoré som musí zakrývať tu, aby nás
hovoriť o tom konkrétne.
Ale ja Odporúčame vám pozrieť sa na možné ostatné iOS semináre, ale aj niektoré
o tutoriály on-line, ktoré robia oveľa lepšiu prácu popisujúci
špecifické informácie.
>> Ale môžeme vidieť niekoľko vecí, ktoré sú zaujímavé odtiaľ kódu.
Všimnite si, že ak máme vyhlásenie.
Mimochodom, jeden dôležitý vec, o if
je to, že zátvoriek Logický výraz sú voliteľné.
Ale zložené zátvorky nie sú povinné, bez ohľadu na to, ako málo alebo veľa riadkov kódu
Máte v if.
Nemôžete mať if bez zložených zátvoriek v Swift.
>> A to je dobre, nejako hlúpe.
Ale je tu historické dôvody pre to.
Je to má, aby vás zachránil od seba.
Rovnako ako to napríklad, nemôžete eliminovať zložené zátvorky okolo toho
if.
Tie sú v skutočnosti potrebné.
Tak som povzbudiť, aby ste sa pozrieť na toto.
Ale je tu ešte jeden konštruovať, že chcem,
vám ukázať, že o Swift je nový Swift 2.0 nákupný
na staršie verzie Swift, čo je nasledujúci.
Poďme sa pozrieť, kde som dať sem?
>> Takže v tejto funkcii s názvom fetchJSON, táto funkcia
je zodpovedný za ťahanie, že JSON súbor z adresy URL, ktorý len tak sa stane
beží na mojom CS50 IDE.
Len som začal Apache, dám JSON súboru tam,
a som schopný vytiahnite, že dáta z internetu pomocou
táto funkcia a toto URL, ktorá je opatrená v telefóne.
Je to má poskytnúť pri knižnica, ktorá používate pri
robíte nejaké systému iOS pre vývoj aplikácií.
>> Všimnite si, že je to neobvyklé syntaxe konštrukt volal stráž.
A naozaj to všetko je v Swift je spôsob overovania
že niektoré veci majú boli splnené pred vami
pokračovať so zvyškom funkcie.
Takže som mohol mať, s použitím Tento voliteľný typ,
Mohol som našiel adresu URL spustenie tejto funkcie NSURL
a ukladanie, že do URL konštantný, a potom kontrola
aby zistil, či URL bola nulová, pretože to sa chystá vrátiť voliteľný typ.
A keby to bola nulová, potom by som vytlačiť chybu a potom sa vrátiť.
>> Ale namiesto toho, čo stráž necháva nás urobiť, je, že veľmi vec,
ale uistite sa, že je v skutočnosti platí, že url
bol správne nastavený NSURL.
A ak je to, potom je preskakuje to, a to
vám umožní pokračovať s url, ktoré boli riadne definované.
Ale ak je to tak, že url nie je správne definovaná,
ak je táto funkcia vracia chybu alebo nejaká iná nečakaná vec
skutočne nastane, tento guard konštrukt nám umožňuje potom výstup túto chybu
a okamžite vrátiť.
Ano?
>> Divákov: Takže je to trochu o Ako či potom iný?
DAN Armendariz: Je to druh Ako či potom iný, áno,
okrem toho, že táto adresa URL je potom definované pre všetko pod toto.
Ak prejde tento ochranný kryt, potom ho bude skutočne naplnená dátami
a použiteľné v zostávajúcej zdrojový kód vo vašej funkcii.
Tak som podozrenie, že budete začnete vidieť tento ochranný kryt rovnako.
A dbať na to.
>> Takže len pri pohľade na pár ďalších veci, to tu je to, čo,
myslíš, len podľa toho, čo sme hovorili o skôr?
>> Divákov: Myslíš, že to bude beh na zozname?
>> DAN Armendariz: Tak to je blízko.
Jedná sa o funkciu, že sa definuje.
A my sme zadanie tejto funkcie ako argument tejto funkcie tu.
>> Divákov: [Nepočuteľné], pokiaľ nie je nulová.
Takže je to v zozname, je to tak?
>> DAN Armendariz: Ak chyba nie je nulová, takže tak je-- musím posúvať.
No, pozrime sa, nemôžem prejdite na práve tu.
Chyba je argument, ktorý je byť odovzdaný tejto anonymné funkcie.
Jedná sa o anonymné funkcie.
To nemá žiadny názov.
Ale my prijímame tieto tri argumenty, dáta, reakcie, a chybe.
A to sa chystá vrátiť neplatné, takže že to nebude nič vracať.
A to je obsah tejto funkcie.
A potom máme prístup vo vnútri, že funkcií pre každý z týchto argumentov.
>> Takže je to víchrica prehliadka jazyka.
Ale dúfam, že s tým, dúfajme, že, ako si vziať
pohľad na niektoré z tutoriálov špecifické pre iOS vývoji s Swift,
najmä ak idete do Apple developer web page--
oni majú veľa naozaj dobré návody, ako začať.
Ale dúfajme, že práve táto hodina hovoriť o syntaxe sám dal
Si dosť, aby ste mohli začať s tým.
>> Budeme písať všetky tohto zdroja kód na webových stránkach semináre
čo najskôr, a tiež zábery takže máte odkaz pre všetky tie.
Ale veľa šťastia s vaše projekty.
A ďakujem vám všetkým moc prišli.
>> [APPLAUSE]