What is a logical operator in Dart?

Dart-operatorer: En Komplet Guide

22/08/2016

Rating: 4.92 (12491 votes)

I programmeringsverdenen er operatorer de specielle symboler, der udfører bestemte operationer på værdier eller variabler, kendt som operander. Forestil dig dem som verberne i et sprog; de fortæller computeren, hvad den skal gøre. Dart, et moderne og alsidigt programmeringssprog, er udstyret med et rigt sæt af indbyggede operatorer, der kan bruges til alt fra simpel matematik til komplekse logiske sammenligninger og bit-manipulation. At forstå disse operatorer er fundamentalt for at kunne skrive effektiv og læselig kode. Uden dem ville vi ikke kunne udføre selv de mest basale beregninger eller træffe beslutninger i vores programmer. Denne artikel vil fungere som din komplette guide til at forstå og mestre de forskellige typer af operatorer, som Dart tilbyder, deres funktioner, og hvordan man bruger dem korrekt gennem praktiske eksempler.

What is a logical operator in Dart?
Indholdsfortegnelse

Hvad er Operatorer og Operander?

En operator er et symbol, der instruerer compileren til at udføre en specifik matematisk, relationel eller logisk operation og producere et endeligt resultat. For eksempel er plussymbolet (+) en operator, der bruges til addition. De data, som operatorerne arbejder på, kaldes operander. I udtrykket 5 + 3 er 5 og 3 operander, mens + er operatoren. Et udtryk er en kombination af operander og operatorer, der evalueres til en enkelt værdi. Rækkefølgen, som operationerne udføres i, styres af operatorpræcedens og associativitet, hvilket sikrer forudsigelige og konsistente resultater.

Typer af Operatorer i Dart

Dart klassificerer sine operatorer i flere kategorier baseret på den type operation, de udfører. Lad os udforske hver af disse kategorier i detaljer.

1. Aritmetiske Operatorer

Disse er de mest almindelige operatorer og bruges til at udføre matematiske beregninger. De fungerer på numeriske operander og returnerer en numerisk værdi.

SymbolNavnBeskrivelse
+AdditionLægger to operander sammen.
-SubtraktionTrækker den anden operand fra den første.
-exprUnær MinusÆndrer fortegnet på et udtryk.
*MultiplikationGanger to operander.
/DivisionDividerer den første operand med den anden, returnerer et double.
~/HeltalsdivisionDividerer to operander og returnerer kun heltalsdelen (kvotienten).
%ModulusReturnerer resten af en heltalsdivision.

Her er et eksempel, der viser, hvordan de bruges:

// Dansk eksempel på aritmetiske operatorer void main() { int a = 10; int b = 3; // Addition var sum = a + b; print("Sum (a + b) = $sum"); // Output: 13 // Subtraktion var forskel = a - b; print("Forskel (a - b) = $forskel"); // Output: 7 // Unær Minus var negeret = -forskel; print("Negation -(a - b) = $negeret"); // Output: -7 // Multiplikation var produkt = a * b; print("Produkt (a * b) = $produkt"); // Output: 30 // Division (returnerer double) var division = a / b; print("Division (a / b) = $division"); // Output: 3.333... // Heltalsdivision var heltalDivision = a ~/ b; print("Heltalsdivision (a ~/ b) = $heltalDivision"); // Output: 3 // Modulus (rest) var rest = a % b; print("Rest (a % b) = $rest"); // Output: 1 }

2. Relationelle Operatorer (Sammenligningsoperatorer)

Disse operatorer bruges til at sammenligne to værdier. Resultatet af en sammenligning er altid en boolesk værdi: true eller false. De er afgørende for at kunne træffe beslutninger i kode, for eksempel i if-sætninger og loops.

SymbolNavnBeskrivelse
>Større endReturnerer true hvis venstre operand er større end højre.
<Mindre endReturnerer true hvis venstre operand er mindre end højre.
>=Større end eller lig medReturnerer true hvis venstre operand er større end eller lig med højre.
<=Mindre end eller lig medReturnerer true hvis venstre operand er mindre end eller lig med højre.
==Lig medReturnerer true hvis de to operander er lig med hinanden.
!=Ikke lig medReturnerer true hvis de to operander ikke er lig med hinanden.
// Dansk eksempel på relationelle operatorer void main() { int x = 5; int y = 8; print("Er x større end y? ${x > y}"); // Output: false print("Er x mindre end y? ${x < y}"); // Output: true print("Er x lig med y? ${x == y}"); // Output: false print("Er x ikke lig med y? ${x != y}"); // Output: true }

