1. Udtryk vs udsagn

I Java er det nyttigt at skelne mellem to kategorier: udsagn og udtryk . En sætning siges normalt at blive udført , mens et udtryk siges at være evalueret . Men det er ikke det vigtigste.

Hovedforskellen mellem et udsagn og et udtryk er, at evaluering af et udtryk har et resultat . Og dette resultat har en type, og det kan tildeles en variabel eller bruges i et andet udtryk.

Eksempler:

Kode Noter
int x; Udmelding
(a < 10) Udtryk, hvis type erboolean
i++; iUdtryk, hvis type er den samme som variabelens type
x = 5; xUdtryk, hvis type er den samme som variabelens type

Og hvad giver det os?

For det første kan vi udnytte det faktum, at mange udsagn faktisk er udtryk (hvilket betyder, at de vurderes til en værdi). For eksempel vil kode som denne fungere:

Kode Noter
int x, y, z;
x = y = z = 1;
int x, y, z;
x = (y = (z = 1))

For det andet, hvis vi vil, kan vi ignorere resultatet af at evaluere et udtryk.

Kode Kode hvor vi ignorerer resultatet:
int x = scanner.nextInt();
boolean m = (5 < 10);
scanner.nextInt();
(5 < 10);

Vi ignorerer resultatet af at evaluere et udtryk, for eksempel hvis udtrykket involverer at gøre noget nyttigt, og denne handling er det, der er vigtigt for os, ikke selve resultatet.


2. Ternær operatør

Dette life hack er allerede mere interessant end det forrige. Java har en speciel ternær operatør . Dens syntaks ligner lidt syntaksen for sætningen if-else:

Condition ? Expression 1 : Expression 2;

Hvis betingelsen er sand, evalueres udtryk 1 , ellers evalueres udtryk 2 . Betingelsen efterfølges af et spørgsmålstegn , og de to udtryk er adskilt af kolon .

Den største forskel mellem den ternære operator og et if-elseudsagn er, at den ternære operator er et udtryk, hvilket betyder, at vi kan tildele dens resultat til noget.

Antag for eksempel, at vi vil beregne minimum af to tal. Ved at bruge den ternære operator vil denne kode se sådan ud:

int a = 2;
int b = 3;
int min = a < b ?  a : b;

Eller lad os sige, at du skal tildele forskellige værdier til en variabel afhængigt af en betingelse. Hvordan gør du det?

En mulighed er at bruge et if-elseudsagn:

int age = 25;
int money;
if (age > 30)
   money = 100;
else
   money = 50;

Den anden mulighed er at bruge den ternære operator , det vil sige stenografi for if-elsesætningen:

int age = 25;
int money = age > 30 ? 100 : 50;

Så hvad er bedre at bruge - en if-elseerklæring eller den ternære operator ? Med hensyn til udførelseshastighed er der ikke den store forskel. Dette er mere et spørgsmål om kodelæsbarhed. Og dette er en meget vigtig pointe: Koden skal ikke kun fungere korrekt, men også være let at læse for andre programmører.

Den enkleste regel er denne: Hvis koden passer på én linje , så brug den ternære operator ; men hvis det ikke passer på en linje, så er det bedre at bruge et if-elseudsagn.



3. Sammenligning af reelle tal

Som tidligere nævnt kan du ikke bare få fat i reelle tal og sammenligne dem. Der er altid mulighed for, at nogle væsentlige cifre kan blive kasseret, hvilket forårsager uventede bivirkninger.

Derfor er der en tidstestet tilgang. Hvis to reelle tal adskiller sig med en meget lille værdi, kan de betragtes som ens. Eksempel:

double a = 1.000001;
double b = 1.000002;
if ( (b - a) < 0.0001 )
   System.out.println("The numbers are equal");
else
   System.out.println("The numbers are not equal");

Men det er ikke alt, vi skal bekymre os om, da forskellen mellem tallene godt kan vise sig at være negativ. Så for at denne tilgang skal fungere, skal du ikke kun sammenligne forskellen mellem tallene, men den absolutte værdi af forskellen mellem tallene:|a-b|

Java har en metode til at beregne den absolutte værdi af et tal: Math.abs():

int m = Math.abs(value);

Som et resultat vil den korrigerede version af vores eksempel ovenfor se sådan ud:

double a = 1.000001;
double b = 1.000002;

if ( Math.abs(b - a) < 0.0001 )
   System.out.println("The numbers are equal");
else
   System.out.println("The numbers are not equal");