уторак, 17. новембар 2015.

Operatori u C# programskom jeziku


Prva stvar koju ste učili iz matematike još dok ste išli u osnovnu školu su sabiranje, oduzimanje, množenje i deljenje; prvo celih brojeva zatim i drugih. Tako se počinje i učenju programskih jezika, ali imajte u vidu da neki programerski operatori ne postoje u matematici i nemaju uvek istu matematičku simboliku kao i obratno. I pored toga što su operatori poznati svakom C i C++ programeru, C# programski jezik je razvio i neke promene i dodao neke nove kategorije operatora.



( Kategorije operatora u C# programskom jeziku )

Prvo ću vam nabrojati većinu kategorija operatora u C# programskom jeziku koje postoje, čisto da vidite koliko je C# programski jezik za razliku od drugih programskih jezika napredovao; zatim ću neke, pre svega osnovne operatore objasniti; dok ću se sa ostalim pozabaviti u narednim postovima kad budemo radili s njima.

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.


Šta je to prioritet operatora?



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.

number = 4 + 5 * 6; // Result is 34

ali ste možda očekivali da dobijete rezultat 54. Zato uvek koristite zagrade.

number = (4 + 5) * 6; // Result is 54

Pogledajte sliku tabele operatora, kako su operatori poređani prema prioritetu. I računar će uvek izvršavati izračunavanja prema prioritetima operatora, ako vi to zagradama ne promenite.


( Operatori u C# programskom jeziku poređani prema prioritetu )

Šta su aritmetički operatori?

Aritmetički operatori su vam kao i u matematici; operatori koji koriste aritmetičke operacije. A to su:
  •   +     sabiranje
  •   -      oduzimanje
  •   ·      množenje
  •   /      delenje
  •   %   mod, modul, modulos, modulo – celobrojni ostatak
Pogledajte navedeni program, kako se u  C# programskom jeziku koriste aritmetički operatori:

using System;
using static System.Console;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ArithmeticOperators
{
    class Program
    {
        static void Main(string[] args)
        {
            WriteLine("Enter number 1 of 2: ");
            double number1 = Double.Parse(ReadLine());
            WriteLine("Enter number 2 of 2: ");
            double number2 = Double.Parse(ReadLine());
                 
            WriteLine($"\n{number1} + {number2} = { number1 + number2 }");
            WriteLine($"\n{number1} - {number2} = { number1 - number2 }");
            WriteLine($"\n{number1} * {number2} = { number1 * number2 }");
            WriteLine($"\n{number1} / {number2} = { number1 / number2 }");
            WriteLine($"\n{number1} % {number2} = { number1 % number2 }");

            ReadLine();

        }
    }
}

Kao što vidite u kodu, C# 6.0 ima svoj novi format za string-ove. Zahvaljujući novom formatu za string koji se piše sa karakterom za dolar $, vi ne morate da pišete kod ovako:

     WriteLine("\n{0} + {1} = {2}", number1, number2, number1 + number2);
            WriteLine("\n{0} - {1} = {2}", number1, number2, number1 - number2);
            WriteLine("\n{0} * {1} = {2}", number1, number2, number1 * number2);
            WriteLine("\n{0} / {1} = {2}", number1, number2, number1 / number2);
            WriteLine("\n{0} % {1} = {2}", number1, number2, number1 % number2);

Naredba Parse u kodu jednostavno konvertuje vaš ulaz string u tip double u ovom primeru. Da ste hteli da iz string-a konverujete broj u integer, onda bi ste liniju koda pisali ovako:

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

ili što je češći slučaj ovako:

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

Naravno, ukoliko u navedenom programu dodelite vrednost promenjivoj kao karakter, slovo ili prekoračite tip double; program će pasti i dobićete grešku jer u ovom malom programu nije ispisan kod za obradu grešaka. Takođe u svakom programskom jeziku nikada nije dozvoljeno delenje 0. Kad pokrenete program vaši rezultati će biti slični u zavisnosti kakve ste vrednosti dodelili promenjivima.

Enter number 1 of 2:
25
Enter number 2 of 2:
4

25 + 4 = 29

25 - 4 = 21

25 * 4 = 100

25 / 4 = 6.25

25 % 4 = 1


Kako izgleda navedeni program možete pogledati i na video-u:


(C# 6.0 Tutorial - Fundamentals - 3. Arithmetic 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ćavanje) i dekrementiranje (umanjivanje). Pogledajte kod narednog programa:

using System;
using static System.Console;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace IncrementDecrementOperators
{
    class Program
    {
        static void Main(string[] args)
        {
            WriteLine("Enter an integer number: ");
            int number = Int32.Parse(ReadLine());

            WriteLine($"\nYour number is: {number}");
            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("\nThe results are not error!");

            ReadLine();

        }
    }
}

Možda vi sad očekujete da će se promenjiva number uvećati za 1, zatim smanjiti za 1. Međutim kad pokrenete program, dobićete ovakve rezultate:

Enter an integer number:
15

Your number is: 15

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

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

Your number 15 after pre-increment ( ++x ): 16

Your number 16 after pre-decrement ( --x ): 15

The results are not error!


U prvoj liniji koda vidimo da je promenjivoj number prvo ispisao vrednost number zatim izvršio inkrementiranje. Zato vi vidite istu vašu vrednost 15; š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. Ova ista pravila važe i kod C i kod  C++ programskog jezika. Kako navedeni program izgleda možete pogledati i na video-u:


( C# 6.0 Tutorial - Fundamentals - 4. Increment and Dectrement Operators )

Šta su operatori dodeljivanja?

Operatori dodeljivanja ili operatori složenog dodeljivanja su vam jednostavno operatori koji nam na neki način skraćuju dodeljivanje neke vrednosti promenjivoj. Npr. umesto da pišete:

x = x + 10;

Vi to možete napisati složenijim operatorom dodeljivanja, ali u suštini jednostavnije.

x += 10;


( Operatori dodeljivanja u C# programskom jeziku )
 
Pogledajte sledeći program i obratite pažnju na operatore dodeljivanja:

using System;
using static System.Console;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AssignmentOperators
{
    class Program
    {
        static void Main(string[] args)
        {
            WriteLine("Enter an integer number: ");
            int number = Int32.Parse(ReadLine());

            WriteLine($"\n  X = {number}");
            WriteLine($"\n  X = X + 18 ... X += 18 ... { number += 18 }");
            WriteLine($"\n  X = X - 13 ... X -= 13 ... { number -= 13 }");
            WriteLine($"\n  X = X * 9 ...  X *= 9  ... { number *= 9 }");
            WriteLine($"\n  X = X / 7 ...  X /= 7 ... { number /= 7 }");
            WriteLine($"\n  X = X % 3 ...  X %= 3 ... { number %= 3 }");

            ReadLine();

        }
    }
}

Kad pokrenete program, rezultati će vam biti slični u zavisnosti koju ste vrednost dodelili promenjivoj X:

Enter an integer number:
10

X = 10

X = X + 18 ... X += 18 ... 28

X = X - 13 ... X -= 13 ... 15

X = X * 9 ... X *= 9 ... 135

X = X / 7 ... X /= 7 ... 19

X = X % 3 ... X %= 3 ... 1


Kako navedeni program radi možete videti i na video-u:


( C# 6.0 Tutorial - Fundamentals - 5. Assignment 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 sledeći program:

using System;
using static System.Console;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ComparisionOperators
{
    class Program
    {
        static void Main(string[] args)
        {
            WriteLine("Enter an integer number: ");
            int number = Int32.Parse(ReadLine());

            WriteLine($"\nYour number is {number}");
            WriteLine($"\nYour number is equal 15 : { number == 15 }");
            WriteLine($"\nYour number is greater than 15 : { number > 15 }");
            WriteLine($"\nYour number is greater or equal 15 : { number >= 15 }");
            WriteLine($"\nYour number is less than 15 : { number < 15 }");
            WriteLine($"\nYour number is less or equal 15 : { number <= 15 }");
            WriteLine($"\nYour number is inequal 15 : { number != 15 }");

            ReadLine();
        }
    }
}

Navedeni program će porediti vašu unetu vrednost sa brojem 15 i ispisaće vam za svaku tvrdnju da li je ona tačna ili nije. Kad pokrenete navedeni program rezultati će biti slični u zavisnosti koju vrednost ste prosledili promenjivoj number.

Enter an integer number:
45

Your number is 45

Your number is equal 15 : False

Your number is greater than 15 : True

Your number is greater or equal 15 : True
 

Your number is less than 15 : False

Your number is less or equal 15 : False

Your number is inequal 15 : True


Kako navedeni program radi možete videti i na video-u:


( C# 6.0 Tutorial - Fundamentals - 6. Comparision Operators )

Koje se logičke operacije najčešće koriste u C# programskom jeziku?


Logičke operacije u C# programskom jeziku se uglavnom svode na tri osnovne logičke operacije.
  •  && - Logical AND operator – logično I
  •  ||      - Logical OR operator – logično ILI
  •  !      - Logical NOT operator – logična NEGACIJA
Logičke operacije se često koriste u kombinaciji sa operatorima poređenja kad trebate da ispitate više uslova nekog programerskog izraza. Npr.

bool x = (number < 50 || number > 25);

Ukoliko je number jednak 45, kao u prehodnom primeru, onda je x vrednost true jer ispunjava obadva uslova. Inače da ne ispunjava samo jedan od uslova, x vrednost bi bila false. Ovako jednostavno predstavljene logičke operacije rešavaju jednostavne upite ali kombinacija mnoštva logičkih operatora i operatora poređenja u programima rešavaju najkomplikovanije situacije i zahteve.

Šta je i kako se koristi kontrola izuzetaka prekoračenja?

Kontrola izuzetaka prekoračenja se retko koristi u programiranju zbog efikasne obrade grešaka. Ali ako baš imate potrebu za tim, možete uraditi nešto ovako:

            byte x = 255;
            unchecked
            {
                x++;

            }       

S obzirom da je najveća moguća vrednost promenjive tipa byte 255, svako prekoračenje bi izazvalo grešku u vašem programu. Međutim kad koristite izraz unchecked, vi nećete dobiti grešku ali će vaša promenjiva umesto veće vrednosti od 255 biti najmanja vrednost tipa kog koristite, što je za byte 0. Za razliku od unchecked, izraz checked forsira prijavljivanje greške kroz Throw OverflowExcaption ili prekida program. Koristi se u testiranjima.