15/11/2019

Operatori u C# programskom jeziku

U prethodna dva posta Zdravo C# i .Net Core i Da li unapred definisani tipovi podatakaimaju drugačije vrednosti u .Net Core ste prvo naučili kako da ispišete neki tekst na terminal panelu, zatim ste naučili kako da deklarišete promenjive i dodelite im vrednost. Ispisivanje teksta na terminal panelu je interesantno ali ne vredi mnogo ako ne umete i da uzmete podatak od korisnika i dodelite ga nekoj promenjivoj u vašem programu i koristite ga za neki vaš proračun. U ovom postu  posvetićemo se osnovnim operatorima u C# programskom jeziku ali ćemo reći nešto više i o ostalim operatorima koje sada odmah na početku učenja C#  programskog jezika, ne bi ste razumeli. Mogu da  pretpostavim da ste neke osnovne operatore učili iz matematike još u osnovnoj školi. Važno je da znate da C# programski jezik ima više operatora nego što se to uči na časovima matematike. Neki operatori su isti kao što ste učili na časovima matematike dok drugi postoje samo u C#  programskom jeziku, posebno u verziji 7.0. To znači da su neki od operatora novi i ne postoje u starijim verzijama C#  programskog jezika. Pogledajte prvo koje to sve kategorije operatora postoje u C#  programskom jeziku verziji 7.0.


