Velkommen til serien min om å få tak i det fantastiske språket som er Objective-C. Gjennom denne lille serien av artikler, er mitt mål å ta deg fra ingen tidligere erfaring med Objective-C til å bruke det trygt i dine egne applikasjoner. Dette er ikke en rush jobb - så ikke forvent å bare skumme gjennom det grunnleggende og være borte - vi skal gå gjennom ikke bare de bare nødvendighetene, men også de beste metodene du kan søke for å sikre at koden din er den beste det kan bli. La oss hoppe rett inn!
Hvis du leser denne serien, vil jeg risikere en gjetning som du allerede vet, men for de av dere som ikke gjør det, ikke vær så bekymret som ved slutten av denne delen, vet du hva det er tilbake til -front og innvendig ut.
Mål-C er et objektorientert språk som ligger på toppen av C-språket (men jeg slår på at du gjettet den delen!). Det er primært bruk i moderne databehandling er på Mac OS X som et skrivebordsspråk og også på iPhone OS (eller som det nå kalles: iOS). Det var opprinnelig hovedspråket for NeXTSTEP OS, også kjent som operativsystemet Apple kjøpte og nedkjørte Mac OS X fra, noe som forklarer hvorfor dets primære hjem i dag ligger på Apples operativsystemer.
Fordi Objective-C er en streng erstatning av C, er vi fri til å bruke C i en Objective-C-fil, og den vil kompilere fint. Fordi enhver kompilator av Objective-C også vil kompilere noen rett C-kode som er sendt inn i den, har vi all kraften til C sammen med kraften til objekter levert av Objective-C.
Hvis du er litt forvirret på dette punktet, tenk på det på denne måten: alt C kan gjøre, mål-C kan også gjøre, men ikke omvendt.
Gjennom hele denne serien vil vi ikke fokusere på å bygge applikasjoner for iPhone. I stedet vil vi konsentrere oss mer om språket i seg selv og derfor er alt du trenger, en Mac med en kompilator som GCC. Hvis du har installert utviklerverktøyene fra Apple (Xcode, Interface Builder, etc), bør GCC allerede være installert. Hvis ikke, så hør til Apples utvikler nettsted og få deg en gratis kopi.
Så langt som forutsetninger går, mens jeg ikke forventer at du har en fullstendig bakgrunn i datavitenskap, vil litt kunnskap om programmering generelt eller C spesielt være en bonus. Hvis du ikke har mye tidligere programmeringserfaring, ikke bekymre deg - du henter det på kort tid!
Hvis du kjører Windows (som ikke er sannsynlig da denne opplæringen er rettet mot iPhone-utviklere), kan du fremdeles samle Objective-C på systemet ditt ved hjelp av en kompilator som CygWin eller MinGW. Denne opplæringsserien passer til Mac-brukere, men hvis du bruker Windows og støter på problemer, så vær sikker på å legge igjen en kommentar, og jeg vil se om jeg kan hjelpe.
Før du kan se koden din, må du kunne kompilere den til noe kjørbar. Forhåpentligvis har du nå din kopi av GCC klar. Kompilering er veldig enkelt, en enkel en linje kommando.
MERK:
Kompilering er prosessen med å "oversette" et høyt dataspråk, som Objective-C eller PHP, til en maskinvare på lavt nivå som kan behandles av en datamaskin når programmet utføres.
Alle programmene vi ser kjører i vårt fasjonable Mac OS-operativsystem, består av en rekke instruksjoner som visuelt vises til oss i et GUI eller Graphical User Interface. I motsetning til GUI programmet interaksjon med en mus som de fleste av oss er kjent med, er det mulig å utstede kommandoer direkte til operativsystemet gjennom et tekstbasert grensesnitt kjent som en "terminal" eller "kommandolinje."
Kommandolinjeprogrammet i Mac OS kalles Terminal og finnes i Programmer -> Verktøy. Gå videre og åpne Terminal nå (du kan også søke etter det i Spotlight). Terminal har flere grunnleggende kommandoer du bør være oppmerksom på for å kunne utnytte den. En av de viktigste kommandoene å vite er cd, som står for "endre katalogen." Denne kommandoen lar oss endre hvor i filsystemet Terminal leser fra. Vi kan ikke bare fortelle Terminal å kompilere filen vår hvis vi ikke viser den hvor filen er først! For å bytte til ønsket katalog, kan du bruke en fullstendig sti som:
CD / Brukere / MyName / Desktop / Test
Du kan også bruke relative baner, slik at du bare kan skrive inn et enkelt mappenavn i noen tilfeller. Hvis du for eksempel allerede er i skrivebordsmappen, kan du bare skrive:
cd-test
for å komme til testmappen.
Hva om du vil se hvor du er i øyeblikket? Det umiddelbare mappenavnet vises før spørringen (den delen du skriver inn). For eksempel, hvis spørringen din sier Dan- Walkers-MacBook: Desktop iDemonix $ Jeg kan anta at jeg er i skrivebordsmappen. Hvis du ikke er sikker, kan du også skrive pwd for å vise absolutt filepath for gjeldende plassering.
Hvis du vil liste hvilke filer og mapper som er i gjeldende mappe, bruk listen kommandoen: ls. Til slutt, hvis du ønsker å gå opp en katalog til en overordnet mappe, skriv "cd ... ". Så, hvis vi var i testmappen, som ligger inne i skrivebordsmappen, men vi ønsket å gå til skrivebordsmappen i stedet, kunne vi skrive cd ... å gå opp til overordnet katalog, skrivebord. Hvis vi ønsket å komme til hjemmekatalogen, ville vi skrive cd ... / ... å gå opp to nivåer. Alternativt, for å komme til hjemmekatalogen kan du bare skrive inn cd ~ fra hvor som helst.
Når du bruker Terminal-applikasjonen, ser kompilering ut slik:
gcc inputfile.m -o outputfile
Du har sikkert allerede gjettet hvordan det virker: inputfile.m inneholder vår kode (.m er utvidelsen brukt til Objective-C-filer) og -o forteller gcc vi vil at vår eksekverbare skal bli kalt hva vi spesifiserer neste, som i eksemplet ovenfor er output-fil. For å kjøre vår opprettelse etter samling, skriver vi bare:
./output-fil
Enkel.
Når du kompilerer, vil kompilatoren generere eventuelle feil, varsler eller advarsler relatert til syntaksen til koden din. Feil generert ved kompilering forstås forståelig som "kompileringstid" -feil, og dette er ofte den mest stressende delen av å skrive et program (spesielt når koden din ikke samler fordi du setter en enkelt karakter på feil sted eller glemmer å avslutt en linje med en halvtarm). Kompilering kan også ta tid når du skriver store applikasjoner som består av flere filer, noe som også er en annen grunn til at kompilering kan være en kjedelig opplevelse. Dette faktum har ført til at en allestedsnærværende programmererspøk ofte sett på menns t-skjorter med ukjente skjegter: "Jeg slår ikke av. Koden min er kompilert."
Mål-C selv er ikke så vanskelig å lære. Når du får tak i de grunnleggende prinsippene, kan du velge resten når du går ganske enkelt. Du trenger å ha en forståelse av grunnleggende for C programmering skjønt, og det er hva resten av denne opplæringen vil dekke.
La oss se på et grunnleggende program i C:
#inkludereint main () printf ("Hello World \ n"); returner 0;
Alt dette programmet vil gjøre når du kjører, det viser strengen "Hello World" i Terminal og exit.
MERK:
Nysgjerrig på "return 0" uttalelsen? Fordi vi fortalte kompilatoren at funksjonen main () vil returnere et heltall, returnerer vi konstant heltallsverdien '0' på slutten av funksjonen. Ved konvensjon, returnerer '0' signaler til kallprogrammet at vårt program er fullført uten feil.
For å prøve dette selv, brann opp Xcode og lag en ny Objective-C-klasse. Slett all koden Xcode gir deg som standard og hold koden ovenfor. Når du har gjort det, kan du kompilere det ved hjelp av Terminal. Åpne Terminal og bytt til stedet der filen din er, hvis du lagret på skrivebordet, skriv deretter bare inn CD-skrivebordet slik at Terminal nå leser fra skrivebordet. Skriv deretter denne kommandoen:
gcc program1.m -o program1
Programmet ditt bør kompilere uten feil. For å kjøre det, skriv bare:
./ program1
Deretter treffer du retur.
Awesome, så hva skjedde egentlig der? Vel, først importerte vi et bibliotek kalt stdio som administrerer standard i / o (input output) funksjoner, som printf (). Vi lager deretter en funksjon som heter hoved som skal returnere et int eller heltall som i utgangspunktet er et tall uten desimaltegn. Vi bruker deretter printf () -funksjonen til å sende'Hello World 'til terminal. Den \ n vi bruker forteller Terminal å sette en ny linje etter teksten. Til slutt returnerer vi 0 (husk vi sa at hovedpersonen skulle returnere et heltall) som forteller operativsystemet, alt gikk bra. Vi bruker navnet hoved fordi dette utløses automatisk når programmet utføres.
Så langt skal alt være ganske enkelt: Vi ønsket å skrive litt tekst til Terminal, så vi importerte et bibliotek med en funksjon for tekstskrift, da brukte vi en funksjon fra biblioteket for å skrive teksten. Tenk deg at det du importerer er et fysisk bibliotek og printf () er en av bøkene som er tilgjengelige.
Soldiering fremover, vi er nå på variabler. En av de grunnleggende tingene vi trenger for å kunne gjøre i våre applikasjoner, lagrer data midlertidig. Vi gjør dette ved hjelp av variabler, som er beholdere som kan holde ulike typer data og manipuleres på ulike måter. Vi bruker variabler til å lagre alle slags data, men vi må først fortelle kompilatoren hva vi skal lagre i den. Her er noen av de viktigste variablene du bør vite om for nå:
Når vi ikke bruker variabler, bruker vi ofte konstanter. En konstant vil aldri forandre seg: vi vet alltid hva verdien vil være. Hvis vi kombinerer konstanter, får vi et konstant uttrykk, som vi alltid vil vite resultatet av. For eksempel:
123 + 2 = 125
Dette er et konstant uttrykk, 123 + 2 vil alltid være lik 125, uansett hva. Hvis vi erstattet en konstant for en variabel, ville det nye uttrykket se slik ut:
123 + i = ?
Fordi jeg er en dynamisk variabel, vet vi ikke sikkert resultatet av denne ligningen. Vi kan forandre meg til det vi ønsker og få et annet resultat. Dette bør gi deg en ide om hvordan variabler fungerer.
En ting vi fortsatt trenger å vite er hvordan viser vi variabler som vi viste "Hello World" ovenfor? Vi bruker fortsatt printf () -funksjonen, bortsett fra at den endres litt denne gangen:
#inkludereint main () int someNumber = 123; printf ("Mitt nummer er% i \ n", noenNumber); returner 0;
Det vi har gjort her, er fortalt funksjonen printf () der vi vil at vårt heltall skal vises, og hvor det kan bli funnet. Dette er forskjellig fra mange språk som PHP, der du bare kan plassere variabelen i teksten.
Vi er ikke bare begrenset til bare en variabel i printf (). Funksjonen kan akseptere flere parametere adskilt av kommaer, slik at vi kan passere inn så mange som vi har formatert skilt for i teksten. Ovenfor bruker vi% i som et formateringsskilt fordi vi inkluderte et heltall. Andre variabler har sine egne formatspecifikatorer:
En ting jeg vil berøre før vi går videre er karetypen. En variabel av typen kar kan kun håndtere enkeltpersoner, når det er alt vi trenger, er dette bra, men hvis vi trenger en streng tekst, er det ganske ubrukelig. For å komme rundt dette, bruker vi noe som kalles en tegnserie.
Tenk deg at du har en setning som er 11 tegn lang (som "Hello World" - ikke glem å inkludere plassen), en tegnserie er som å ha 11 karbon, men alle limt sammen. Dette betyr at verdien av tegnearrangementet generelt er'Hello World ', men char [0] er'H'. I parentes er karet du etter, fordi vi setter 0 vi får det første tegnet. Ikke glem at teller i arrays starter vanligvis fra 0, ikke 1.
Når en søknad må treffe en beslutning, bruker vi en betinget. Uten betingelse, det ville være akkurat det samme som å se på en film hver gang du kjørte programmet. Ved å ta beslutninger basert på variabler, innspill eller noe annet, kan vi gjøre programmet endret - dette kan være like enkelt som en bruker skriver inn et serienummer eller trykker på en knapp mer enn 10 ganger.
Det er noen forskjellige typer conditionals, men for nå skal vi bare se på de vanligste og grunnleggende: hvis uttalelse. En if-setning gjør det som det høres ut, det kontrollerer for å se om noe er sant, da virker det på en eller annen måte. For eksempel:
#inkludereint main () if (1 == 1) // Dette er alltid sant // Gjør noen ting her returner 0;
Hvis 1 er lik 1, utføres det som er mellom brakettene. Du kan også lure på hvorfor vi brukte to like tegn i stedet for en. Ved å bruke to like tegn er en likestillingsoperatør, som kontrollerer for å se om de to er like med hverandre. Hvis vi bruker et enkelt like tegn, forsøker vi å tildele den første verdien til den andre verdien.
Over, siden 1 vil alltid være det samme som 1, vil alt som er i parentesene bli utført. Hva om vi ønsket å gjøre noe hvis dette ikke var sant skjønt? Det er hvor ellers kommer inn. Ved å bruke annet kan vi kjøre kode når de betingede returene er falske, slik som:
int main () if (1 == 1) // Gjør noen ting her. ellers // Universet er ødelagt! returnere 0;
Selvfølgelig, i det virkelige liv, ville vi ikke sjekke for å sikre at 1 er det samme som 1, men poenget er gjort. Vurder et program som lukkes hvis du trykker på lukkeknappen tre ganger (irriterende men relevant). Du kan sjekke inn parentesene for å se hvor mange ganger det har blitt presset. Hvis det er lavere enn 3, kan din annen blokk utføre kode for å fortelle brukeren hvor mange ganger det må trykkes på knappen for å avslutte.
Vi ser på conditionals mer når vi kommer til å bruke dem i våre applikasjoner lenger i serien.
La oss nå undersøke en programmeringssløyfe. Loops, som navnet antyder, la oss gå gjennom et stykke kode og utføre det flere ganger. Dette kan komme svært nyttig i situasjoner som å fylle ut en liste eller gjenta et stykke kode til en betinget avkastning er oppfylt.
Det er tre typer løkker, i rekkefølge av vanligste: til, samtidig som, og gjøre. Hver enkelt brukes til å gjenta utførelsen av en blokk med kode, men de fungerer annerledes. Her er eksempler på hver:
// hvis loop int main () int i = 9; int x = 0; for (x = 0; x < i; x++) printf("Count is: %i\n", x); return 0;
Dette kan se ut som et lite kompleks i begynnelsen, men det er det egentlig ikke. I parentes etter for er initiatoren, en betinget, og handlingen. Når forløp starter, utfører den initiatoren, som i vårt tilfelle angir x til 0. Hver gang løkken går (inkludert aller første gang), kontrollerer den betinget, som er "er x mindre enn jeg?" Til slutt, etter hver sløyfe gjennom koden, løper løkken handlingen - som over trinnene x for en. Enkel. Siden x øker med en hver gang, vil x snart ikke lenger være mindre enn jeg og sløyfen vil bli ferdig og programmet fortsetter å løpe.
// mens loop int main () int x = 0; mens (x < 10) printf("Count is: %i\n", x); //Watch OUT! Something is missing. return 0;
På samme måte som for løkken, vil løkkenes løp utføre koden mellom brakettene til den betingede er feil. Siden x er 0, og vi ikke endrer det i kodeblokken, ville ovennevnte løpe for alltid, og skape en "uendelig loop". Ønsker du å øke x, så vil vi gjøre dette mellom brakettene i tilfelle av vårt løkke.
// mens loop int main () int x = 0; mens (x < 10) x++; printf("Count is: %i\n", x); return 0;
Gjørsløyfen er i hovedsak en sløyfe, bortsett fra de betingede løpene etter koden. Hva dette betyr er når du bruker en loop, er koden garantert å kjøre minst én gang:
// gjør loop int main () int x = 0; gjør x ++; printf ("Count er:% i \ n", x); mens (x < 10); return 0;
Pekere kan forårsake mye forvirring med nykommere til programmering eller bare nykommere til C. Det er heller ikke umiddelbart klart for noen hvordan de er nyttige, men du vil gradvis lære dette over tid. Så, hva er en peker?
Som navnet tilsier, peker poeng til et sted. Spesielt steder i datamaskinminnet. Tenk på det slik, når vi lager en variabel (la oss si at det er et heltall kalt "foo" som er så populært med programmeringsteori) og gi det en verdi av, for eksempel 123, har vi nettopp det - en variabel med en verdi av 123. Nå, hvis vi setter opp en peker til foo, så har vi en måte å indirekte få tilgang til den. Det vil si, vi har en peker av typen int som peker på foo som har verdien '123.' Dette ville bli gjort i kode som så:
int foo = 123; // Dette er en heltallvariabel int * ptr = &foo; // Dette er en peker til en heltallvariabel
Klar som mudder? Ikke svett det. Pointers er vanskelig - regnes ofte som det vanskeligste å lære når du tar opp C-språket. Pointers vil etterhvert bli en annen natur til deg selv, og det vil være flere på poengene innenfor Objective-C videre i denne serien.
Du har nettopp fått en oversikt over C-språkgrunnlaget. Denne delen av serien var ment å være en rask primer på C for å gjøre deg klar og forberedt for resten av serien, og burde ha vært spesielt nyttig for de som allerede er kjent med programmering på et annet språk. Hvis du er ny for programmering generelt eller fortsatt er i tvil om noen grunnleggende for C, må du lese om det ovenfor og gjerne legge igjen spørsmål i kommentarene..
Før neste gang, vær sikker på å prøve å kompilere dine egne programmer ved hjelp av koden ovenfor. Sett deg små utfordringer, for eksempel å gjøre en løkke utført 10 ganger og telle hver gang gjennom løkken ved hjelp av printf. Det er ingen skade i å prøve og eksperimentere, hvis det går galt, er det sannsynligvis enda bedre da det får deg på rett spor for å feilsøke din egen kode.
For denne uken vil vi ende på en enkel utfordring. Du skal opprette tre programmer som teller til 10 ved hjelp av hver type loop. Siden vi vil bruke sløyfer ofte i Objective-C, er det bra at du lærer å lage dem av hjertet. Det burde være ganske enkelt, så prøv å telle ned fra 10 til 1 etterpå (hvis + + trinn for en, hva kan koden fortelle med 1?).
I neste utgave av denne serien gir jeg en oversikt over hvordan Objective-C fungerer. Vi vil også se på objektorientert programmering og bruksområder, så vel som bor i klasser, forekomster, metoder, arv og mer.
Neste uke burde virkelig hjelpe deg med å forstå hva som gjør Objective-C så bra språk og hvorfor det virkelig strekker C-språket på så mange nyttige måter.
Hvis du har noen spørsmål, kan du enten legge igjen en kommentar nedenfor hvor jeg prøver å fortsette å sjekke eller du kan skyte meg en melding på Twitter (http://www.twitter.com/iDemonix) der jeg kommer tilbake til du ASAP.