Variabler och typer
“These are not the droids you’re looking for… but these ARE the variables you need to understand.”
Välkommen till C-Sharp-galaxen, ung Padawan! Precis som Luke Skywalker behövde lära sig om The Force innan han kunde bli en Jedi, behöver du förstå variabler innan du kan bli en riktig programmerare. Och oroa dig inte - variabler är mycket mindre mystiska än Force-powers, och betydligt mer pålitliga än R2-D2 i en kris.
Vad är en variabel? (Spoiler: Det är inte en Death Star-plan)
Tänk på en variabel som en namngiven låda i datorns minne. Precis som Princess Leia gömde Death Star-planerna i R2-D2, gömmer du data i variabler. Skillnaden är att dina variabler inte kommer explodera hela din kod… det hoppas vi i alla fall.
En variabel har tre viktiga delar, precis som The Force har sin ljusa sida, mörka sida och balansen:
- Datatyp - Vilken sorts data kan den hålla (som vilken typ av droid det är)
- Namn - Vad den heter (som “R2-D2” eller “C-3PO”)
- Värde - Den faktiska datan (som meddelandet från Princess Leia)
De fyra grundläggande typerna (The Original Trilogy + Return of the Int)
1. Heltal (int) - Storm Troopers fast som faktiskt träffar målet
int rebelShips = 30;
int imperialShips = 50;
int deathStars = 2; // Båda sprängdes, classic!
int lukesHand = 1; // Vader tog den andra...
int anakinLimbs = 0; // Obi-Wan var inte snäll
Heltal är hela nummer utan decimaler. De kan vara positiva (som antalet rebeller), negativa (som Vader’s karma), eller noll (som chansen att Jar Jar blir populär igen).
Varför int är som Storm Troopers:
- Enkla och rakt på sak
- Finns överallt i galaktiska armén
- Ibland räcker de inte till (behöver större tal)
- Men de gör jobbet för det mesta
2. Text (string) - Princess Leia’s meddelanden
string jediName = "Luke Skywalker";
string sithName = "Darth Vader";
string famousQuote = "May the Force be with you";
string c3poComplaint = "The odds of successfully navigating an asteroid field are approximately 3,720 to 1!";
string hanSoloResponse = "Never tell me the odds!";
En string (sträng) är text - bokstäver, siffror och symboler inom citationstecken. Precis som C-3PO kan prata på 6 miljoner språk, kan strings innehålla alla möjliga tecken.
Varför strings är som Princess Leia:
- Bär viktiga meddelanden
- Alltid inom “citationstecken” (som hennes hårbollar)
- Kan vara korta eller långa
- Ibland innehåller de överlevnadsinstruktioner för din kod
3. Sant/Falskt (bool) - The Binary Suns of Tatooine
bool isJedi = true;
bool isOnDarkSide = false;
bool canUseForce = true;
bool trustsJarJar = false; // Obviously
bool believesHanShotFirst = true; // The only correct answer
bool likesSequelTrilogy = false; // We don't talk about those
Boolean-värden kan bara vara true (sant) eller false (falskt). Precis som det bara finns ljus och mörk sida av Force… fast enklare att förstå än Jedi-filosofi.
Varför bool är som The Force:
- Bara två tillstånd (ljus/mörk, true/false)
- Avgörande för viktiga beslut
- Enkel men kraftfull
- Kan påverka hela programmets öde
4. Decimaltal (double) - Kessel Run i mindre än 12 parsecs
double kesselRunParsecs = 11.9; // Han Solo's rekord
double podracingSpeed = 947.0; // Anakin's topp-hastighet
double forceConcentration = 99.99; // Yoda's midi-chlorian level
double jarjarIQ = 1.2; // Generously estimated
double chewbaccaHeight = 2.28; // Meters, han är lång
Double används for tal med decimaler. Perfekt när du behöver precision, som när du navigerar genom asteroid-fält eller räknar odds för överlevnad.
Varför double är som Millennium Falcon:
- Ser inte ut som mycket men kan göra fantastiska saker
- Mer precision än du trodde var möjligt
- Ibland krånglig men ovärderlig
- Kan hantera mycket komplexa rutter
Så här skapar du variabler (Jedi Training 101)
Steg 1: Deklaration (Som att välja din lightsaber-färg)
int jediCount; // "Jag vill ha plats för Jedi-räknare", int är 0 som default
string jediName; // "Jag vill ha plats för ett Jedi-namn", string är null som default
bool hasCompletedTraining; // "Jag vill ha plats för träningsstatus", bool är false som default
double forceLevel; // "Jag vill ha plats för Force-styrka", double är 0.0 som default
Här berättar du för datorn vilka variabler du vill ha, precis som du berättar för Jedi Council vad du planerar att göra. De lyssnar (oftast), men innehållet kommer senare.
Steg 2: Tilldelning (Som att få ditt första uppdrag)
jediCount = 10000; // Det var många før Order 66...
jediName = "Obi-Wan Kenobi"; // Hello there!
hasCompletedTraining = true; // Han är ju Jedi Master
forceLevel = 95.5; // Ganska högt, men inte Yoda-nivå
Nu har variablerna faktiska värden, precis som när Luke äntligen fick sin lightsaber. Before this, de är bara tomma skal, som… well, som Anakin’s humanity efter Mustafar.
Båda stegen samtidigt (The Chosen One-metoden)
int rebelsLeft = 1000; // Hope is not lost
string heroName = "Luke Skywalker"; // Our new hope
bool canDestroyDeathStar = true; // Size matters not
double trustInForce = 100.0; // Luke learned this the hard way
Detta är vanligast - du skapar variabeln och ger den ett värde direkt. Som när Qui-Gon hittade Anakin och immediately visste att han var special. Fast mer pålitligt.
Praktiskt exempel: Rebel Alliance Database
// Skapa en profil för en rebell (mycket säkrare än Death Star-planer)
string rebelName = "Leia Organa";
int rebelAge = 19;
bool isRoyalty = true;
bool canUseForce = true; // Spoiler alert!
double shootingAccuracy = 98.5; // Much better än Storm Troopers
string homeplanet = "Alderaan"; // Too soon?
bool homeplanetExists = false; // Definitely too soon
// Använd variablerna (bättre säkerhet än Imperial networks)
Console.WriteLine("Rebel Name: " + rebelName);
Console.WriteLine("Age: " + rebelAge);
Console.WriteLine("Royal Status: " + isRoyalty);
Console.WriteLine("Force Sensitive: " + canUseForce);
Console.WriteLine("Shooting Accuracy: " + shootingAccuracy + "%");
Console.WriteLine("Homeplanet: " + homeplanet);
Console.WriteLine("Homeplanet Status: " + homeplanetExists);
Detta skulle skriva ut:
Rebel Name: Leia Organa
Age: 19
Royal Status: True
Force Sensitive: True
Shooting Accuracy: 98.5%
Homeplanet: Alderaan
Homeplanet Status: False
Namngivningsregler (The Jedi Code for Variables)
Precis som Jedis följer en kod, följer programmerare regler för variabelnamn. Bryt inte dessa regler, annars hamnar du på the dark side of coding.
Bra variabelnamn (Jedi-approved):
int lightsaberColor = 1; // 1=blue, 2=green, 3=red
string jediMasterName = "Yoda"; // Tydligt och beskrivande
bool hasCompletedTrial = false; // Klar boolean-naming
double midichlorianCount = 27700.0; // Anakin's level
Undvik (Dark Side coding):
int x = 1; // Vad är x? A mystery it is
string s = "Yoda"; // Confusing, this naming is
bool b = false; // To the dark side, this leads
double mc = 27700.0; // Hmm. Unclear, the purpose is
Viktiga regler (lika viktiga som “Don’t trust anyone who says ‘I have a bad feeling about this’”):
- Använd engelska namn - Standard i programmering (som Basic i hela galaktiska imperiet)
- Börja med liten bokstav - camelCase, precis som kameler på Tatooine
- Använd beskrivande namn - Så klara att även C-3PO förstår
- Inga mellanslag - Använd camelCase:
jediMasterName, intejedi master name - Var konsekvent - Som The Force, balans du måste ha
Vanliga misstag att undvika (Don’t pull a Jar Jar)
Misstag 1: Glömma deklarera variabel (Like forgetting your lightsaber)
// FEL - som att försöka använda Force utan träning
someRandomNumber = 42; // Kompilatorn: "Do or do not, there is no try... but this won't work"
// RÄTT - deklarera först, som Jedi training
int someRandomNumber = 42; // Now we're talking!
Misstag 2: Glömma citationstecken för text (Like leaving your targeting computer on)
// FEL - kompilatorn blir mer förvirrad än C-3PO i en sandstorm
string heroName = Luke Skywalker; // "I find your lack of quotes disturbing"
// RÄTT - strings behöver alltid citationstecken
string heroName = "Luke Skywalker"; // "Impressive... most impressive"
Misstag 3: Försöka ändra typ efter deklaration (Like trying to turn Vader back… wait, that worked)
// FEL - en int kan inte bli string, inte ens med Force-powers
int jediCount = 1000;
jediCount = "Many"; // Kompilatorn: "Nooooooooo!" (Vader-style), code has gone to the Error side
// RÄTT - håll dig till samma typ
int jediCount = 1000;
jediCount = 999; // Order 66 happened... too dark? :O
Instansiering vs Tilldelning (The Deeper Force Knowledge)
Okej, detta är lite mer avancerat, men viktigt som att förstå skillnaden mellan Anakin och Vader.
Instansiering (Skapandet av variabeln)
int jediCount; // Här SKAPAS variabeln i minnet
string jediName; // Som att bygga en lightsaber-handle
bool isAwesome; // Platsen reserveras, men är tom
När du instansierar en variabel säger du till datorn: “Reservera minne för denna typ av data.” Det är som att be om en lightsaber - du har handtaget, men ingen blade än.
Tilldelning (Att ge variabeln ett värde)
jediCount = 10000; // NU får variabeln ett värde
jediName = "Obi-Wan"; // Som att tända lightsaber-blade
isAwesome = true; // Now the weapon is complete
Tilldelning är när du faktiskt ger variabeln ett värde att hålla. Som att tända lightsaber - nu kan du faktiskt använda den!
Kombinerad deklaration och tilldelning (The Chosen One approach)
int jediCount = 10000; // Bygger lightsaber OCH tänder den samtidigt
string jediName = "Obi-Wan"; // Efficient, like a good Jedi should be
bool isAwesome = true; // This is the way... wait, wrong series
Sammanfattning (What we learned, young Padawan)
- Variabler är som namngivna behållare i minnet (som R2-D2’s data storage)
- Datatyper bestämmer vad som kan lagras:
int,string,bool,double - Instansiering skapar variabeln i minnet (som att bygga en droid-kropp)
- Tilldelning ger variabeln ett värde (som att programmera droiden)
- Namngivning är viktigt - var tydlig som Obi-Wan, inte kryptisk som Yoda
- Deklarera först, använd sedan - som Jedi training, ordning måste det vara
Remember, young coder: “Your focus determines your reality” - Qui-Gon Jinn. Focus on understanding these basics, and soon you’ll be ready for the next level of your training.
May the Code be with you!
Nästa: Kapitel 2 - Metoder: The Jedi Arts