( Operatori u C# programskom jeziku verziji 7.0 )


Aritmetički                                                                                      + - * / %

Logički                                                                                            & | ^ ~ && || !

Konkatenacija – spajanje stringova                                                +

Inkrementiranje i dekrementiranje – uvećanje i smanjenje            ++ --

Pomeranje bitova                                                                            << >>

Poređenje                                                                                        == != <> <= >=

Dodeljivanje                                                                                   = += -= *= /= %= &= != ^= <<= >>=

Pristup članovima (za objekte i strukture)                                     .

Indeksiranje (za nizove i indeksere)                                              []

Promena tipa                                                                                  ()

Ternarni – kondicionalni                                                                ?:

Stvaranje objekta                                                                           new

Informacije o tipu                                                                          sizeof (samo u nebezbednom kodu), is type of as

Kontrola izuzetaka prekoračenja checked,                                    unchecked

Indirekcija i adresa                                                                        * -> & (samo unebezbednom kodu) []

Unarni                                                                                           +x –x !x ~x ++x –x (T)x Await &x *x

Null – coalescing                                                                          x??y

Null – propagiranje (Elvis operator)                                            ?.

Lambda                                                                                         =>

i drugi.

Aritmetički operatori


Naše istraživanje aritmetičkih operatora započećemo jednostavnim malim programom u koji treba da uneste dva cela broja. Program treba da izvrši pet aritmetičkih operacija i prikaže rezultate.


( Arimetički operatori u C# programskom jeziku )


Pokrenite Visual Studio Code, kliknite na meni File, zatim na Open Folder. Pre nego što selektujete i otvorite folder, kreirajte folder arithmetic_operators i otvorite ga. U View meniju pronađite Terminal, kliknite na njega levim tasterom miša i u desnom donjem uglu razvojnog okruženja pojaviće se Terminal ili Powershall konzola u zavisnosti da li koristite Windows, macOS ili Linux operativni sistem. Unesite sledeću komandu:

dotnet new console

Sačekajte trenutak da se kreiraju fajlovi za vaš program. U Explorer panelu kliknite na Program.cs i izbrišite sledeću liniju koda:

Console.WriteLine("Hello World!");

Unesite sledeću using direktivu:

using static System.Console;

Pređite u Main proceduru i prvo otkucajte sledeću komandu.

Clear();

Ova funkcija će vam izbrisati sve u Terminal panelu i postaviti kurs u prvoj liniji terminala. To je isto kao da ste u terminalu otkucali komandu clear. Naslov programa nećemo pisati s obzirom da program ne sadrži nikakav meni. U prethodnim programima ste videli kako se ispisuje kroz program neki tekst na terminal panelu. U sledećim linijama koda pogledajte kako se traži i unosi vrednost od korisnika u promenjivu.

Write("Input the first number: ");

int number1 = Int32.Parse(ReadLine());

Write("Input the second number: ");

int number2 = Int32.Parse(ReadLine()); 


Prvo ispišete tekst da korisnik zna šta tražite od njega. Zatim deklarišete promenjivu tipa integer. S obzirom da radimo sa celim brojevima, tip integer je dobar izbor. Obratite pažnju da vi u C#  programskom jeziku možete deklarisati promenjivu i dodeliti joj vrednost kad vam ista promenjiva zatreba. Pre su se promenjive deklarisale na početku bloka, ali to više nije praksa. Upamtite kada deklarišete neku promenjivu; vi joj morate dodeliti bilo kakvu vrednost. Kada korisnik u terminal panelu unese bilo koji karakter, on se tretira kao string. Bez obzira koji broj da korisnik unese to je tekst i nije broj. Zbog toga prva konverzija podataka koju trebate znati jeste kako da tip string pretvorite u tip integer. Za tu svrhu koristimo već ugrađenu metodu Parse koja pretvara string u integer. Unesite sledeće linije koda:

WriteLine();

WriteLine($" {number1} + {number2} = {number1 + number2}");

WriteLine();

WriteLine($" {number1} - {number2} = {number1 - number2}");

WriteLine();

WriteLine($" {number1} * {number2} = {number1 * number2}");

WriteLine();

WriteLine($" {number1} / {number2} = {number1 / number2}");

WriteLine();

WriteLine($" {number1} % {number2} = {number1 % number2}");

WriteLine();


Interpolacija niza znakova je mogućnost koja je dodata u zadnjim verzijama C# programskog jezika. Znak $ ispred navodnika omogućava da umetnete vitičaste zagrade { } između navodnika bilo gde u tekstu. U velikim zagradama direktno možete umetnuti promenjivu koja će prikazati svoju vrednost prilikom ispisa teksta na terminal panelu. Naravno ovaj deo koda se mogao napisati sasvim drugačije, ali želim da vi odmah učite kako nešto treba raditi bolje. Vi možete promeniti promenjive integer u decimal i koristiti Decimal.Parse metodu ukoliko želite precizniji proračun bez modalnog izračunavanja. Obratite pažnju da će ovaj program prijaviti grešku ukoliko zaboravite da unesete neku vrednost ili neki karakter koji nije celi broj ili čija je vrednost veća od maksimalne vrednosti integer ili manja od minimalne vrednosti integer. U tom slučaju se program neće izvršiti.

Input the first number: 18.7

Unhandled Exception: System.FormatException: Input string was not in a correct format.
   at System.Number.StringToNumber(ReadOnlySpan`1 str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   at System.Number.ParseInt32(ReadOnlySpan`1 s, NumberStyles style, NumberFormatInfo info)
   at System.Int32.Parse(String s)
   at arithmeticOperators.Program.Main(String[] args) in …

Uz pomoć if uslova i jedne petlje je moguće izbeći ovaj problem ali to prevazilazi ono što ste učili do sada. Ali da bi smo samo izbegli ovu grešku, zamenićemo metodu Parse sa TryParse koja neće ni dodeliti vrednost promenjivoj ukoliko vrednost nije integer vrednost. Promenite sledeće linije koda:

Write("Input the first number: ");

// int number1 = Int32.Parse(ReadLine());

Int32.TryParse(ReadLine(), out int number1);

Write("Input the second number: ");

// int number2 = Int32.Parse(ReadLine());

Int32.TryParse(ReadLine(), out int number2);


Moj savet vam je da uvek kada imate potrebu da koristite metodu Prase, umesto nje koristite TryParse. Kao što možete primetiti metoda TryParse koristi out promenjive. To znači da ona dodeluje vrednost nekoj promenjivoj ako vrednost odgovara tipu promenjive. To radi komandom out. Deklaracija promenjive u ovom slučaju je izvršena direkto u malim zagradama ( ) gde stoje argumenti. Pre ste morali prvo deklarisati promenjivu pre TryParse metode, zatim je koristiti kao argument za metodu ali je to promenjeno. Pogledajte celi kod programa:

using System;

using static System.Console;

namespace arithmeticOperators

{

class Program

{

static void Main(string[] args)

{

Clear();

Write("Input the first number: ");

// int number1 = Int32.Parse(ReadLine());

Int32.TryParse(ReadLine(), out int number1);

Write("Input the second number: ");

// int number2 = Int32.Parse(ReadLine());

Int32.TryParse(ReadLine(), out int number2);

WriteLine();

WriteLine($" {number1} + {number2} = {number1 + number2}");

WriteLine();

WriteLine($" {number1} - {number2} = {number1 - number2}");

WriteLine();

WriteLine($" {number1} * {number2} = {number1 * number2}");

WriteLine();

WriteLine($" {number1} / {number2} = {number1 / number2}");

WriteLine();

WriteLine($" {number1} % {number2} = {number1 % number2}");

WriteLine();

}

}

}


Kada pokrenete ovaj program, rezultat će biti sličan u zavisnosti koji brojevi su vam bili unos:

Input the first number: 157
Input the second number: 21

 157 + 21 = 178

 157 - 21 = 136

 157 * 21 = 3297

 157 / 21 = 7

 157 % 21 = 10

Ovaj program možete videti i na video-u:


( C# & .NET Core - 3. Arithmetic Operators )

Dodeljivanje i prioritet promenjivih

Kreirajte novi program i nazovite ga precedences – prioriteti. Deklarišite tri integer promenjive i dodajte im neku vrednost. Uradite to pravilno kako uvek treba da radite, zatim napišite to isto kraće:

// This is the right way of declare and assign values to variables

// int a = 2;

// int b = 3;

// int c = 4;

int a = 2, b = 3, c = 4;


Dodajte sledeći kod i pokrenite program da se uverite da ovo funkcioniše:

Clear();

WriteLine($"int a = {a}, int b = {b}, int c = {c}" + Environment.NewLine); 

Kada pokrenete program komandom dotnet run u terminal , videćete da nema greške. Dodeljivanje promenjivim na kraći način funkcioniše. Pogledajte sada sledeći kod:

// This is the short way of assign values to variables when you have the same value

a = b = c = 5;

WriteLine($"a = {a}, b = {b}, c = {c}" + Environment.NewLine);


Jednostavno ukoliko imate istu vrednost koju želite da dodelite više promenjivih to isto možete uraditi kraće, ali ne prilikom deklaracije. Promenjive moraju biti deklarisane i mora im biti dodeljena neka vrednost inače to ne možete raditi. Zbog toga ovaj kraći način nije kraći ukoliko morate i deklarisati promenjive i ovo će te retko videti negde u kodu. U ovom našem programu je to opravdano. Pogledajte sledeći kod:

// Some arithmetic operations

a = b + c; // 10

b += 3; // b = b + 3 = 8

c -= 2; // c = c - 2 = 3

WriteLine($"a = {a}, b = {b}, c = {c}" + Environment.NewLine);


Obratite pažnju na promenjive b i c. U ovim linijama koda smo koristili Assignment operators – operatore dodeljivanja. Kad nekoj promenjivoj dodelujete samo neku vrednost, nema potrebe da dvaput pišete istu promenjivu. Pogledajte sledeću sliku operatora dodeljivanja.

( Operatori dodeljivanja u C# programskom jeziku )

Kao što vidite, kad radite sa aritmetičkim operatorima, možete koristiti operatore dodeljivanja kako bi ste pisali kod kraće. Ali šta su to prioriteti? C#  programskom jeziku se operatori imaju svoj prioritet kako se izvršavaju. Npr. množenje će se uvek pre izvršiti nego sabiranje. Zato je neophodno i sigurnije da uvek koristite zagrade pre nego dođete u situaciju da zbog prioriteta operatora dobijete pogrešan rezultat.

// arithmetic precedences

a = 7 + 3 * 10; // 37

b = (7 + 3) * 10; // 100

c = 10 * 5 / 5; // 10

WriteLine($"a = {a}, b = {b}, c = {c}" + Environment.NewLine);


Možda ste kod promenjive a umesto 37 očekivali rezultat 100. Zato je uvek dobro da koristite male zagrade ( ) kod proračuna, kao kod promenjive b. Pogledajte sledeću sliku tabele operatora, kako su operatori poređani prema prioritetu. I program će uvek izvršavati izračunavanja prema prioritetima operatora, ako vi to zagradama ne promenite.


( Prioriteti operatora u C# programskom jeziku )

Od C#  programskog jezika verzije 7.0, vi možete da koristite i digitalne separatore. Oni vam olakšavaju čitanje brojeva u vašem kodu. Pogledajte sledeći kod:

// digit seperators

a = 1000000;

b = 1_000_000; // use digit seperators because easier reading numbers

c = 0xF_42_40;

WriteLine($"a = {a}, b = {b}, c = {c}" + Environment.NewLine);


Kao što vidite promenjivu je teško na prvi pogled pročitati. Zamislite da je promenjiva a mnogo veći broj, tada bi ste morali da brojite nule da pročitate broj. Zahvaljujući digitalnom separatoru vi možete koristiti jedan ili više separatora u bilo kojem broju. Promenjiva b je laka za čitanje. Kao što vidite promenjiva c može umesto decimalnog broja prihvatiti broj u heksadecimalnom obliku ali će ga uvek na terminalu prikazati u decimalnom obliku. Ovde je interesantno što možete da koristite digitalni separator i u heksadecimalnom brojevima ali čak i u binarnim. Pogledajte kako izgleda celi programski kod.

using System;

using static System.Console;

namespace precedence
{

class Program

{

static void Main(string[] args)

{

// This is the right way of declare and assign values to variables

// int a = 2;

// int b = 3;

// int c = 4;

int a = 2, b = 3, c = 4;

Clear();

WriteLine($"int a = {a}, int b = {b}, int c = {c}" + Environment.NewLine);

// This is the short way of assign values to variables when you have the same value

a = b = c = 5;

WriteLine($"a = {a}, b = {b}, c = {c}" + Environment.NewLine);

// Some arithmetic operations

a = b + c; // 10

b += 3; // b = b + 3 = 8

c -= 2; // c = c - 2 = 3

WriteLine($"a = {a}, b = {b}, c = {c}" + Environment.NewLine);

// arithmetic precedences

a = 7 + 3 * 10; // 37

b = (7 + 3) * 10; // 100

c = 10 * 5 / 5; // 10

WriteLine($"a = {a}, b = {b}, c = {c}" + Environment.NewLine);

// digit seperators

a = 1000000;

b = 1_000_000; // use digit seperators because easier reading numbers

c = 0xF_42_40;

WriteLine($"a = {a}, b = {b}, c = {c}" + Environment.NewLine);

}

}

}


Kada pokrenete ovaj program sa komandom dotnet run u terminal panelu, rezultat će biti sledeći:

int a = 2, int b = 3, int c = 4

a = 5, b = 5, c = 5

a = 10, b = 8, c = 3

a = 37, b = 100, c = 10

a = 1000000, b = 1000000, c = 1000000

Ovaj program možete videti i na video-u:


( C# & .NET Core - 4. Precedence Operators )

Šta je inkrementiranje i dekrementiranje?

S obzirom da se u programiranju često javlja potreba da promenjivu uvećavamo ili smanjujemo za 1, posebno u radu sa petljama, došlo je do potrebe da se naprave operatori koji će uvećavati ili smanjivati promenjivu za 1. Zato koristimo operatore za inkrementiranje – uvećanje i dekrementiranje -umanjivanje. Napravimo jedan program koji će nam ovo najbolje objasniti. Ovo je kod celog programa. Pogledajte naziv namespace da bi ste znali kako se program zove:

using System;

using static System.Console;
namespace increment_decrement
{

class Program

{

static void Main(string[] args)

{

Clear();

Write("Enter an integer number: ");

Int32.TryParse(ReadLine(), out int number);

WriteLine();

WriteLine($"\nYour number is: {number}");

WriteLine();

WriteLine($"\nYour number {number} after post-increment ( x++ ): {number++}");

WriteLine($"\nYour number {number} after post-decrement ( x-- ): {number--}");

WriteLine($"\nYour number {number} after pre-increment ( ++x ): {++number}");

WriteLine($"\nYour number {number} after pre-decrement ( --x ): {--number}");

WriteLine();

}

}

}


Kao što možete videti u kodu postoje dva načina kako da uvećate i dva načina kako da umanjite promenjivu za 1. Ali postoji trik.
  • Post – Increment  X++
  • Pre – Increment  ++X
  • Post – Decrement  X--
  • Pre – Decrement  --X

Zato prvo analiziramo program i njegove rezultate. Kad pokrenete prethodni program, vaš rezultat će biti sličan u zavisnosti od vašeg unosa podataka.

Enter an integer number: 10


Your number is: 10


Your number 10 after post-increment ( x++ ): 10

Your number 11 after post-decrement ( x-- ): 11

Your number 10 after pre-increment ( ++x ): 11

Your number 11 after pre-decrement ( --x ): 10

U sedmoj liniji koda u proceduri Main, vidimo da je program ispisao vrednost promenjive number zatim izvršio inkrementiranje. Zato vi vidite istu vašu vrednost; što ne znači da inkrementiranje nije izvršeno. Kod dekrementiranja se stvar ponavlja; program prvo ispisuje vrednost zatim vrši dekrementiranje. Ovakvo inkrementiranje i dekrementiranje se preciznije zove sufiksno inkremetiranje i dekrementiranje. Uglavnom se koristi kod petlji. Zato kad želite da prikažete rezultat inkrementiranja ili dekrementiranja koristite prefiksno inkrementiranje ili dekrementiranje gde se prvo izvrši inkrementirane ili dekrementiranje pa se zatim prikaže vrednost.

Ovaj program možete pogledati i na sledećem video-u.


( C# & .NET Core - 5. Increments and Decrements Operators )

Šta su operatori poređenja?

Operatori poređenja, poznati i kao relacioni operatori su u suštini binarni operatori koji proveravaju istinitost uslova dva operanda i vraćaju logičku vrednost tipa 
bool, tj. true ili false u zavisnosti da li je uslov ispunjen. Često se koriste u kodiranju, posebno u uslovnim izrazima i petljama. Operatori poređenja su:

·                      == … isto
·                      !=  … različito
·                      <   … manje
·                      <= … manje i jednako
·                      >= … veće i jednako
  
Pogledajte u sledećem programu kako funkcionišu operatori poređenja i pored toga što nismo koristili iskaze odlučivanja. Operatore poređenja ćete često koristiti u iskazima odlučivanja. Iskaze odlučivanja ćete učiti u sledećem postu. Za sada se koncentrišite na operatore poređenja. Napravite sledeći program.

using System;
using static System.Console;

namespace comparision_operators
{

class Program
{

static void Main(string[] args)
{

Clear();

Write("Enter an integer number: ");

Int32.TryParse(ReadLine(), out int number);

WriteLine();

WriteLine($"Your number is {number}");

WriteLine($"Your number is equal 50 : { number == 50 }");

WriteLine($"Your number is greater than 50 : { number > 50 }");

WriteLine($"Your number is greater or equal 50 : { number >= 50 }");

WriteLine($"Your number is less than 50 : { number < 50 }");

WriteLine($"Your number is less or equal 50 : { number <= 50 }");

WriteLine($"Your number is inequal 50 : { number != 50 }");

WriteLine();

}

}

}


Koji god unesete broj program će ispitati sve uslove poređenja i prikazati vam šta je tačno i što je netačno. Operatori poređenja jednostavno određuju šta je tačno i što nije. Rezultat je uvek tipa boolean i može samo da bude tačno ili netačno. Njihovim kombinovanjem sa iskazima odlučivanja vi određujete kakav će tok vaših programa da bude.  Pokrenite program i u zavisnosti koji ste broj uneli, rezultat će biti sledeći.

Enter an integer number: 188

Your number is 188
Your number is equal 50 : False
Your number is greater than 50 : True
Your number is greater or equal 50 : True
Your number is less than 50 : False
Your number is less or equal 50 : False
Your number is inequal 50 : True

Ovaj program možete videti i na sledećem video-u.


( C# & .NET Core - 6. Comparison Operators )

Ostale operatore ćete učiti u nekim sledećim postovima.



  



Nema komentara:

Objavi komentar