Objektiv-C-litteratur

Denne opplæringen vil lære deg hvordan du programmerer mer effektivt ved hjelp av objekt-bokstaver!


Literals & Literal Expressions

I programmering, a bokstavelig er rett og slett en fast verdi som en programmerer går inn i en kildekodefil. Noen eksempler fra C inkluderer:

 int år = 2012; char initial = 'M';

I det ovennevnte er '2012' en int bokstavelig og 'M' er a røye bokstavelig.

Datavitenskapere refererer også noen ganger til bokstavelige uttrykk. en uttrykk er bare en gruppe verdier og operatører som returnerer en ny verdi, for eksempel "2 * pi * r". Et bokstavelig uttrykk er et uttrykk som bare inneholder bokstavelige verdier, som "2 * 3,14 * 10".

Følgende kodestykke demonstrerer hvordan variabler kan opprettes og tilordnes med bokstavelige uttrykk i C:

 int resultat = 15/5; // Det bokstavelige uttrykket "15/5" gir 3 dobbelt = 5/2; // Det bokstavelige uttrykket "5/2" gir 2,5

Fordi Objective-C er en superset av C, er alle kodelinjene demonstrert i C så langt også gyldige Objective-C-syntaks. Imidlertid har alle bokstavene vist seg også for primitive datatyper. En mer interessant bruk av bokstavene er å søke dem på objekter.

Følgende er et eksempel på en objektet bokstavelig:

 NSString * siteTitle = @ "Mobiletuts +";

I overstående kodekode, @ "Mobiletuts +" er et objekt som er lettere som brukes til å representere en strengobjekt. Uten bruk av et objekt bokstavelig, ville koden ovenfor være nødvendig å bli skrevet veldig annerledes, kanskje slik:

 NSString * siteTitle = [NSString stringWithUTF8String: "Mobiletuts"];

Som du kan se, er objektets bokstavelige syntaks mye mer kortfattet og lesbar.

Med utgivelsen av Apple LLVM Compiler 4.0, er det lagt til ekstra objekts bokstavelig støtte for NSNumber objekter, Array objekter og Ordbok objekter.


NSNummer Literals

NSNumber objekter kan nå bli representert med objektet litteratur.

Følgende kodestykke illustrerer den tradisjonelle stilen:

 NSNummer * boolYES = [NSNummer nummerWithBool: JA]; NSNummer * boolNO = [NSNummer nummerWithBool: NO]; NSNummer * charX = [NSNummernummerWithChar: 'X']; NSNummer * fortySevenInt = [NSNummer nummerWithInt: 47]; NSNummer * fortySevenUnsigned = [NSNummer nummerWithUnsignedInt: 47U]; NSNummer * fortySevenLong = [NSNummer nummer med lengde: 47L]; NSNummer * goldenRatioFloat = [NSNummer nummerWithFloat: 1,61803F]; NSNummer * goldenRatioDouble = [NSNummer nummerWithDouble: 1,61803];

Ved hjelp av objekt-bokstaver kan ovennevnte omskrives som enkelt:

 NSNummer * boolYES = @YES; NSNummer * boolNO = @NO; NSNummer * charX = @ 'X'; NSNummer * fortySevenInt = @ 47; NSNummer * fortySevenUnsigned = @ 47U; NSNummer * fortySevenLong = @ 47L; NSNummer * goldenRatioFloat = @ 1,61803F; NSNummer * goldenRatioDouble = @ 1,61803;

Objective-C Collection Literals

Samling bokstaver er et utrolig nyttig tillegg til Objective-C. Den nye LLVM Compiler gir muligheten til å lage samlingsbokstaver for både arrays og ordbøker, men ikke sett.

NSArray Literals

Den gamle syntaksen for å skape en NSArray:

 NSArray * instrumenter = [NSArray arrayWithObjects: @ "Ocarina", @ "Flute", @ "Harp", null];

Den nye objektobjektet for å lage en NSArray:

 NSArray * instrumenter = @ [@ "Ocarina", @ "Flute", @ "Harp"];

