1. Uttrykk vs utsagn

I Java er det nyttig å skille mellom to kategorier: utsagn og uttrykk . En setning sies vanligvis å bli utført , mens et uttrykk sies å være evaluert . Men det er ikke det viktigste.

Hovedforskjellen mellom et utsagn og et uttrykk er at evaluering av et uttrykk har et resultat . Og dette resultatet har en type, og det kan tilordnes til en variabel eller brukes i et annet uttrykk.

Eksempler:

Kode Notater
int x; Uttalelse
(a < 10) Uttrykk hvis type erboolean
i++; Uttrykk hvis type er den samme som typen til ivariabelen
x = 5; Uttrykk hvis type er den samme som typen til xvariabelen

Og hva gir dette oss?

For det første kan vi dra nytte av det faktum at mange utsagn faktisk er uttrykk (som betyr at de vurderes til en verdi). For eksempel vil kode som dette fungere:

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

For det andre, hvis vi vil, kan vi ignorere resultatet av å evaluere et uttrykk.

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

Vi ignorerer resultatet av å evaluere et uttrykk, for eksempel hvis uttrykket innebærer å gjøre noe nyttig, og denne handlingen er det som er viktig for oss, ikke selve resultatet.


2. Ternær operatør

Dette life hacket er allerede mer interessant enn det forrige. Java har en spesiell ternær operatør . Syntaksen er noe lik syntaksen for uttalelsen if-else:

Condition ? Expression 1 : Expression 2;

Hvis betingelsen er sann, blir uttrykk 1 evaluert, ellers blir uttrykk 2 evaluert. Betingelsen er etterfulgt av et spørsmålstegn , og de to uttrykkene er atskilt med kolon .

Hovedforskjellen mellom den ternære operatoren og et if-elseutsagn er at den ternære operatoren er et uttrykk, som betyr at vi kan tilordne resultatet til noe.

Anta for eksempel at vi ønsker å beregne minimum av to tall. Ved å bruke den ternære operatoren vil denne koden se slik ut:

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

Eller la oss si at du må tilordne forskjellige verdier til en variabel avhengig av en tilstand. Hvordan gjør du det?

Ett alternativ er å bruke en if-elseuttalelse:

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

Det andre alternativet er å bruke den ternære operatoren , det vil si stenografi for if-elsesetningen:

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

Så hva er bedre å bruke - en if-elseuttalelse eller den ternære operatoren ? Når det gjelder utførelseshastighet, er det ikke mye forskjell. Dette er mer et spørsmål om kodelesbarhet. Og dette er et veldig viktig poeng: koden må ikke bare fungere riktig, men også være lett å lese for andre programmerere.

Den enkleste regelen er denne: hvis koden passer på én linje , bruk den ternære operatoren ; men hvis det ikke passer på en linje, er det bedre å bruke en if-elseuttalelse.



3. Sammenligning av reelle tall

Som nevnt tidligere kan du ikke bare ta tak i reelle tall og sammenligne dem. Det er alltid en mulighet for at noen betydelige sifre kan bli forkastet, noe som forårsaker uventede bivirkninger.

Det er derfor det er en tidtestet tilnærming. Hvis to reelle tall avviker med en veldig liten verdi, kan de anses å være like. 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 trenger å bekymre oss for, siden forskjellen mellom tallene godt kan vise seg å være negativ. Så for at denne tilnærmingen skal fungere, må du sammenligne ikke bare forskjellen mellom tallene, men den absolutte verdien av forskjellen mellom tallene:|a-b|

Java har en metode for å beregne den absolutte verdien av et tall: Math.abs():

int m = Math.abs(value);

Som et resultat vil den korrigerte versjonen av eksemplet ovenfor se slik ut:

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");