Operatorer och uttryck
↑Exemplen är oberoende C#-utdrag för moderna .NET-konsolprojekt, om inget annat anges. Klassdeklarationer och toppnivåkod kan placeras i samma Program.cs-fil, med toppnivåkoden först.
Snabböversikt
Section titled “Snabböversikt”Operatorer kombinerar värden till uttryck. Prioriteringsordningen spelar roll, men parenteser gör ofta avsikten tydligare.
Så fungerar det
Section titled “Så fungerar det”Aritmetik och tilldelning
Section titled “Aritmetik och tilldelning”+, -, *, / och % används för aritmetik. Om båda operanderna i / är heltal blir resultatet heltalsdivision. +=, -=, *= och /= uppdaterar variabeln till vänster.
int points = 11;points += 4;int groups = points / 4; // 3int remainder = points % 4; // 3Console.WriteLine($"{groups} groups, {remainder} left");Jämförelser och logik
Section titled “Jämförelser och logik”Jämförelseoperatorer ger bool: ==, !=, <, <=, > och >=. Kombinera villkor med && (OCH), || (ELLER) och ! (INTE). && och || kortsluter och kan hoppa över högerledet.
int health = 30;bool hasShield = true;bool canContinue = health > 0 && (hasShield || health > 50);Console.WriteLine(canContinue); // TrueInbyggda Math-metoder
Section titled “Inbyggda Math-metoder”Använd Math.Min, Math.Max, Math.Abs, Math.Sqrt och Math.Round för vanliga numeriska beräkningar. I Unity används ofta även Mathf för float, men det är ett annat API.
double distance = Math.Sqrt(3 * 3 + 4 * 4);int clamped = Math.Clamp(125, 0, 100);Console.WriteLine($"{distance}, {clamped}"); // 5, 100Fördjupning: operatorer beror på sina operandtyper
Section titled “Fördjupning: operatorer beror på sina operandtyper”Prioritet och utvärdering
Section titled “Prioritet och utvärdering”Multiplikation har högre prioritet än addition: 2 + 3 * 4 ger 14, medan (2 + 3) * 4 ger 20. Parenteser är användbara även när du kan prioritetsreglerna eftersom de visar avsikten. Uttryck kan dessutom ha sidoeffekter, exempelvis count++. Undvik att kombinera många sidoeffekter i en svårläst rad.
Division och rest
Section titled “Division och rest”Om båda operanderna är heltal ger / heltalsdivision: 7 / 2 är 3, inte 3.5. Använd ett flyttalsvärde eller lämplig konvertering när decimaldelen är viktig. % ger resten och kan användas för turordning, indelning av ID:n och index som går runt en lista. Vid negativa värden kan resten i C# vara negativ, så använd inte uttrycket okritiskt som arrayindex.
Console.WriteLine(7 / 2); // 3Console.WriteLine(7 / 2.0); // 3.5Console.WriteLine(17 % 5); // 2Console.WriteLine((2 + 3) * 4); // 20&& och || kortsluter beräkningar
Section titled “&& och || kortsluter beräkningar”&& beräknar uttrycket till höger bara om det vänstra är sant. || beräknar det högra bara om det vänstra är falskt. Därför är name != null && name.Length > 0 säkert. För booleska värden beräknar & och | båda sidor, medan dessa operatorer också kan arbeta bitvis på heltal. Det är viktigt om det högra uttrycket ändrar tillstånd.
Tilldelningsoperatorer ändrar tillstånd
Section titled “Tilldelningsoperatorer ändrar tillstånd”score += 10 är en sammansatt tilldelning som adderar och sparar resultatet enligt språkets regler. Även count++ ger ett värde, och prefix-/postfixversionerna skiljer sig när värdet används. Vid vanliga uppdateringar är separata tydliga satser ofta bättre än komplicerade uttryck.
Matematikbiblioteken har regler
Section titled “Matematikbiblioteken har regler”Math.Clamp(value, min, max) begränsar värdet när metoden anropas, Math.Abs ger absolutbelopp och Math.Round följer särskilda avrundningsregler (standardvalet för exakt mittpunkt kan överraska). Välj rätt gränser och avrundningsstrategier för poäng, ekonomi och spelmekanik. Unitys Mathf erbjuder flera float-anpassade motsvarigheter.
När och varför?
Section titled “När och varför?”Använd jämförelser i villkor och Math.Clamp när ett värde måste hållas inom ett intervall.
Vanligt misstag
Section titled “Vanligt misstag”= tilldelar, medan == jämför. & och | fungerar inte alltid som de kortslutande operatorerna && och ||.
Testa själv
Section titled “Testa själv”Skriv ett villkor som kontrollerar att en nivå ligger mellan 1 och 10 inklusive gränserna.
Visa ett lösningsförslag
level >= 1 && level <= 10.