Dessverre fungerer ikke synspunktet ovenfor for å erklære en NSMutableArray, men det er en lett jobb rundt. Bare pass mutableCopy melding til det nylig dannede objektet:

 NSMutableArray * instrumentsMutable = [@ [@ "Ocarina", @ "Flute", @ "Harp"] mutableCopy];

Ordbok Literals

Den tradisjonelle metoden for å lage en ordbok med Objective-C ser noe slik ut:

 NSArray * keys = [NSArray arrayWithObjects: @ "Character", @ "Våpen", @ "Hitpoints", null]; NSArray * objekter = [NSArray arrayWithObjects: @ "Zelda", @ "Sword", [NSNummer nummerWithInt: 50], null]; NSDictionary * stats = [NSDictionary DictionaryWithObjects: objekter forKeys: keys];

Eller et litt mindre ordentlig alternativ:

 NSDictionary * stats = [NSDictionary DictionaryWithObjectsAndKeys: @ "Zelda", @ "Character", @ "Sword", @ "Weapon", [NSNummer nummerWithInt: 50], @ "Hitpoints", null];

Begge de ovennevnte er førsteklasses eksempler på hvorfor Objective-C har utviklet et dårlig rykte for å være overdrevet. Ikke mer! Med objekt-bokstaver kan den ovennevnte koden bli omskrevet som enkelt:

 NSDictionary * stats = @ @ "Character": @ "Zelda", @ "Våpen": @ "Sword", @ "Hitpoints": @ 50;

Dette er mye lettere å forstå og skrive.

Samling Subscripting

I tillegg til å kunne opprette samlinger med objekt-bokstaver, har den nyeste LLVM Compiler også innført støtte for å få tilgang til array- eller ordbokverdier med abonnementer.

For eksempel er dette den tradisjonelle formen som brukes til å få tilgang til et objekt fra en matrise eller en ordbok:

 NSString * instrument = [instrumenter objectAtIndex: 0]; // Returnerer 'Ocarina' NSString * navn = [statistikk objectForKey: @ "Character"]; // Returnerer 'Zelda'

Med den nye abonnementskapasiteten kan du bare gjøre dette:

 NSString * instrument = instrumenter [0]; // Returnerer 'Ocarina' NSString * navn = statistikk [@ "Character"]; // Returnerer 'Zelda'

Enda bedre, samling abonnement er ikke bare begrenset til å velge objekter. Hvis samlingen er mutable, kan du også omfordele verdier:

 instrumentsMutable [0] = @ "Ocarina of Time"; statsMutable [@ "Våpen"] = @ "Hammer";

Dette er et stort skritt fremover for Objective-C programmører, og jeg tror det vil gjøre språket mer tilgjengelig for de som overgår fra andre språk som Java eller C ++ også.


Boxed Expressions

Det siste emnet verdt å nevne i denne opplæringen er begrepet "Boxed Expressions". I hovedsak støtter Objective-C nå å konvertere resultatet av et C-stiluttrykk til et objektiv-C-objekt. Den grunnleggende syntaksen for dette er slik:

 @ (2 * pi * r)

Resultatet av ovenstående ville være en NSNumber objekt som inneholdt produktet av 2 ganger verdien av pi ganger verdien av r. Vi kunne selvfølgelig umiddelbart tildele produktet til en NSNumber-variabel:

 NSNummer * diameter = @ (2 * pi * r);

Denne teknikken vil også fungere med enums og strenger:

 // Boksuttrykk med Enums typedef enum Sverd, Hammer, Skjold, Pil Våpen; NSNummer * currentWeapon = @ (Sword); // Returnerer 0 // Boxed Expressions med char * NSString * login = @ (getlogin ()); // Returnerer innloggingsnavn // Resultater NSLog (@ "Våpen:% @ \ nLogin:% @", nåværendeWeapon, login);

Wrap Up

Denne opplæringen har gitt deg en rask oversikt over objektet litteratur, en ny teknikk introdusert med Apple LLVM Compiler 4.0. For mer grundig dekning av dette emnet, se den offisielle LLVM dokumentasjonen.

Jeg håper du likte å lese denne opplæringen. Du er velkommen til å legge igjen noen tilbakemelding du har i kommentarfeltet nedenfor. Du kan også koble med meg på Twitter eller Google Plus. Jubel!