3. Logiske Operatorer

Logiske operatorer bruges til at kombinere to eller flere booleske udtryk. De er fundamentale i kontrolstrukturer, der kræver komplekse betingelser.

SymbolNavnBeskrivelse
&&Logisk OG (AND)Returnerer true kun hvis begge operander er true.
||Logisk ELLER (OR)Returnerer true hvis mindst én af operanderne er true.
!Logisk IKKE (NOT)Inverterer en boolesk værdi (true bliver false og omvendt).

Vigtigt: I Dart kan logiske operatorer kun anvendes på booleske værdier. I modsætning til nogle andre sprog betragtes tal, der ikke er nul, ikke som true.

What is operator precedence in Dart? The following table lists the operator precedence in Dart, from highest to lowest. Operators with higher precedence are evaluated before those with lower precedence. Operators on the same row have equal precedence and are evaluated according to associativity rules. , (), ., ?. ++, --, +, -, ! >, <, >=, <=, is, is! ??[/caption]

// Dansk eksempel på logiske operatorer void main() { bool a = true; bool b = false; int alder = 25; print("a && b: ${a && b}"); // Output: false print("a || b: ${a || b}"); // Output: true print("!a: ${!a}"); // Output: false // Praktisk eksempel if (alder > 18 && alder < 65) { print("Personen er i den arbejdsdygtige alder."); } }

4. Tildelingsoperatorer

Disse bruges til at tildele værdier til variabler. Den mest basale er lighedstegnet (=).

SymbolNavnBeskrivelse
=TildelingTildeler værdien fra højre side til variablen på venstre side.
??=Null-aware tildelingTildeler en værdi til en variabel, kun hvis variablen er null.

Sammensatte Tildelingsoperatorer

Dart tilbyder også sammensatte tildelingsoperatorer, der kombinerer en aritmetisk eller bitvis operation med en tildeling. Dette giver en mere kompakt syntaks.

Eksempler inkluderer +=, -=, *=, /=. For eksempel er x += 5 en kortere måde at skrive x = x + 5 på.

// Dansk eksempel på tildelingsoperatorer void main() { int a = 10; int? b; // Nullable variabel // Simpel tildeling a = 15; print("a's nye værdi: $a"); // Output: 15 // Null-aware tildeling b ??= 20; print("b's værdi (efter ??=): $b"); // Output: 20 b ??= 30; // Denne linje har ingen effekt, da b ikke længere er null print("b's værdi (efter andet forsøg): $b"); // Output: 20 // Sammensat tildeling a += 5; // Svarer til a = a + 5 print("a efter += 5: $a"); // Output: 20 }

5. Bitvise Operatorer

Bitvise operatorer arbejder direkte på den binære repræsentation af heltal. De bruges ofte i lavniveaus programmering, såsom driverudvikling eller når man arbejder med datakomprimering eller kryptering.

SymbolNavnBeskrivelse
&Bitvis ANDUdfører en AND-operation på hvert par af korresponderende bits.
|Bitvis ORUdfører en OR-operation på hvert par af korresponderende bits.
^Bitvis XORUdfører en XOR-operation på hvert par af korresponderende bits.
~Bitvis NOT (Komplement)Inverterer alle bits i en operand.
<<Venstre skiftSkifter bits til venstre og fylder op med nuller fra højre.
>>Højre skiftSkifter bits til højre.

6. Betingede Operatorer

Disse operatorer giver en kortfattet måde at evaluere udtryk baseret på en betingelse.

  • Ternær Operator (? :): Dette er en kompakt erstatning for en if-else-sætning. Syntaksen er betingelse ? udtryk1: udtryk2. Hvis betingelsen er true, evalueres udtryk1; ellers evalueres udtryk2.
  • Null Coalescing Operator (??): Denne operator returnerer udtrykket på venstre side, hvis det ikke er null; ellers evaluerer og returnerer den udtrykket på højre side. Det er en elegant måde at give standardværdier for nullable variabler.
