Når du er færdig med at læse dette, ved du, hvordan du koder.

Du vil være dårlig til det, men uanset hvad.

Dette er en tidlig version af et kapitel fra Dit første år i kode, en bog med praktisk vejledning og rådgivning til nye udviklere. Hvis du overvejer en karriere inden for software, kan du tjekke den ud på https://leanpub.com/firstyearincode.

Dette er ikke en komplet kodningshåndbog. Dette er en gennemgangs introduktion til lige nok kodningskoncepter og nøgleord til at få dig fra nul til et grundlæggende script. Det er en 30-minutters læsning.

Jeg skriver dette til:

  • folk, der er interesseret i kodning, men som ønsker at få en forsmag på, hvordan det er, før de forpligter sig noget tid eller kræfter til det;
  • folk, der arbejder direkte med kodere og ønsker at forstå møtrikker og bolte i, hvad de gør;
  • mennesker, der begynder deres computervidenskabsrejse og vil have en 100-niveau grunder i et nøddeskal;
  • folk, der har set programmerere på tv og er nysgerrige efter at vide, hvad de skriver hele tiden.

Først og fremmest: tag en dyb indånding. Forsidebilledet på dette indlæg er ikke rigtig kode. I det mindste er det ikke kode, som nogen bruger. Rigtig kode - hvad jeg skriver på jobbet - er for det meste sammensat af engelske ord, symboler, tal (alle ti'ere, ikke kun enere og nuller) og sammensatte navne. Når du lærer lidt ordforråd, er det læsbart. Jeg vil dække hver af disse senere.

Én anmodning til dig: hvis du ikke forstår noget, skal du fremhæve det og efterlade en kommentar, så jeg kan gøre det klarere. Jeg er en obsessiv redaktør, og jeg vil have, at dette skal være en glat læsning.

Lad os komme igang.

Hvad er et computerprogram?

Et computerprogram - også kendt som en app, en applikation eller et stykke software - er en samling af mange linjer med speciel tekst. De er specielle, fordi en computer kan forstå dem, og computere er utroligt stumme. De mindste praktiske apps har hundrede eller så linjer med tekst i dem. De største apps har milliarder.

Vi kalder denne specielle tekstkode. Kode er et sæt trinvise instruktioner som en opskrift. Det fortæller computere, hvad de skal gøre med data. Data er ethvert stykke information, som en computer kan opbevare i sin hukommelse. Moderne computere er ret gode til at holde ting som datoer og sætninger. Hvis du har en Twitter-konto, så har Twitter nogle flade, grimme computere på et lager, der holder din fødselsdag og hver tweet, du nogensinde har tweetet. Sammen med 300 millioner andre menneskers fødselsdage og tweets.

Det er alle data. Bare rolig, computere sidder ikke rundt og læser dine gamle tweets for sjov. Og hvis de gjorde det, ville det ikke være "sjovt" alligevel. Det ville være smertefuldt. Dine tweets er stumme.

Når du besøger twitter.com, låner din computer en hel masse kode fra en af ​​disse grimme lagercomputere. Den læser hastigheden ud af den kode. Og så kører den den kode, hvilket betyder, at computeren gør nøjagtigt, som de trinvise instruktioner fortæller den skal gøre.

Hvis instruktionerne er skrevet meget omhyggeligt, er det alle fersken herfra og ud. Twitter fungerer. Det vil offentliggøre dine stumme tweets til hele verden. Det giver dig mulighed for at læse andre menneskers stumme tweets. Det giver dig mulighed for twe disse tweets.

Hvis der er nogen fejl i disse instruktioner - alt fra en skrivefejl til fuldstændig fejlagtig fortolkning af dataene - fungerer Twitter ikke. Den vil enten vise en "Fejl" -meddelelse, ødelægge appen eller lide i tavshed og i hemmelighed gøre ting med dine data, som du foretrækker, at den ikke gør.

Det er fangsten. Kodning er ikke meget hård. Det kræver, at du husker et par hundrede termer og lærer nogle grammatiske regler - du kunne gøre dette med engelsk, da du var to, og det engelske sprog er rod. Det, der er svært, bliver kaldt af en anal-tilbageholdende computer, hver gang du trykker på en forkert tast eller misforstår et koncept. Den hårde del ved kodning er den store mængde frustration, du er nødt til at absorbere.

Den sjove del er problemløsningen. I moderne software bliver problemer i den virkelige verden gåder, der kan løses med kode - men først når du virkelig har forstået dem. Når du har viklet dit sind omkring enhver mulig permutation af et problem, kan du skrive kode, der adresserer det grundigt, trin for trin.

Handelens værktøjer

En programmerers værktøjskasse består typisk af et par ting:

  • En computer.
  • En internetforbindelse. Du har brug for en internetforbindelse, så du kan bruge Google. Når du ikke ved, hvordan man gør noget (hvilket sker ca. 787283493857 gange om dagen), Google dem. Når din app giver dig en fejlmeddelelse, Google den. Du Google alt.
  • En kodeditor (eller en IDE, som er en kodeditor på steroider). Tænk på det som Microsoft Word (eller endnu bedre, Edward App) til kodning. Det hjælper dig med at organisere og korrekturlæse din kode.
  • En kompilator eller tolk. Dette er et program, der læser din kode, forsøger at finde fejl, så det kan bug dig om dem, samler din kode i en dejlig lille pakke og derefter videresender den til computeren for at udføre. Det gør en masse andre ting også, men det er de ting, du har brug for at vide om lige nu.
  • Et godt par hovedtelefoner. Disse hjælper dig med at ignorere folk, så du kan fokusere.

Du har sandsynligvis allerede en computer. Da du læser dette, har du bestemt en internetforbindelse og en tolk (Internet Explorer og Google Chrome har indbyggede tolke). Der er masser af gratis kodeditorer tilgængelige online (som denne). Jeg kan ikke hjælpe dig med hovedtelefoner, men et godt alternativ er at stirre på folk, indtil de forlader.

Så du er i orden, ikke?

Programmeringssprog

Der er tusinder af programmeringssprog i verden. Mange af dem er stumme og ubrukelige. Du kan have en lang og lykkelig karriere kun ved at kende tre eller fire - men bare rolig, det er ikke så svært som at lære tre eller fire menneskelige sprog.

Programmeringssprog beskrives ofte ved deres paradigme, som er en måde at kategorisere de slags funktioner, de har. For eksempel er JavaScript det sprog, som alle webbrowsere kører, og muligvis det mest populære programmeringssprog i verden. Det har et forskelligt funktionssæt; Jeg kan sige, at JavaScript understøtter imperative, strukturerede, objektorienterede og begivenhedsstyrede paradigmer. Og du kan måske sige, at jeg er en prætentiøs nørd.

Du behøver ikke at vide, hvad alle disse ord betyder. Hvad du skal vide, er, at programmeringssprog med lignende paradigmer normalt har lignende syntaks - det vil sige ordforråd og grammatik. Så når du først har lært et sprog (som JavaScript), er du allerede 75% af vejen til at lære lignende sprog, som Python og Ruby.

De bedste kodere forstår problemer med hensyn til en algoritme - en række trin, der kan bruges til at gøre en bestemt ting, selvom detaljerne er forskellige hver gang. Har du nogensinde købt noget på Amazon? Checkout-oplevelsen er en slags algoritme. Uanset hvad du køber, er trinene stort set de samme: Fyld din indkøbsvogn, vælg dit kreditkort og forsendelsesadresse, vælg en forsendelseshastighed og bestil din ordre. Koden er faktisk den samme for hvert køb. Forskellen er alt i dataene. Få nu dette: hver algoritme, der muligvis kan eksistere, kan skrives på hvert normalt programmeringssprog. Det er en matematisk kendsgerning. Når du lærer at tænke i algoritmer, er programmeringssproget sekundært. Jo, det sparker og trækker fødderne lidt. Men til sidst handler det ikke om de søgeord og symboler, du bruger. Det handler om de processer, du beskriver.

Herfra og ud vil jeg bruge JavaScript-programmeringssprog til at give eksempler. Jeg gør dette til min fordel, ikke dit. Jeg er god til JavaScript.

Kodeeksempler udskrives i monospace, som er en speciel skrifttype, der ser sådan ud. Monografiske skrifttyper giver den samme nøjagtige bredde til hvert bogstav, tal, symbol og mellemrum. Al kode er skrevet i monospace, selvom det er sværere at læse end normale skrifttyper. Dette skyldes, at det hjælper med at justere kodeblokke og giver kodere mulighed for at være lige opmærksomme på hvert bogstav og symbol, hvilket hjælper dem med at undgå fejl. Se som et eksempel på følgende sætning i både en almindelig skrifttype og monospace:

Der er tre fejl i sætningen: den ekstra plads efter “for”, den ekstra apostrof i “Alice” og Bob's udnyttelse af Alice's venskab og tillid. Åh, og "uden" er forkert stavet. Du så sandsynligvis alle disse fejl i første sætning, men de er mere indlysende i den anden, og åbenlyst er din bedste ven, når du scanner et 200-linjers kodedokument.

Sætter data i kode

Nok baggrund: lad os skrive noget kode. Den mest basale byggesten til et computerprogram er en variabel. En variabel er et navn på et stykke data, f.eks. Et tal eller en sætning. Du skal navngive dine data.

Der er to grunde til, at du navngiver dine data:

  1. Du ved ikke, hvad det er på forhånd. Kender Facebook din fødselsdag, inden du skriver den? Nej selvfølgelig ikke. Facebooks kode bruger et navn som dummy's_birthday bag kulisserne (understregningen er der, fordi variabelnavne ikke kan have mellemrum i dem). Det knytter dette navn til uanset fødselsdag, du skriver i. På den måde kan koden være nøjagtig den samme, uanset om din fødselsdag er 10. juni, 9. september eller 86. december. Det flytter bare dummy's_birthday rundt i programmet, indtil det når en grim lagercomputer.
  2. Du ønsker ikke at glemme, hvad det betyder. Antag, at computerprogrammet skal vide, at 86. december ikke er en rigtig dato. Så et eller andet sted skal du fortælle det, at december har 31 dage. 31 er et tal, et stykke data. Men hvis du bruger nummeret 31 over hele din kode og også bruger numre som 30 og 28 (fordi, takk og lov, december er ikke den eneste måned), bliver din kode forvirrende at læse. Hvad er alle disse numre til? Så du navngiver dem. 31 bliver_nummeret_af_dage_in_december, og din kode bliver selvforklarende. Smuk.

Computere forventer, at du erklærer dine variabler. En variabel erklæring er som et fødselsattest for et stykke data. Det ser sådan ud:

var_nummeret_dat_in_december

Det operative ord her er var. Det forkortes med "variabel." Forkortelsen er fin, fordi den er hurtigere at indtaste. Det kan også indtastes med kun en hånd, så hvis alt hvad du laver er at erklære variabler hele dagen, er din anden hånd fri til at gøre fantastiske ting som juice-grapefrugter og øve med et kvartal.

En anden ting, du gør med variabler, er at tildele dem. Det er her du knytter navnet til et stykke data. Det ser sådan ud:

the_number_of_days_in_december = 31

Nemme ting. Du erklærer variablen, tildeler du den, og derefter når som helst du vil bruge nummeret 31 i dit program, kan du skrive_nummeret_af_dage_in_december, og computeren vil vide, hvad du mener.

Du behøver ikke tildele hver variabel til et eksplicit stykke data, når du skriver dit program. Du kan erklære variabler og tildele dem til ting, der ikke findes endnu. For eksempel kan du erklære var dummy's_birthday og bede appen om at vente på, at brugeren skal indtaste den. Uanset hvad de skriver, bliver dummy's_birthday. Du behøver ikke engang at bekymre dig om det.

Variabler kan holde mere end blot tal og datoer. For eksempel kan du erklære en streng eller et stykke tekst:

var great_song_lyrics = 'La la la, la la la i aften'

Whoa. Curveball. Jeg erklærede lige en variabel og tildelte den på samme tid. Jeg holder mig så effektiv. Bring denne mand en grapefrugt.

Nu kan jeg skrive great_song_lyrics i min kode, hvor jeg vil, og computeren vil vide, at jeg mener 'La la la, la la la i aften'. Det er som om vi taler ... i kode.

Tro ikke mig? Prøv det lige nu. Hvis du læser dette på din telefon, skal du åbne en webbrowser, som Google Chrome, på en computer. Tryk på F12-tasten på dit tastatur (hvis du er på en Mac, prøv dette i stedet). Du kan se noget lignende:

Dette kan justeres til højre eller nederste kant af din browser.

Sørg for, at fanen "Konsol" er valgt. Klik i det tomme område ved siden af ​​symbolet>, skriv en variabelangivelse og tildeling, og tryk på Enter:

Konsollen siger udefineret, fordi den kodelinje, du indtastede, ikke producerede nogen data. Det var okay, det skulle det ikke. Skriv nu navnet på din variabel og tryk på Enter igen:

Hurra! Konsollen (som er en tolk) forstår din variabel. Variablen great_song_lyrics evaluerede (det blev forstået) som "La la la, la la la i aften". Det er perfekt (for øvrig betyder det ikke noget, hvis du bruger enkeltcitater eller dobbeltcitater ", så længe du bruger dem i matchende par).

Vi vil tale om andre ting, variabler kan indeholde i løbet af et øjeblik.

Mange programmeringssprog kræver, at du er specifik om, hvilken slags variabel du erklærer. I C ++ er der for eksempel ikke et var-nøgleord. Der er et int-nøgleord (til angivelse af små hele tal), et langt nøgleord (til angivelse af store heltal), float og dobbelt nøgleord (til angivelse af decimalantal), et streng nøgleord (til at erklære tekststykker) og et par andre. Bare rolig ikke lige nu. Du kan lære det senere.

Komplekse typer

objekter

En vigtig del af kodningen er at lære at organisere data. Tag fødselsdagseksemplet: Facebook har hundreder af millioner af fødselsdage (og jubilæer og opdelingsdatoer) gemt i computerhukommelsen i dens lager. Hvordan ved det, hvad der er hvad? Hvis jeg gav dig en liste med en milliard datoer, ville du vide, hvem de tilhører, og hvad de er til? Selvfølgelig ville du, fordi du er den store Calendifus, græske gud med tilfældigt betydningsfulde datoer.

Heldigvis har Facebook ikke bare en bunke vilkårlige datoer, der sidder rundt. De forbinder din fødselsdag, dit jubilæum, din hjemby, din beskæftigelseshistorie, dit navn og alt andet, de ved om dig, sammen med et unikt ID (som den på dit socialsikringskort eller dit kørekort). Det er sandsynligvis et stort antal, at de plukket ud af en hat, så at sige. Det vil sige, du er nummer 12884002, og hvert stykke data, de har på dig, har en etiket, der siger “12884002”, og når du logger ind, søger de alt op med det nummer på det. Det hele er organiseret sådan.

I kode vil du gøre dette med et objekt. Et objekt er en masse stykke data, som alle er organiseret sammen. Vi kan også kalde dette et assosierende array, en ordbog eller et kort. Men oftest siger jeg bare objekt.

I JavaScript deklareres og tildeles objekter ligesom andre variabler. Her er et eksempel objekt:

var dummy = {
    id: 12884002,
    alder: 28,
    navn: 'Bob',
    yndlingssang: 'Fotografi, af Nickelback'
}

Hvert stykke data i et objekt er som en sving. Navnet er til venstre, dataene er til højre, og der er en: i midten for at balancere på. Det eneste, vi har gjort, er at erklære fire variabler: de to første er tal, og de sidste to er strenge. Men de er organiseret sammen, så vi kan finde dem, når vi har brug for at vide noget om dummy. Og i stedet for at kalde dem "variabler", kalder vi dem "egenskaber" eller "felter." Et objekt kan have alle de egenskaber, du ønsker, så længe du sætter dem alle sammen inde i {krøllede parenteser}.

Vi kan flytte dummyobjektet rundt og henvise til det ligesom enhver anden variabel. Computeren ved hvad vi mener. Hvis vi nogensinde ønsker at henvise til kun en egenskab ved dummy, bruger vi en prik som denne:

dummy.id
dummy.name
dummy.age
dummy.favorite_song

Hver af disse er ligesom enhver anden variabel. Vi kan tildele noget til det og henvise til det senere. Vil du ændre Bob's navn? Let:

dummy.name = 'Alice'

Og det er det. Det er en rigtig god opgradering, ikke sandt? Fra nu af vil det, når du skriver dummy.name, henvise til “Alice”.

Arrays

Nogle gange ønsker du ikke at tænke et unikt navn på hver egenskab i et objekt, især hvis de alle er meget ens. Eller du ved ikke, hvor mange der vil være. Det er når det er tid til at bruge en matrix, som er en liste over lignende data. Arrays kan vokse eller krympe efter behov.

Et godt eksempel er alle dine stumme tweets. Twitter ved ikke, hvor mange tweets du vil skrive. Du startede klokken 0, og se, hvor du er nu. Twitter bruger en matrix til at holde dem alle sammen. Arrays i JavaScript ser sådan ud:

var dumb_tweets = ['Hej, Twitter!', 'Mine venner er så seje', 'Vil nogen have en LaCroix?']

Kan du huske, hvordan genstande brugte {krøllede parenteser}? Arrays bruger [firkantede parenteser]. Denne matrix har tre strenge i sig, adskilt af kommaer. Og ja, det er en variabel ligesom alt andet. Du kan bruge dumb_tweets hvor som helst i din kode, og det vil henvise til den matrix, vi netop definerede.

Hvis du vil henvise til en bestemt streng i matrixen, vil du gøre det sådan:

dumb_tweets [0]
dumb_tweets [1]
dumb_tweets [2]

Vi bruger navnet på arrayet, dumb_tweets, og derefter inden i [firkantede parenteser] bruger vi nummeret (eller indekset) på den ting (eller element), vi vil henvise til. Jeg ved, det er underligt, at det første element i matrixen er nummer 0. Men dette er dit liv nu. Fra denne dag frem og tilbage vil du altid begynde at tælle til 0. Det er programmeringsmåden.

Hvert af ovenstående udtryk (et udtryk er en hvilken som helst kode, der omdannes til et stykke data, når du kører det) er en variabel. Du kan tildele noget nyt til det, hvis du vil.

dumb_tweets [2] = 'Jeg beklager bogstaveligt talt alt, hvad jeg nogensinde har sagt'

Hvad er der sket med 'Vil nogen have en LaCroix?'? Det er væk for evigt. Sluges af afgrunden. G'bye!

Arrays kan indeholde strenge, tal, datoer, objekter og endda andre arrays. Du kan placere arrays inden i arrays inden i arrays inde i arrays.

Enhver tidskode eller data får al begyndelse som det, vi siger, at de er indlejret.

Arrays kan også være egenskaber ved objekter. Et objekt kan have en egenskab, der er en række objekter, som hver har en egenskab, der er en række objekter… og jeg har gjort det igen. Det lyder som en russisk dukke, men det er sådan, data er struktureret. For eksempel kan din Twitter-konto være et objekt, der har en egenskab, der er en række tweets; hver tweet kunne være et objekt, der har egenskaber, der er matrixer af svar, likes og gentagne gange; hvert svar, lignende eller retweet kunne være et objekt, der har egenskaber, der er navnet, profilbilledet og biografen for den bruger, der gav dem; og så videre.

var nested_object = {
    an_array: [
        {
            another_array: [
                {
                    endnu en: [
                        {
                            besked: 'Blink to gange, hvis du har brug for hjælp'
                        }
                    ]
                }
            ]
        }
    ]
}

For at få adgang til beskeden kan du skrive:

nested_object.an_array [0] .another_array [0] .yet_another [0] .message

Og computeren ved, at du mener 'Blink to gange, hvis du har brug for hjælp.'.

Objekter (fortsat)

Endnu en trippy del, og så kan vi gå videre til de sjove ting.

Alt i JavaScript er i hemmelighed et objekt (fortæl ikke! Dens forældre ville være så gale). For eksempel har vores dumb_tweets-matrix en egenskab, som vi aldrig har erklæret:

dumb_tweets.length

Hvad pokker er længden? Det er en egenskab, som JavaScript opretter og opdaterer til dig automatisk. Det fortæller dig, hvor mange elementer der er i matrixen. I dette tilfælde ville det være 3. Der er 3 elementer i matrixen. Gå tælle dem, men start ikke fra 0 denne gang, fordi jeg løj, og du skulle kun begynde at tælle fra 0 ved specielle lejligheder. Pokkers.

API'er

Tid til en skræmmende bålhistorie.

Det var engang i et alternativt univers en programmerer ved navn McChuck. Han var den eneste koder i hele universet. Han var nødt til at skrive al den kode, der nogensinde ville eksistere, helt alene.

Sheesh, det var bare en historie. Slap af.

Sandheden er, at ingen koder er en ø. Vi bruger konstant kode, vi ikke skrev - spande med den, faktisk.

Selv hvis du er en produktiv koder og skriver millioner af kodelinjer i din levetid, vil du bruge langt flere kodelinjer, som en anden har skrevet. Det meste af denne kode kommer fra komplette fremmede. Nogle af disse fremmede vil være døde. Deres kode lever videre, selvom fingrene, der indtastede den, nedbrydes i en grav. Det er zombiekode. Men i stedet for at spise din hjerne, sparer det din hjerne fra at arbejde meget hårdt. Bedst. zombie. nogensinde.

Hvordan bruger du denne zombiekode? Kopiere og indsætte? Lejlighedsvis, ja, men ikke ofte. Det meste af tiden får du adgang til det via en API. Et API er et samlet sæt egenskaber og metoder (specialbyggede kodestykker), der navngives, som variabler, så du kan henvise til dem ved deres navn og lade dem gøre deres ting. De gør alle slags nyttige ting for dig.

JavaScript-arrays har deres egen API. Længdeegenskapen er en del af denne API. En anden del af det er push-metoden, der tilføjer et element til slutningen af ​​matrixen:

dumb_tweets.push ('Mand, jeg hader gode holdninger')

En metode er som en egenskab, fordi du får adgang til den med en prik. En metode er forskellig fra en egenskab, fordi du skal sætte (parenteser) efter den. Disse parenteser indeholder de data, vi vil tilføje til vores array. Nu har dumb_tweets fire elementer. Det ser sådan ud:

['Hej, Twitter!', 'Mine venner er så seje', 'Jeg beklager bogstaveligt talt alt, hvad jeg nogensinde har sagt', 'Mand jeg hader gode holdninger']

Husk, indekset for dette sidste element er 3 (fordi du begyndte at tælle ved 0), så du vil referere til det som dumb_tweets [3]. Og dumb_tweets.length ville nu evaluere til 4.

JavaScript array API har en masse forskellige metoder i det, men det er uden for formålet med dette indlæg at forklare dem alle. Du kan se dem i deres fulde herlighed på dette link.

Webbrowsere har et enormt API, som JavaScript-kodere bruger hver dag. Denne API har metoder til ting som at animere ting på et websted, få brugerinput, kommunikere med andre computere over internettet, manipulere strenge og masser af andre ting. At opbygge et fungerende ordforråd i denne API er en væsentlig del af at blive en webudvikler.

Funktioner

Funktion er et andet ord til metode. Det er bare et stykke kode, der gør noget og (som regel) har et navn. Funktioner er lette at erklære i JavaScript:

funktion giveMeOne () {
    retur 1
}

Vi starter med nøgleordsfunktionen. Derefter giver vi funktionen et navn, ligesom hvis vi erklærer en variabel (her har jeg brugt store bogstaver i stedet for understregninger til at adskille ord). Derefter bruger vi parenteser (du kan se hvorfor om et sekund). Derefter bruger vi {krøllede parenteser}. Inde i de krøllede parenteser er alle kodelinjer, som vi ønsker at udføre, hver gang funktionen kaldes (hver gang et udtryk henviser til det ved navn).

Ordet tilbagevenden er et andet specielt nøgleord. Det får en værdi (et stykke data) til at springe ud af funktionen. Derefter afslutter den funktionen (hvis du skriver en kode efter en returerklæring, udføres den kode ikke). Så du kunne gøre noget som dette:

var the_loneliest_number = giveMeOne ()

Dette er ikke for svært, ikke? Vi erklærer en variabel ved navn the_loneliest_number. Tildelingsdelen af ​​vores erklæring kalder giveMeOne (), og da denne funktion siger retur 1, springer en 1 ud. Så vores variabel har nummeret 1. Gå videre og udfør begge disse blokke af kode i din browsers konsol. Skriv derefter_loneliest_nummeret, tryk på Enter, så ser du, at det evalueres til 1.

En funktion kan være en egenskab ved et objekt. Det kan være et element i en matrix. Det kan returnere et tal, en dato, en streng, et objekt, en matrix, en anden funktion, en matrix fuld af funktioner osv. Denne ting er som LEGO-klodser. Læg enhver form for stykke hvor som helst, du vil, og det vil passe.

giveMeOne () er ligesom dumb_tweets.push (). De vigtigste forskelle er:

  1. giveMeOne () er en funktion, vi selv skrev. push () er en funktion, som nogle fremmede skrev. Det er okay, de har ikke noget imod, hvis vi bruger det.
  2. push () er en metode til dumb_tweets (og enhver anden matrix, vi nogensinde vil oprette). giveMeOne () er global, hvilket betyder, at vi ikke behøver at henvise til et specifikt objekt for at bruge det.

Du vil bemærke en ting til, der synes anderledes om dem: giveMeOne () bruger tomme parenteser, men push () forventer, at vi lægger et stykke data i parenteserne. Faktisk ville push () være nytteløst, hvis vi ikke kunne fortælle det, hvad vi skal tilføje til vores array. Det stykke data, vi giver det, kaldes et argument. Et argument er kun et stykke data, som vi slipper ind i en funktion. At erklære en funktion, der forventer argumenter, ser sådan ud:

funktion addTheseNumbersTogetherPlz (nummer1, nummer2) {
    return nummer1 + nummer2
}

Denne funktion er ikke alt for forskellig fra giveMeOne (). I stedet for tomme parenteser har disse variabelnavne i dem, adskilt af et komma. Dette er vores argumenter. Return-erklæringen gør nøjagtigt, som det ser ud som om det gør: det tilføjer nummer 1 og nummer2 sammen, og spretter derefter resultatet ud. Du kalder funktionen sådan: addTheseNumbersTogetherPlz (3, 4). Og det ville poppe ud en 7.

Ooh! Math! Skræmmende, ikke? Næsten alle kodesprog giver dig mulighed for at skrive matematiske udtryk på samme måde som du plejede at skrive dem i de murede TI-regnemaskiner, du brugte i gymnasiet. Du kan bruge + til at tilføje, - til at trække fra, / til at opdele, * for at formere sig, (parenteser) for at håndhæve en rækkefølge af operationer,% for at få resten af ​​opdelingen, og ^ til øjeblikkeligt at vokse en halsbjørn (nej, det gør det ikke ' t gøre eksponenter; du har brug for en API til det).

Du kan også skrive funktionen på denne måde:

funktion addTheseNumbersTogetherPlz (nummer1, nummer2) {
    var sum = nummer1 + tal2
    retursum
}

Denne funktion gør nøjagtig den samme ting. Den bruger bare en variabel, der kaldes summen som mellemmand.

Der er mange måder at skrive en funktion på. Du skal vælge den måde, der tydeligst udtrykker, hvad koden gør. Kode, der er kortfattet og let at forstå kaldes ofte udtryksfuld eller veltalende. Der er en kunstnerisk fornøjelse ved at skrive denne type kode.

Programmer skal skrives for at folk kan læse, og kun tilfældigtvis for maskiner, der skal udføres. ~ Harold Abelson

Logiske grene og sammenligninger

Det er her kode bliver ekstra sjovt. (Det var allerede sjovt.)

Computerprogrammer gør ikke det nøjagtige, hver gang du kører dem. Hvis de gjorde det, ville videospil spille sig selv. Det ville være et svigt. Du bliver nødt til bare at sidde der og se historien spille ud på skærmen, som en ... um ... jeg ved ikke, men det ville være kedeligt. Der ville bestemt ikke være en hel branche dedikeret til det.

Programmer skal reagere på forskellige situationer. De skal tage beslutninger. Og det er her ting kan lide, hvis udsagn kommer ind.

Lad os sige, at vi skriver en app, der bestemmer, om en bestemt person har adgang til en natklub. Læg som om der er en metode i JavaScript API, der får en brugers alder. Vi kalder det getUserAge (). Vi kan også forestille os, at der er to andre metoder, tillad ThemInTheNightklub () og smidTemOutOnTheirButt (). Hvordan kan vi hjælpe vores program med at beslutte, hvilken af ​​disse to sidste metoder, der skal kaldes, baseret på den returnerede værdi af den første metode?

var alder = getUserAge ()
if (alder> = 21) {
    allowThemInTheNightclub ()
} andet {
    throwThemOutOnTheirButt ()
}

Se hvor pæn justeringen er på højre side? Monotype til sejren.

Du ved allerede, hvad den første linje gør. alder vil have en værdi som 13 eller 21 eller 101. Nu skal vi vide: er alder 21 eller derover? I så fald kan de feste væk. Hvis ikke, er de nødt til at forlade.

Det gør vi ved hjælp af en if-sætning. hvis er et nøgleord der ligner en metode. Det argument, det forventer, er et udtryk af en eller anden art, som regel en sammenligning. Sammenligninger tager to værdier og sammenligner dem med hinanden, hvilket resulterer i en værdi af sand (hvis sammenligningen er sand) eller falsk (hvis den ikke er sand). Disse to værdier kaldes booleanere, og de er de eneste to booleanere, der findes. Vi kan foretage seks forskellige slags sammenligninger:

  • === (tre lige tegn) sammenligner værdierne på hver side for at se, om de er nøjagtigt ens. Hvis de er ens, er resultatet sandt. 6 === 6 ville være sandt.
  • ! == sammenligner værdierne på hver side for at se, om de ikke er nøjagtigt ens. Hvis de ikke er ens, er resultatet sandt. 6! == 3 ville være sandt.
  • > kontrollerer for at se, om værdien på venstre side er større end værdien på højre side. 6> 3 ville være sandt.
  • > = kontrollerer for at se, om værdien på venstre side er større end eller lig med værdien på højre side. 6> = 6 og 6> = 5 er begge rigtige.
  • <= kontrollerer for at se, om værdien på højre side er større end eller lig med værdien på venstre side. 6 <= 6 og 6 <= 7 stemmer begge.

hvis udsagn vurderer den sammenligning, du giver dem. Hvis det evalueres til sandt, udfører de koden inden i deres blok (kodelinjerne inde i {krøllede parenteser}). Hvis den evalueres til falsk, springer de den kode over.

hvis udsagn også kan have en anden erklæring knyttet til deres haleenden. Den anden erklæring har en blok, der udføres, hvis sammenligningen er falsk. Se tilbage på vores natklub-app. Det skal give en masse mening for dig nu.

Hej, vi lavede bare en bouncer overflødig (han blev erstattet af et computerprogram). Er det ikke en god følelse?

loops

Nogle gange, især når du arbejder med en matrix, ønsker du at udføre en blok med kode flere gange i træk. Dette er ikke tid til at bruge kopiere og indsætte. I stedet skal du bruge en løkke. Den enkleste form for loop i JavaScript er en while-loop:

var the_real_slim_shady = ['Mit navn er', 'Mit navn er', 'Mit navn er', 'Waka waka Slim Shadyyy']
var indeks = 0
while (indeks 

mens løkker bruger den samme syntaks som om sætninger. Du bruger parenteser, du sender en sammenligning, du følger den op med en blok. Men en if-blok udfører kun koden inde i den en gang (eller nul gange, hvis sammenligningen evalueres til falsk). Et stykke tid udfører koden inde i den igen og igen, indtil betingelsen er falsk. Det vil sige, den vurderer betingelsen; hvis det er sandt, udfører det blokken; derefter evaluerer den tilstanden igen; hvis sandt, udfører den blokken igen; derefter evaluerer den tilstanden igen; og så videre, for evigt. Jeg har opfundet et imaginært API her, der har en rap () -metode, men alt andet er almindelig JavaScript.

Hvor mange gange udføres løkken? Nå, første gang det evaluerer sammenligningen, kontrolleres det for at se, om indeks (som er 0) er mindre end_real_slim_shady.length (som er - gå videre, tæl dem - 4). Da sammenligningen er sand, udfører den koden, som raps the_real_slim_shady [0], fordi indeks stadig er 0. Derefter sker magien: den skifter indeks til indeks + 1, eller 0 + 1, som er 1. Derefter evaluerer den sammenligning udtryk igen. 1 er stadig mindre end 4, så den udfører blokken igen - men denne gang, da indekset er 1, rapper det the_real_slim_shady [1]. Hent det? Det vil stoppe med at udføre blokken, når indeks er lig med 4, hvilket er godt, fordi_real_slim_shady [4] ikke findes. Når en løkke fungerer på flere elementer i en matrix, siger vi, at den itererer.

Nul og udefineret

Hvis du erklærer en variabel og ikke tildeler en værdi til den, vil den indeholde en særlig værdi kaldet udefineret. Dette er et nørdigt ord, der betyder "bevæge dig, intet at se her." Det er for det meste nytteløst.

JavaScript har også en særlig værdi kaldet null. Det betyder omtrent det samme som udefineret. De skulle virkelig ikke have inkluderet begge ord på sproget. Men det gjorde de, og det er for sent nu.

Scopes

Funktioner er meget egoistiske. Hvis du erklærer en variabel inde i en funktion, lader funktionen ikke nogen af ​​koden uden for sig selv bruge variablen. For eksempel:

funktion whatHappensInVegas () {
    var wildIndiscretions = ['partied', 'dansed']
    vende tilbage 'Jeg indrømmer intet'
}
whatHappensInVegas ()
whatHappensInVegas ()
whatHappensInVegas ()
if (wildIndiscretions.length> 0) {
    getADivorce ()
}

Vi har en meget enkel funktion. Den erklærer variablen wildIndiscretions, men den returnerer den ikke. Omverdenen ved intet om det! Vi kører endda funktionen tre gange, fordi vi er unge og fulde af udholdenhed. If-udsagnet forsøger at lirke ind i funktionens personlige liv, men det kan ikke. Koden inde i if-blokken udføres aldrig. Faktisk vil sammenligningen wildIndiscretions.length> 0 kaste en fejl (den fungerer ikke, og du vil se en meddelelse, der forklarer hvorfor), fordi wildIndiscretions er udefineret uden for funktionen whatHappensInVegas. Det har ikke nogen egenskaber, hvad så ikke længde.

Men hvis du flytter det, hvis der blokeres inde i funktionsblokken (inden returneringsangivelsen, selvfølgelig), vil den få adgang til wildIndiscretions. Håber du havde en prenup, bub!

Kommentarer

Det er ikke altid indlysende, hvad et stykke kode laver, eller hvad der stadig skal gøres med det. Hvis du har brug for at bryde ud af computersproget og snakke noget om, hvad der foregår i koden (eller bare slippe nogle dope-tekster), kan du bruge en kommentar eller en kodelinje, som computeren vil ignorere. Du starter en kommentar med // to skråstreg. Sådan her:

funktion isEven (num) {
    // Denne funktion bestemmer, om "num" er jævn eller ulig.
    // Hvis det er jævnt, returnerer det sandt. Hvis ulige, returnerer det falsk.
    // TO DO: tilføj et andet argument, der giver dig mulighed for at specificere
    // en meddelelse, der vises, hvis "num" er underligt.
    retur (num% 2) === 0
    // Hej, gør det som Isaac
    // Hvis du ikke er med mig, er baby ikke klog-aac
}

Du skal ikke bekymre dig om matematikken i returserklæringen. Jeg demonstrerer bare, at du kan bruge kommentarer til at forklare, hvad der foregår, for at efterlade en note til dit fremtidige selv og til at spytte bjælker. Den sidste anvendelse er sandsynligvis rynket i alvorlige codebases. Men lad ikke manden holde dig tilbage. Du blev født til at gøre det, du blev født til at gøre.

O Google-træ, O Google-træ ...

Den sidste og vigtigste ting, jeg kan lære dig, er dette: når du ikke ved, hvordan man gør noget, skal du straks gå til google.com og spørge. Programmets samfunds generøsitet vil forbløffe dig. Tusinder af udviklere over hele verden har frit delt deres kode og viden på websteder som GitHub og Stack Overflow, hvilket betyder, at alt hvad du har brug for for at blive ekspert i ethvert programmeringssprog er en stabil internetforbindelse og evnen til at læse.

Gode ​​Google-forespørgsler kræver lidt praksis at skrive. En god skabelon er noget som dette:

[programmeringssprog] hvordan man [noget]

Vil du for eksempel vide, hvordan du fjerner et element fra en matrix i JavaScript? Jeg skal ikke lære dig det. Prøv at indtaste dette i Google: “JavaScript hvordan man fjerner et element fra en matrix”. De første få resultater skal give dig alle de oplysninger, du har brug for (med eksempler!)

syntese

De fleste store apps bruger alle de koncepter og nøgleord, jeg har beskrevet. Deres kode består af tusinder på tusinder af linjer med kode, alle bygget fra disse samme grundlæggende elementer. Så hvad laver de?

På et grundlæggende niveau modtager de input (data, der indtaster koden fra et andet sted, som en brugers tastatur), transformerer dem (ofte ved at iterere over dem, lave matematik på dem eller omorganisere deres egenskaber) og levere output ( data, der efterlader koden). Hvert computerprogram kan beskrives med hensyn til dets input og output. Hvert programmeringssprog har metoder i sin API til at acceptere input og levere output.

En isproducent er en god analogi til et computerprogram. Dets input er vand og elektricitet (de kommer fra en API kaldet ”kommunale forsyningsselskaber”). Dets output er is (som sendes til et API kaldet "et højt glas koks"). Er det ligeglad med hvad der sker i midten? Ikke lige nu, så længe du får din is uden for mange problemer. Men en dag vil ismaskinen bryde sammen. Og den, der skal ordne det, vil bekymre sig meget om, hvor enkle, robuste og velbyggede dens interne komponenter er.

En koders job er ikke kun at skaffe isen, selvom det er vigtigt. En koders job er at sørge for, at når ismaskinen går i stykker, den person, der skal ordne det, ikke udvikler en eksplosiv stress-brok i processen. Det er forskellen mellem en amatørkoder og en professionel.

Konklusion

Du har gjort det godt. Jeg har lært dig nok grundlæggende programmering til at du med lidt fantasi og masser af Googling kan lære dig alt hvad du behøver at vide for at skrive apps. Hvis du vil.

Du kan stadig føle, at du mangler nogle vigtige oplysninger. Og du er. Men du lærer aldrig det hele, og dette er en god start.

Hvis du stadig er ryster på dine fødder, kan du tjekke nogle flere JavaScript-tutorials. Der er masser af gratis online. Og når du føler dig selvsikker nok til at skrive din egen kode, skal du opbygge noget. Der er ingen erstatning for at få dine hænder beskidte.

Held og lykke!

Yderligere læsning

  • Sådan tænker du som en computer videnskabsmand af Allen Downey, Jeffrey Elkner og Chris Meyers. Dette er en mere velskrevet og omfattende (men uden tvivl mindre underholdende) version af det, jeg har skrevet her, rettet mod Python-programmeringssprog.

Læs denne historie senere i tidsskriftet.

Vågn op hver søndag formiddag til ugens mest bemærkelsesværdige historier i Tech, der venter i din indbakke. Læs det bemærkelsesværdige i Tech nyhedsbrev.