Hoppa till innehåll

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.

Operatorer kombinerar värden till uttryck. Prioriteringsordningen spelar roll, men parenteser gör ofta avsikten tydligare.

+, -, *, / och % används för aritmetik. Om båda operanderna i / är heltal blir resultatet heltalsdivision. +=, -=, *= och /= uppdaterar variabeln till vänster.

Example.cs
int points = 11;
points += 4;
int groups = points / 4; // 3
int remainder = points % 4; // 3
Console.WriteLine($"{groups} groups, {remainder} left");

Jämförelseoperatorer ger bool: ==, !=, <, <=, > och >=. Kombinera villkor med && (OCH), || (ELLER) och ! (INTE). && och || kortsluter och kan hoppa över högerledet.

Example.cs
int health = 30;
bool hasShield = true;
bool canContinue = health > 0 && (hasShield || health > 50);
Console.WriteLine(canContinue); // True

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.

Example.cs
double distance = Math.Sqrt(3 * 3 + 4 * 4);
int clamped = Math.Clamp(125, 0, 100);
Console.WriteLine($"{distance}, {clamped}"); // 5, 100

Fördjupning: operatorer beror på sina operandtyper

Section titled “Fördjupning: operatorer beror på sina operandtyper”

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.

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.

Program.cs
Console.WriteLine(7 / 2); // 3
Console.WriteLine(7 / 2.0); // 3.5
Console.WriteLine(17 % 5); // 2
Console.WriteLine((2 + 3) * 4); // 20

&& 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.

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.

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.

Använd jämförelser i villkor och Math.Clamp när ett värde måste hållas inom ett intervall.

= tilldelar, medan == jämför. & och | fungerar inte alltid som de kortslutande operatorerna && och ||.

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.