// Dansk eksempel på betingede operatorer void main() { int alder = 20; String status = (alder >= 18) ? "Voksen": "Mindreårig"; print("Status: $status"); // Output: Voksen String? navn; String brugernavn = navn ?? "Gæst"; print("Brugernavn: $brugernavn"); // Output: Gæst }

7. Kaskadeoperator (..)

Kaskadeoperatoren giver dig mulighed for at udføre en sekvens af operationer på det samme objekt. Dette kan gøre koden mere flydende og letlæselig, da du undgår at skulle gentage objektets navn.

What are operators in Dart? The operators are special symbols used to perform certain operations on operands. Dart has numerous built-in operators that can be utilized for various functions; for example, '+' is used to add two operands. Operators are designed to execute operations on one or two operands. expr++ expr-- () ? . ?. ! >= > <= < as is is! ?? .. ?..[/caption]

class Bruger { String? fornavn; String? efternavn; void visNavn() { print("$fornavn $efternavn"); } } void main() { var bruger = Bruger() ..fornavn = "Jens" ..efternavn = "Hansen" ..visNavn(); // Output: Jens Hansen }

Operatorpræcedens

Når et udtryk indeholder flere operatorer, bestemmer præcedens rækkefølgen, de evalueres i. For eksempel har multiplikation (*) højere præcedens end addition (+). Derfor vil 3 + 5 * 2 blive evalueret som 3 + (5 * 2), hvilket giver 13. Man kan bruge parenteser () til at overstyre den normale præcedens og tvinge en bestemt evalueringsrækkefølge.

Tabel over Operatorpræcedens (Forenklet)

PræcedensOperator(er)Beskrivelse
Højeste(), [], ., ?.Funktionskald, adgang til medlemmer
++, --, !, -exprUnære operatorer
*, /, %, ~/Multiplikative
+, -Additive
<<, >>Bitvise skift
<, >, <=, >=, is, is!Relationelle og type-test
==, !=Ligestilling
&&Logisk AND
||Logisk OR
??Null-coalescing
? :Ternær
Laveste=, +=, -=, ??=, etc.Tildeling

Ofte Stillede Spørgsmål (FAQ)

Hvad er forskellen på `/` og `~/` i Dart?

Operatoren / udfører standarddivision og returnerer altid et resultat af typen double (f.eks. 5 / 2 er 2.5). Operatoren ~/ udfører heltalsdivision og returnerer kun heltalsdelen af resultatet som en int (f.eks. 5 ~/ 2 er 2).

Hvad er nul-sikkerhed og hvordan hjælper operatorer med det?

Nul-sikkerhed (null safety) er en funktion i Dart, der hjælper med at forhindre fejl forårsaget af utilsigtede null-værdier. Operatorer som ?? (null coalescing), ??= (null-aware assignment) og ?. (conditional member access) er designet til at gøre det nemmere og mere sikkert at arbejde med variabler, der kan være null, ved at tilbyde elegante måder at håndtere disse tilfælde på.

Kan jeg bruge `==` til at sammenligne objekter?

Ja, == kan bruges til at sammenligne objekter. Som standard tjekker == for reference-lighed (om to variabler peger på det præcis samme objekt i hukommelsen). Dog kan klasser overskrive == operatoren for at implementere en værdi-baseret lighed (f.eks. at to `Bruger`-objekter betragtes som ens, hvis deres ID er det samme).

Hvorfor får jeg en fejl, når jeg bruger `&&` med heltal?

I Dart er de logiske operatorer && og || strengt defineret til at fungere med booleske værdier (true/false). Forsøg på at bruge dem med andre typer, som f.eks. heltal, vil resultere i en kompileringsfejl. Du skal først konvertere dine tal til en boolesk betingelse, f.eks. (a > 0) && (b > 0).

Hvis du vil læse andre artikler, der ligner Dart-operatorer: En Komplet Guide, kan du besøge kategorien Sundhed.

Go up