[SKAN INSTRUMENTĀLĀ MŪZIKA]
DUGS LOJDS: Līdz ar to CS50 beigās mēs jūs iepazīstināsim ar vairākām
dažādām programmēšanas valodām, un mēs nevarēsim tās aptvert tik
dziļi, kā mums izdevās aptvert C kursa laikā iepriekš.
Mērķis nav sniegt jums pilnīgu informāciju par to, ko šīs valodas
dara, bet gan sniegt jums pietiekami daudz pamatzināšanu un parādīt,
ka ir pietiekami daudz paralēlu lietu, kuras jūs jau zināt, lai jūs
varētu turpināt un patiešām pilnveidot savas zināšanas par šīm
dažādajām valodām.
Un viena no šīm valodām , ko mēs tūlīt apskatīsim, ir JavaScript.
Tagad, līdzīgi citām valodām, par kurām mēs runājām, ir moderna
programmēšanas valoda, kas ir atvasināta no C sintakses.
Tātad, ja esat iepazinies ar C, jūs varēsit diezgan ātri apgūt
JavaScript.
Tā pastāv gandrīz tikpat ilgi kā Python.
Tā tika izgudrota dažus gadus vēlāk, deviņdesmito gadu vidū.
Tas, kas ir svarīgi par JavaScript, kā arī HTML un CSS, par ko mēs
runājām citos videoklipos, ir ka šīs trīs valodas veido lietotāja
pamatpieredzi, ko nozīmē būt tiešsaistē.
Tāpēc izpratne par to, kā lietot JavaScript, HTML un CSS un strādāt
ar tām , ļaus jums patiešām izveidot vietnes, kuras lietotājiem
patiks apmeklēt, jo šajās trīs valodās varēsit viņiem radīt lielisku
lietotāja pieredzi.
Rakstīt JavaScript ir ļoti vienkārši.
Atveriet failu ar dot js faila paplašinājumu un nekavējoties sāciet
rakstīt JavaScript.
Ja esat iepazinies ar tādu valodu kā PHP, jūs zināt, ka jums ir
jāraksta savs kods šajos norobežojumos — iekava, jautājuma zīme, PHP,
un tamlīdzīgi
Mums tas nav jādara JavaScript.
Mēs burtiski tikai sākam rakstīt savu kodu JavaScript failā, kas ir
diezgan jauki.
Mūsu vietne arī zinās, ka mūsu fails ir JavaScript, jo mēs to
norādīsim HTML tagā.
Mēs teiksim, ka man ir JavaScript tipa skripts, un tas ir fails ar
dot js faila paplašinājumu.
Diezgan vienkārši.
Tagad atšķirībā no Python, kas darbojas servera pusē, tas ir, tajā
pusē, kur atrodas vietne, JavaScript lietojumprogrammas darbojas
klienta pusē jūsu datorā, kad apmeklējat vietni.
JavaScript iekļaut savā HTML ir diezgan vienkārši.
Tāpat kā tad, ja mēs iekļaujam CSS ar stila tagiem, mēs varam iekļaut
JavaScript starp skripta tagiem.
Tātad mēs varam atvērt skripta tagu un burtiski sākt rakstīt
JavaScript tieši mūsu HTML, kas ir lieliski.
Taču tāpat kā CSS, kur mums ir saites tagi, mēs varam ierakstīt savu
JavaScript citā failā un savienot to, izmantojot skripta taga
atribūta avotu.
Operētājsistēmā CS50 tas noteikti ir vispiemērotākais veids, jo
īpaši, ja jums ir JavaScript fails, kas var tikt izmantots dažādās
jūsu vietnes lapās vai kura saturs var tikt izmantots.
Jums nav jāraksta JavaScript starp skripta tagiem katrā lapā.
Jums svarīgi, lai jūs varētu vienkārši atsaukties uz ārēju failu un
katru reizi tikt saistīts ar to.
Tāpēc ātri noskaidrosim dažas pamatlietas , ko varētu izmantot
JavaScript.
Tātad mainīgie — tie patiešām ir līdzīgi Python mainīgajiem un ļoti
līdzīgi C mainīgajiem.
Nav nepieciešams tipa norādītājs.
Un, ja vēlaties lokālo mainīgo, ievadiet to ar atslēgvārdu var.
Tātad Python mēs teiktu kaut ko līdzīgu šim — x ir vienāds ar 44.
Mēs nevēlamies to darīt JavaScript, jo tas faktiski radītu globālu
mainīgo, ja beigās liktu semikolu.
Mēs vēlamies to — var x ir vienāds ar 44.
Tas izveido lokālo mainīgo ar nosaukumu x JavaScript un saglabā tajā
vērtību 44.
Nosacījumi — visi agrāk plaši izmantotie no C ir pieejami lietošanai.
If, else if, else, pārslēdzieties, jautājuma zīme kols — tas viss ir
godīga spēle.
Mēs par tiem nerunāsim sīkāk, jo esam tos aplūkojuši savos
videoklipos par C.
Bet tie visi ir paredzēti lietošanai JavaScript, un tie darbojas
gandrīz vienādi.
Tikmēr joprojām ir pieejamas visas cilpas, kuras mēs pazīstam no C, -
while cilpas, do-while cilpas un for cilpas. Lai gan mums ir dažas
citas variācijas, par kurām mēs runāsim tikai mazliet.
Tagad visas JavaScript funkcijas tiek ieviestas ar funkciju
atslēgvārdu.
Tātad tā ir funkcija.
Uzrakstiet funkcijas nosaukumu un parametrus, un pēc tam mēs
definēsim savu funkciju starp figūriekavām tāpat kā C, izņemot to, ka
C, protams, mēs neizmantojam funkcijas atslēgvārdu.
Taču arī JavaScript ir trūkums, proti, funkcijas var būt anonīmas.
Tas nozīmē, ka jums nav jādod viņām nosaukums .
Tagad jūs varētu sev jautāt: pagaidiet, kā es varu izsaukt funkciju,
ja tai nav nosaukuma?
Nu, mēs par to runāsim tikai nedaudz, un mēs runāsim par to, ko es
šeit domāju, aprakstot lietu sasaistīšanu ar HTML elementiem.
Par to mēs runāsim video saistībā ar dokumenta objekta modeli, bet
par anonīmajām funkcijām mēs runāsim pēc brīža.
Es sniegšu jums piemēru, un jūs varēsiet redzēt, kā tās varētu būt
noderīgas noteiktos kontekstos.
Un šie konteksti faktiski daudz materializējas JavaScript
programmēšanā.
JavaScript, tāpat kā C un tāpat kā Python, ir analogi Python
sarakstiem.
Ir masīvi, un jūs varat deklarēt masīvu.
Tas ir diezgan vienkārši.
Piemēram, var nums izveido lokālu masīvu.
Un tad man ir kvadrātiekavas, un man ir tikai ar komatu atdalīts
saraksts ar visām vērtībām, kuras vēlos ievietot masīvā.
Varu arī jaukt tipus.
Man nav jābūt visiem veseliem skaitļiem, visiem pludiņiem, vai visām
virknēm, kā tas ir C.
Es tur varu sajaukt dažādus tipus.
JavaScript var darboties dažādos veidos.
Tāpēc tā var būt nedaudz sarežģīta, jo ir pirmā valoda, kas jāapgūst,
kad tiek noteikta virkne ar noteikumiem un pēc tam tie tiek pārkāpti.
Tā ir ļoti, ļoti elastīga, bet varbūt ir pārāk elastīga kā vajadzētu
būt pirmajai valodai.
Bet tā var darboties kā objektorientēta programmēšanas valoda.
Objektorientēta, iespējams, ir termins, ko esat dzirdējis iepriekš,
taču, ja nē, mēs mēģināsim šeit sniegt ātru nelielu intensīvu
apmācības kursu.
Objekts pēc būtības patiešām ir līdzīgs struktūrai, kas mums, cerams,
ir pazīstama no C.
Tagad C valodā struktūrām var būt vairāki dažādi lauki vai elementi.
Vēl viens termins, kas ietver objektorientētu programmēšanu, ir
rekvizīti .
Bet šie rekvizīti vai lauki, vai dalībnieki, tāpat kā C, nekad nevar
pastāvēt atsevišķi.
Piemēram, ja mēs definējam struktūru šādai automašīnai — konstruēt
automašīnu, un tajā ir divi dažādi lauki vai elementi — int gads un
rakstzīmju modeļa desmiti vai 10 rakstzīmju virkne, ko varam
izmantot, lai uzglabātu automašīnas modeli.
Mēs varam darīt šādas lietas.
Mēs varam teikt struct car Herbie, kas deklarē struct car tipa
mainīgo ar nosaukumu Herbie, un tad mēs varam teikt, ka Herbie punkta
gads ir vienāds ar 1963. gadu.
Hurbie dot modelis ir vienāds ar Beetle.
Tas ir pilnīgi pareizi i.
Tas ir derīgs C.
Bet mēs nekad to nevaram teikt C — mēs nekad nevaram teikt, gads ir
vienāds ar 1963., modelis ir vienāds ar Beetle.
Tagad mēs to nevaram teikt, jo gads un modelis ir ļoti svarīgi, lai
saprastu, kas ir strukturāla automašīna.
Tie ir daļa no konstrukcijas automašīnas.
Un tāpēc, ja mēs kādreiz izmantojam gadu un modeli, mēs nevaram tos
izmantot abstrakti.
Mums vienmēr šīs lietas ir jāsaista ar konkrētu automašīnu.
Tātad tas nav labi.
Objektiem papildus laukiem, elementiem vai rekvizītiemir arī kaut
kas, ko sauc par metodēm, kas ir līdzīgi it kā, ja C struktūrai būtu
funkcija, kas varētu attiekties tikai uz šo struktūru.
Tāpēc šķiet, ka mums ir funkcija, kurā struktūras ir vienīgās lietas,
kas jāiekļauj.
Tagad tā ir C.
Bet mēs nevaram definēt funkciju struktūras izliektajās iekavās.
Tas ir vairāk — tā ir objektorientēta programmēšana.
Tā atšķiras.
Bet, tāpat kā rekvizīti , arī metodes pašas par sevi nepastāv.
Tas nav kā funkcija, kas eksistē tikai abstrakti.
Tā ir funkcija, kas pastāv tikai šajā gadījumā kā objekta kontekstā.
Tātad, kur mēs to varētu izdarīt C — funkcija iekavās objektā, kur
objekts ir izsaucamās funkcijas parametrs — tas nav uz objektu
orientēts stils.
Objektorientēta nozīmē, ka objekts ir visa pamatā, un mēs sauksim šo
funkciju, kas ir objekta daļa.
Labi?
Tātad šādi izskatās objektorientētā programmēšana ļoti, ļoti
elementārā formā: ir funkcijas, kas ir saistītas vai saistītas ar
objektiem, un mēs tās saucam šādi - norādot objektu un sakot, ka
vēlamies kādu funkciju izpildīt šim objektam.
Objekta lauki un metodes pēc būtības ir patiešām līdzīgasvārdnīcai,
kuru jūs, iespējams, pazīstat vai atceraties no Python.
Piemēram, mēs varētu izveidot kaut ko līdzīgu šim — var Herbiw ir
vienāds — izliektās iekavas, tagad, nevis kvadrātiekavas, tās ir
izliektās figūriekavas — un pēc tam ar komatu atdalīts saraksts ar
atslēgu vērtību pāriem kurā ir ievietots 1963. gads. Piemēram, sakot,
ka Herbiepunkta gads ir vienāds ar 1963. gadu C, un Herbiepunkta
modelis ir vienāds ar Beetle.
Tas ir līdzīgi tam, kā mēs to pašu darītu JavaScript, izveidojot
objektu un uzreiz piešķirot tam pāris rekvizītus.
Labi.
Tagad atgriezīsimies pie cilpām, jo es jau minēju iepriekš, ir dažas
dažādas jaunas cilpas, kuras mēs varam izmantot JavaScript.
Tagad, kad mums ir šis objekts, kā mēs varētu atkārtot visus šī
objekta galveno vērtību pārus?
Vai patiesībā, kā mēs atkārtojam visus masīva elementus, papildus
izmantojot for cilpu, while cilpu vai do-while cilpu?
Tātad programmā Python mēs redzējām kaut ko līdzīgu šim — atslēgai
sarakstā, un tad mums būtu kāds kods, kurā mēs izmantotu taustiņu
katrāpunktā no turienes uz leju — saraksta i-th elementa vietā.
Programmā JavaScript to nevar izdarīt, taču mēs varam darīt kaut ko
līdzīgu objektam var key.
Un pēc tam atveriet izliekto iekavu i.
Un starp šīm izliektajām iekavām mēs varam izmantot objekta
kvadrātiekavas taustiņu, lai atsauktos uz objekta atslēgas elementu
vai atslēgas objekta vērtības pāru kopu.
Mums ir arī nedaudz atšķirīga objekta atslēgas variācij - , tā vietā,
lai izmantotu objekta kvadrātiekavas taustiņu, tagad varam atsaukties
uz atkārtošanos visās vērtībās — pretstatā tai i, kas atkārtojas pa
visiem taustiņiem, šī atkārtos visas vērtības.
Tātad mēs varam aptvert abas atslēgas vērtību pāra puses, izmantojot
var taustiņu in vai var taustiņu of.
Šeit ir masīva piemērs, kurā mēs izmantosim šos divus dažādos cilpas
tipus.
Tātad šeit ir nedēļas masīvs, kurā ir 7 elementi — pirmdiena,
otrdiena, trešdiena, ceturtdiena, piektdiena, sestdiena, svētdiena.
Un es vēlos izmantot četru dienu masīvu nedēļā.
Tāpēc es vēlos izmantot for in cilpu un vēlos konsolēt dot log .
Console dot log ir JavaScript ekvivalents print f.
Tam var piekļūt, izmantojot izstrādātāja rīkus lielākajā daļā
mūsdienu pārlūkprogrammu.
Kas notiks, kad viņi to izdrukās?
Tas izdrukās visu atslēgu sarakstu.
Šajā masīvā tiešām nav atslēgu — ir virkne rādītāju.
Tātad tas izdrukās 0, 1, 2, 3, 4, 5, 6, jo manā masīvā ir septiņi
elementi, un es reģistrēju tos elementus, par kuriem runāju.
Ja es tā vietā gribētu izdrukāt dienas, es izmantotu for of cilpu, un
es konsolē izdrukātu sekojošo — pirmdiena, otrdiena, trešdiena,
ceturtdiena, piektdiena, sestdiena, svētdiena.
Ko darīt, ja es vēlos saistīt informāciju?
Tāpēc atcerieties, ka mēs varam saistīt dažādas virknes.
Mēs to varētu izdarīt Python.
Mēs to varam izdarīt arī šeit JavaScript.
Un mēs to darām, izmantojot plus.
Tātad, ja es vēlos konsolēt dot log dažādas virknes, kas savienotas
kopā, es vienkārši izmantoju plus, lai to izdarītu.
Bet šeit var konsolēt maz virkņuvai ne?
Ja es izmantoju plus, tagad tas nozīmē divas dažādas lietas.
Es gribu virknes savienot kopā, bet varbūt šeit, es vēlos tās
pievienot.
Es tiešām aicinu jūs apskatīt, kas notiek, ja nedēļas masīvu
ierakstāt kādā JavaScript un pēc tam izveidojat cilpu, kas atkārtojas
un konsole to reģistrē.
Var gadīties, ka saskarsieties ar kaut ko negaidītu
Tātad JavaScript veic vislabāko minējumu, un tiek pieņemts, ka šī
diena un 1 ir abas virknes, lai gan patiesībā es vēlos tos burtiski
pievienot kopā, jo tie ir skaitļi.
Bet par laimi JavaScript dod mums iespēju to apiet, izmantojot
funkciju parse int.
Tagad tas mums dos to, ko mēs ceram sagaidīt .
No otras puses, tas mums dos kaut ko tādu, ko mēs negaidām.
Bet tas ir tikai gadījums, kad mēs izmantojam vienu un to pašu
operatoru, lai apzīmētu divas dažādas lietas, un programmas valodai
dažreiz ir jāizdara vislabākais minējums.
Tāpēc ne vienmēr ir lieliski, ka mūsdienās valodas bieži neprasa mums
norādīt datu tipu — ja mēs varētu šeit norādīt datu tipu, mēs to
varētu skaidri noteikt.
Bet šeit, izmantojot JavaScript, tā uzskata, ka tas mums ir ļoti
noderīgs, jo nenorāda tipu.
Un tas dos mūsu labāko minējumu par to, ko mēs vēlamies darīt, bet
dažreiz tas uzminēs nepareizi.
Bet tas dod mums veidus, kā to apiet, ja tas patiešām uzmin nepareizi.
Tātad masīvi patiesībā ir īpašs objekta gadījums.
Un patiesībā JavaScript programmā viss ir īpašs objekta gadījums.
X, jebkurš mainīgais, var x ir vienāds ar 44 — tas ir objekts, kuram
vienkārši ir viens rekvizīts.
Masīvi ir objekts, kuram ir vairāki rekvizīti, kā arī dažas noteiktas
metodes, kuras var uz tiem tikt izmantotas.
Tātad mēs varam saukt izmēra metodi vai pop, vai push, vai shift.
Un es likšu jums izdomāt vai veikt kādu pētījumu par to, kas ir šīs
dažādās lietas.
Taču pietiks ar to, ka tās ir funkcijas, kas būtībā ir tik ļoti
iestrādātas tajā, ko nozīmē būt masīvam, ka mēs varam tās vienkārši
izsaukt, vispirms tās nerakstot.
Tas ir diezgan forši.
Šeit ir vēl viena lieliska lieta, ko varat darīt ar masīviem — tiem
ir cita metode, ko sauc par karti, kas pamatā ļauj mums piemērot
funkciju katram atsevišķam masīva elementam.
Un jo īpaši šis ir lielisks piemērs anonīmas funkcijas izmantošanai.
Tāpēc apskatīsim, kā mēs varētu izmantot anonīmu funkciju, un kāpēc
tas varētu būt noderīgi.
Šeit ir masīvs, ko sauc par nums .
Tajā ir pieci elementi — 1, 2, 3, 4 un 5.
Tagad es vēlos viņiem piesaistīt kādu funkciju.
Tātad, ko es šeit saku, nums ir vienāds, tāpēc es kaut ko darīšu ar
nums.
Es to piešķiršu atpakaļ uz nums.
Skaitļi ir vienādi ar nums dot map — un atcerieties, karte uzņem
funkciju.
Tā ir funkcija, ko vēlos pielietot visiem šī masīva elementiem.
Viena lieta, ko es varētu darīt, ir vienkārši uzrakstīt šo funkciju
kaut kur citur un, ka katra vērtība tiks dubultota.
Pieņemsim, ka es uzrakstīju funkciju, ko sauc par dubultskaitļiem.
Es varētu teikt, nums r vienādi a nums dot map iekavas
dubultskaitļiem , un tas tikai dubulto katru skaitli.
Tas būtu labi.
Bet šeit ievērojiet, ka es izmantoju šo funkcijas atslēgas vārdu un
sniedzu parametru sarakstu — šajā gadījumā num —, taču es nepiešķiru
šai funkcijai nosaukumu.
Kāpēc es šai funkcijai nedodu nosaukumu?
Nu, es tikai veicu šo kartēšanu.
Man nekad vairs nevajadzēs šos skaitļus dubultot.
Kāpēc man jāpārblīvē funkcijas nosaukumu telpu un jāpiešķir tai
nosaukums, ja es to nekad vairs neizmantošu ārpus šī konteksta?
Tas ir diezgan ērti, ka šajā gadījumā mēs varam faktiski izmantot šo
funkciju, nepiešķirot tai nosaukumu, un tomēr likt tai darīt to, ko
vēlamies.
Tātad viss, ko es daru šajās karšu iekavās, ir atvērtās iekavas
pirmajā rindiņā, bet aizvērtās iekavas faktiski atrodas trešajā
rindā.
Un starp iekavām, kur tiek norādīts kartējamais parametrs , es
burtiski definēju visu funkciju.
Un tad, ja es izpildīšu šo koda rindiņu, kas notiks ar nums ?
Nu, jūs droši vien varat uzminēt, tas tikai dubultos katru skaitļa
elementu.
Labi, vēl viena lieta, ko es vēlētos paskaidrot par JavaScript, ir
notikumu jēdziens.
Tātad notikums ir kaut kas tāds, kas iet roku rokā ar HTML
JavaScript, un tā ir atbilde lietotājam, kas kaut ko dara tīmekļa
lapā.
Piemēram, viņi noklikšķina uz pogas.
Iespējams, lapa ir ielādēta , piemēram, pēc tam, kad lietotājs to ir
atjauninājis
Varbūt tie virza kursoru virs kādas lapas daļas vai tamlīdzīgi.
Visas šīs lietas ir notikumi.
Un JavaScript atbalsta tā saukto notikumu administratoru , kas ir
kāds JavaScript kods, kas tiks izpildīts, tiklīdz šis notikums ir
noticis.
Tādējādi tas ļauj mūsu vietnes lapai būt ļoti interaktīvai.
Piemēram, mēs ierakstām lodziņā — mums varētu būt notikumu
administrators , kas parāda ziņojumu, kurā teikts, lūdzu, ievadiet
savu paroli.
Tātad vispirms — tas ir tikai tukšs lauks, kas nepasaka neko.
Jūs sākat tajā rakstīt, un tad šis lodziņš parādās jo jūs sākāt
rakstīt, un tas ir notikums lapā.
Un tas liek jums darīt kaut ko tādu, ko norāda JavaScript notikumu
administrators .
Daudzi HTML elementi atbalsta pasākumus kā atribūtu.
Tātad, šeit ir patiešām vienkārša HTML piemērs.
Man ir vadība un korpuss , un korpusa iekšpusē ir divi taustiņi .
Un viņiem ir šis atribūts, ko sauc par klikšķi.
Noklikšķināšana būtībā ir komanda notikumu administratoram
Tāpēc es vēlos, lai kaut kas notiktu, noklikšķinot uz taustiņiem .
Šobrīd tur nav nekādu notikumu, bet es varu kaut ko ievietot lai,
noklikšķinot uz kāda no šiem taustiņiem , tiktu izsaukta tā funkcija,
kas atrodas starp pēdiņām.
Piemēram, JavaScript mēs varam uzrakstīt patiešām vispārīgu notikumu
administratoru , kas izveido notikuma objektu un mums pateiks, kuršno
šiem diviem taustiņiem tika noklikšķināts.
Un tas varētu izskatīties apmēram šādi.
Noklikšķināšanas taustiņš ir vienāds ar brīdinājuma nosaukuma
notikumu.
Ja mēs to darām, mēs būtībā esam iestatījuši savu HTML tā, ka,
noklikšķinot uz viena taustiņa vai otra taustiņa , tiks izsaukta
brīdinājuma nosaukuma funkcija un tikts nodots notikums.
Lapa automātiski ģenerē notikumu, un tajā būtībā ir visa informācija
par tikko notikušo.
Un no šīs informācijas mēs varam iegūt vairāk informācijas.
Piemēram, šeit redzams , kā varētu izskatīties brīdinājuma nosaukuma
funkcija, un ievērojiet, ka šeit es apstiprinu arī notikuma
parametru.
Ko tad es daru?
Es saņemu jaunu JavaScript lokālo mainīgo, ko sauc par trigeri, un es
prasu šī notikuma avota elementu.
Un būtībā tas man saka to, kas ir lapas elements, ar kuru tika veikta
mijiedarbība un kas izraisīja šo notikumu?
Citiem vārdiem sakot, kāds elements tika efektīvi nodots šai
funkcijai.
Jo tas atkal tiek ģenerēts automātiski.
Lapa zina, kuram taustiņam mēs pieskārāmies, un tāpēc būtībā, kas
šeit notiek, šs taustiņš — neatkarīgi no tā, kurs no abiem — tiek
nodota šai funkcijai.
Pēc tam, runājot par dokumenta objekta modeli, es varu piekļūt šī
aktivizētāja iekšējam HTML, lai noskaidrotu, kurš taustiņš tika
noklikšķināts.
Kas ir iekšējais HTML?
Ļaujiet man uz mirkli paiet dažus slaidus atpakaļ.
Iekšējais HTML ir tas, kas atrodas starp taustiņu tagiem.
Šajā gadījumā pirmais taustiņš ir iekšējais HTML un otrais taustiņš
ir arī iekšējais HTML.
Tātad, kas notiek, kad es noklikšķināšu uz šiem taustiņiem , tas mani
brīdinās, ka jūs noklikšķinājāt uz pirmā taustiņa, ja es
noklikšķināju uz pirmā, vai, ja jūs noklikšķinājāt uz otrā taustiņa,
tas brīdinās, ka noklikšķinājāt uz otrā. .
Tagad atkal mēs tikai pieskaramies JavaScript virsmai, bet es vēlējos
sniegt jums priekšstatu par dažādajām lietām, ko varat darīt, lai pēc
tam varētu doties uz priekšu, apskatīt dokumentāciju un redzēt ļoti
plašo virkni lietu, ko varat darīt arī, vienkārši piemērojot dažus
pamata principus, par kuriem jau esam iemācījušies CS50, tā plaši
paplašinot savas zināšanas.
Es esmu Dags Loids.
Šis ir CS50.