Iskazi
odlučivanja su bazirani na uslovima. Bez obzira kakav je
uslov definisan on se u programiranju uvek svodi na logičke operatore, true ili false. Jednostavno
svaki uslov može biti ili ispunjen ili ne; tačan ili netačan. Nema možda, kao u
stvarnom životu; jer je u kodu sve crno ili belo! Ako nije vaš kod će da
prijavi grešku ili se uopšte neće ni pokrenuti. Takođe, skoro sva AI - Artificial Intelligence – veštačka inteligencija je bazirana na iskazima odlučivanja.
( If... else statement u C# programskom jeziku )
if (condition)
statement;
ili
if (condition)
statement;
else
statement;
ili
if (condition)
statement;
else if (condition)
statement;
else
statement;
Prvi način znači ako je logički uslov ispunjen, onda izvrši iskaz. Drugi način znači ako je logički iskaz ispunjen onda izvrši prvi iskaz ali ako nije izvrši drugi iskaz. Treći način je; ako je prvi uslov ispunjen izvrši iskaz, ako nije proveri da li je drugi uslov ispunjen i ako jeste izvrši iskaz. Ali ako obadva prethodna uslova ne ispunjavaju uslove onda izvrši zadnji iskaz. Naravno u trećem načinu korišćenja if… else iskaza vi niste ograničeni na jedan else if uslova, nego ih možete imati više. Prvi uslov if i zadnji uslov else može se pisati samo jednom u jednoj strukturi if... else strukture.
Kako da if uslovima nateram korisnika da unese pravu vrednost
umesto da mu prijavljujem grešku?
Za pojavu greške se koristi try catch iskaz o kome ću pisati u nekom narednom postu, ali moguće je, čak i poželjno gde god je moguće da if iskazima onemogućite pojavu greške. Najbolje da analiziramo naredni kod programa:
using System;
using static System.Console;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IfElseStatement
{
class Program
{
static void Main(string[] args)
{
int number = 0;
jump:
Write("Enter an integer from 0 to 100: ");
bool num = Int32.TryParse(ReadLine(), out number);
if (!num) goto jump;
if (number < 0)
{
goto jump;
}
else if (number > 100)
{
goto jump;
}
else
{
WriteLine("\nYour entered value is passed test!");
}
ReadLine();
}
}
}
int number = 0;
bool num = Int32.TryParse(ReadLine(), out number);
jump:
goto jump;
Imajte u vidu da se labele u C# programskom jeziku i projektima retko ili nikad ne koriste; to danas nije praksa i umesto labele se uglavnom koristi drugačiji pristup gde se koristi petlja. Kao što možete primetiti prvi if... else iskaz ima samo jedan uslov; ukoliko je promenjiva num false; znači korisnik nije uneo pravilnu vrednost; i ako nije uneo pravilnu vrednost onda se izvršavanje programa nastavlja skačući na labelu jump i na taj način se ponovo aktivira linija koda koja traži od korisnika da unese vrednost. Ukoliko uslov if... else iskaza nije ispunjena, tj. num je true; korisnik je uneo vrednost tipa integer, cela linija koda će biti jednostavno ignorisana.
if (!num) goto jump;
Ovo isto se mogli napisati i ovako:
if (num == false)
{
goto jump;
}
Razlika je jedino da se po samom kodu vidi da li ste početnik ili iskusan programer. Kod uvek treba da pišete što kraće ukoliko to ne ide to te mere da postaje apsolutno nečitljiv. Drugi if... else uslov je složeniji ali ispituje više uslova.
if (number
< 0)
{
goto jump;
}
else if (number > 100)
{
goto jump;
}
else
{
WriteLine("\nYour entered value is passed test!");
}
if (number < 0 || number > 100) goto jump; else WriteLine("\nYour entered value is passed test!");
Ali onda vam ne bi mogao demonstrirati šta je else if uslov. Kad pokrenete program vaši rezultati će biti slični u zavisnosti kakvu ste vrednosti pokušali dodeliti promenjivoj number:
Enter an integer from 0 to 100: +
Enter an integer from 0 to 100: %
Enter an integer from 0 to 100: *
Enter an integer from 0 to 100: k
Enter an integer from 0 to 100: aaaa
Enter an integer from 0 to 100: \
Enter an integer from 0 to 100: Q
Enter an integer from 0 to 100: ...
Enter an integer from 0 to 100: -8
Enter an integer from 0 to 100: 105
Enter an integer from 0 to 100: 50
Your entered value is passed test!
Kako izgleda navedeni program možete pogledati i na video-u:
( C# 6.0 Tutorial - Fundamentals - 7. If... Else... Statement )
Šta je ternarni ?: operator?
Ternarni operator, kondicionalni ili uslovni operator je skraćeni prikaz if… else iskaza. Koristite ga u situacijama kad imate jednostavan if… else iskaz koji želite da vam vrati jednu ili drugu vrednost. Sintaksa je jednostavna:
condition? first expression : second expression
Imate uslov koji mora biti dodeljen nekoj promenjivoj; jednostavno iza uslova stavite upitnik ? i iza upitnika; dodelite vrednost kad je uslov ispunjen, dok iza dvotačke : navedite vrednost koju dodeljujete kad vrednost nije izvršena: Pogledajte isti program kao prethodni ali gde se koristi ternarni operator i gde su nešto profesionalnije ispisana uslovna odlučivanja.
using System;
using static System.Console;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConditionalOperator
{
class Program
{
static void Main(string[] args)
{
int number = 0;
jump:
Write("Enter an integer from 0 to 100: ");
bool num = Int32.TryParse(ReadLine(), out number);
num = (!num || number < 0 ||
number > 100)? false : true;
if (!num) goto jump; else WriteLine("\nYour
entered value is passed test!");
ReadLine();
}
}
}
U navedenom kodu se zna da je vrednost bool-ean promenjive false ako korisnik ne unese pravilnu integer vrednost. Ali logičkim razmišljanjem se dodeljuje takođe vrednost false promenjivoj num ukoliko korisnik unese manji broj od 0 ili veći broj od 100. Tako num promenjiva postaje odgovorna za sva tri uslova. Tako se bool-ean promenjiva svodi na jednu vrednost, koja se jedina ispituje jednostavnim if... else iskazom prilikom određene akcije i na taj način se izbegava pisanje više granjanja u kodu. Uloga ternarnog ili kondicionalnog operatora u navedenom kodu je da dodeli istoj num promenjivoj vrednost false ukoliko unos korisnika ne ispunjava bilo koji od tri navedena uslova. Kad pokrenete ovaj program i ako unesete iste vrednosti kao što se uneli u prethodnom program, rezultati će biti identični.
Enter an integer from 0 to 100: +
Enter an integer from 0 to 100: %
Enter an integer from 0 to 100: *
Enter an integer from 0 to 100: k
Enter an integer from 0 to 100: aaaa
Enter an integer from 0 to 100: \
Enter an integer from 0 to 100: Q
Enter an integer from 0 to 100: ...
Enter an integer from 0 to 100: -8
Enter an integer from 0 to 100: 105
Enter an integer from 0 to 100: 50
Your entered value is passed test!
Kako izgleda navedeni program možete pogledati i na video-u:
( C# 6.0 Tutorial - Fundamentals - 8. Conditional Operator ?: )
Za razliku od uslovnog operatora, null-coalescing operator ispituje samo uslov gde je vrednost jednaka null. To znači da null-coalescing operator vraća levu vrednost ukoliko levi operand nije null inače vraća desnu vrednost. Da bi ste koristili operator null-coalescing morate bar pretpostaviti da neka vrednost može biti null. Takođe meni nije poznat određen srpski prevod naziva ovog operatora, osim što ga zovemo nul-kolesking. Postoji dosta stvari u programiranju, posebno u software inženjeringu gde jednostavno ne možete nešto prevesti na srpski jezik. Takve pojmove samo izgovaramo na engleskom jeziku ali znamo čemu služe u kodu. Pogledajte ovaj program i biće vam jasnije kako se koristi null-coalescing operator.
using System;
using static System.Console;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NullCoalescingOperator
{
class Program
{
static void Main(string[] args)
{
Write("Enter the domain name or don't enter anything:
");
string word = ReadLine();
/* You
never do this in your code,
I just improvise a string that
is null value */
word = (word == String.Empty) ? null : word;
WriteLine("\n");
// This
is case where use ?? operator
WriteLine(word ?? "Unspecified domain name!");
ReadLine();
}
}
}
Ukoliko pokrenete program vaš rezultat će biti ovakav ako ne unesete nikakvu vrednost.
Enter the domain name or don't enter anything:
Unspecified domain name!
Kako izgleda navedeni program možete pogledati i na video-u:
( C# 6.0 Tutorial - Fundamentals - 9. Null-Coalescing Operator ?? )
Šta je Elvis ?. operator?
Elvis operator ili null propagation operator ili null-conditional operator ili safe navigation operator koji se označava sa ?. vam je najnoviji operator koji je došao u C# programski jezik sa verzijom 6.0. Imate ga naravno i u drugim programskim jezicima poput Groovy programskog jezika. On proverava null vrednost nekog člana ili indeks nekog niza. Ovaj operator pomaže da se kraće piše kod gde se proverava null vrednost i posebno je koristan za ispitivanje null vrednosti u dubljim strukturama podataka. Da bi vam što jasnije bilo, neophodno je da se u kodu u najmanjem slučaju koristi struktura u programu iako još nije pisan post o strukturama, bar kad je C# programski jezik u pitanju. Šta je struktura u C++ programskom jeziku možete pogledati ovde. Za sada strukturu shvatite kao da koristite neki vašu lični objekat koji ima članove. Pogledajte naredni kod programa kako se koristi Elvis ?. operator i kako se koristi zajedno sa prethodnim ?? null-coalescing operatorom.
using System;
using static System.Console;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ElvisOperator
{
class Program
{
public struct Person
{
public string Name;
public string Address;
public string City;
}
static void Main(string[] args)
{
Person Client = new Person();
Client.Name = "Manuel";
Client.City = "Belgrade";
WriteLine("?. operator\n");
// using
?. operator
int? lenghtName = Client.Name?.Length;
int? lenghtAddress = Client.Address?.Length;
int? lenghtCity = Client.City?.Length;
WriteLine($"\nThe
lenght of the client's name: {lenghtName}");
WriteLine($"The lenght of the client's address: {lenghtAddress}");
WriteLine($"The lenght of the client's city: {lenghtCity}");
// using
?. operator with ?? operator together
lenghtName = Client.Name?.Length ??
0;
lenghtAddress =
Client.Address?.Length ?? 0;
lenghtCity = Client.City?.Length ??
0;
WriteLine("\n?. null conditional operator with ?? null coalescing
operator\n");
WriteLine($"\nThe lenght of the client's name: {lenghtName}");
WriteLine($"The lenght of the client's address: {lenghtAddress}");
WriteLine($"The lenght of the client's city: {lenghtCity}");
ReadLine();
}
}
}
?. operator
The lenght of the client's name: 6
The lenght of the client's address:
The lenght of the client's city: 8
?. null conditional operator with ?? null coalescing operator
The lenght of the client's name: 6
The lenght of the client's address: 0
The lenght of the client's city: 8
Kako izgleda navedeni program možete pogledati i na video-u:
( C# 6.0 Tutorial - Fundamentals - 10. Elvis Operator ?. )
Šta je switch... case iskaz odlučivanja?
Postoje situacije gde su višestruka grananja takva da se izbor jedne od više mogućih alternativa vrši na osnovu neke vrednosti promenjive ili izraza. Pored if… else iskaza u C# programskom jeziku kada se koristi više uslova; efikasnije i čitljivije je koristiti switch... case iskaz.
( Switch... case statement u C# programskom jeziku )
Sintaksa Switch... case iskaza je:
switch (expression)
{
case constant-expression :
statement;
break;
case constant-expression :
statement;
break;
. . .
default :
statement;
break;
}
Iskaz switch... case se jedino može koristiti kod tipa promenjive char, string i integer. Za ostale tipove će te morati koristiti if… else iskaz. Case konstante ili case labele su konstante i ne mogu se koristiti za izračunavanja. Takođe, case labele ne mogu imati istu vrednost. Pogledajte sledeći kod programa koji koristi iskaz switch... else.
using System;
using static System.Console;
using
System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SwitchStatement
{
class Program
{
static void Main(string[] args)
{
int month = 0;
jump:
Write("Enter the number of month from 1 to 12: ");
bool num = Int32.TryParse(ReadLine(), out month);
if (!num) goto jump;
switch (month)
{
case 1:
WriteLine("January");
break;
case 2:
WriteLine("February");
break;
case 3:
WriteLine("March");
break;
case 4:
WriteLine("April");
break;
case 5:
WriteLine("May");
break;
case 6:
WriteLine("June");
break;
case 7:
WriteLine("July");
break;
case 8:
WriteLine("August");
break;
case 9:
WriteLine("September");
break;
case 10:
WriteLine("Oktober");
break;
case 11:
WriteLine("November");
break;
case 12:
WriteLine("December");
break;
default:
goto jump;
}
ReadLine();
}
}
}
Kad pokrenete navedeni program rezultat će biti jedan od meseci u godini ukoliko ste pravilno uneli vrednost, tj. broj od 1 do 12.
Enter the number of month from 1 to 12: +
Enter the number of month from 1 to 12: 50
Enter the number of month from 1 to 12: ]
Enter the number of month from 1 to 12: -5
Enter the number of month from 1 to 12: #
Enter the number of month from 1 to 12: abb
Enter the number of month from 1 to 12: 9
September
Kako izgleda navedeni program možete pogledati i na video-u:
( C# 6.0 Tutorial - Fundamentals - 11. Switch... Case... Statement )
No comments:
Post a Comment