четвртак, 12. новембар 2015.

Početak svih početaka, tipovi podataka, promenjive i konstante u C# programskom jeziku


Pre nego što i počnemo da programiramo, bilo bi dobro da razumete šta je programiranje. Programiranje vam je u suštini veština da vi svojim kodom saopštite računaru da se ponaša na određen način. Tokom godina se to radilo na razne načine, ali kako prolazi vreme to postaje sve jednostavnije iako potrebe tržišta su sve komplikovanije. Danas se od programiranja traži mnogo više i retko možete videti da samo jedan programer radi na celom projektu, već se akcenat stavlja na što boljem timu. Na žalost kod naših kompanija je u praksi često slučaj starosne diskriminacije i programerski timovi su često neiskusni u nadi da će steći vremenom sve potrebne veštine, iako to nigde nećete javno čuti. Ali da vidimo kako računari rade. Kad vi programirate, vi u stvari dajete naredbe računaru u vidu jedne linije koda ili više grupisanih redova i takve redove zovemo iskazi. Iskaze grupišete u metode, metode u klase i sve to uglavnom radite da ne pišete više puta isti kod u projektu, već da ga pozovete sa mesta gde je već ispisan i testiran. Takođe vaš kod mora imati svrhu i bitan razlog što je uopšte ispisan u programu. Takođe mora biti bez greške i optimizovan. Vaš računar će uvek tačno da uradi ono što ste mu naredili bez obzira da li je to logično. Logika i pravilno ispisan kod je na vama.


( Tipovi podataka u C# programskom jeziku )

Učenje programiranja se uglavnom počinje konzolnim aplikacijama. U konzolnim aplikacijama se ne programiraju programi za tržište jer imaju samo tekstualni korisnički interfejs, ali je odličan i za testiranje prvenstveno metoda i klasa. Svaki program uglavnom počinjete deklaracijom i dodeljivanjem vrednosti promenjivih; i za to je potrebno poznavanje tipova podataka, u našem slučaju tipova C# programskog jezika.

Šta su C# tipovi podataka, kako se deklarišu i inicijalizuju?



Tipovi u C# programskom jeziku se dele na vrednosne i referentne. Ukoliko poznajete C ili C++ programski jezik, pokazivače zaboravite. I nemojte da krijete taj srećan izraz na licu. Umesto pokazivača se u C# programskom jeziku koriste referentni tipovi. I za razliku od drugih programski jezika C# je strog u deklarisanju promenjivih. Jednostavno morate poznavati i deklarisati tipove kao određene tipove. Čak ih morate i inicijalizovati inače će vam Visual Studio 2015 prijaviti grešku.

Promenjiva vam je skladišna lokacija u memoriji računara kojoj dodeljujete neku privremenu vrednost. Najbolje je da promenjivu shvatite kao kutiju u koju će te staviti neki podatak. Međutim nisu sve promenjive iste, kao što nisu ni svi podaci isti. Svaka promenjiva ima svoj tip podataka. Ako pišete slova, onda taj podatak stavljate u promenjivu koja je tipa podataka za slova, dok broj stavljate u promenjivu tip podataka za određeni broj. Međutim postoji mnogo tipova podataka za brojeve, jer nisu svi brojevi isti. Neki su veliki, neku su celobrojni dok su neki sa pokretnim zarezom. Deklaracija znači da vi unapred odredite koji tip pripada vašoj promenjivoj i deklarisanjem vi rezervišete mesto u memoriji za vašu promenjivu. Da bi vam to bilo jasnije, najbolje da odmah to isprogramiramo. Pogledajte navedeni kod gde program sam pokazuje kolike su nam minimalne i maksimalne vrednosti koje određeni tip podataka poseduje:

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

namespace DataTypesVariablesConstants
{
    class Program
    {
        static void Main(string[] args)
        {
            /*  DATA TYPES, VARIABLES AND CONSTANTS
                MANUEL RADOVANOVIC - 12/11/15   */

            WriteLine("\t\tDATA TYPES IN C# PROGRAMMING LANGUAGE\n");

            // This bool variable can be true or false
            bool boolVariable = true;
            WriteLine(" bool or System.Boolean ... {0}, {1}", boolVariable, !boolVariable);

            // This byte variable has range from 0 to 255
            byte byteVariable = 0;
            WriteLine(" byte or System.Byte ... {0}, {1}", byteVariable, byteVariable = 255);

            // This sbyte variable has range from -127 to 128
            sbyte sbyteVariable = -128;
            WriteLine(" sbyte or System.SByte ... {0}, {1}", sbyteVariable, sbyteVariable = 127);

            // This variable has only a character
            char charVariable = 'A';
            WriteLine(" char or System.Char ... {0}, {1}\n", charVariable, charVariable = '9');

            decimal decimalVariable = decimal.MinValue;
            WriteLine(" decimal or System.Decimal ...  {0},\n\t\t\t\t {1}\n",
                        decimalVariable, decimalVariable = decimal.MaxValue);

            double doubleVariable = double.MinValue;
            WriteLine(" double or System.Double ... {0},\n\t\t\t      {1}\n",
                        doubleVariable, doubleVariable = double.MaxValue);

            float floatVariable = float.MinValue;
            WriteLine(" float or System.Single ... {0}, {1}\n",
                        floatVariable, floatVariable = float.MaxValue);

            int intVariable = int.MinValue;
            WriteLine(" int or System.Int32 ... {0}, {1}", intVariable, intVariable = int.MaxValue);

            uint uintVariable = 0;
            WriteLine(" uint or System.UInt32 ... {0}, {1}\n", uintVariable, uintVariable = uint.MaxValue);

            long longVariable = long.MinValue;
            WriteLine(" long or System.Int64 ... {0}, {1}", longVariable, longVariable = long.MaxValue);

            ulong ulongVariable = ulong.MinValue;
            WriteLine(" ulong or System.UInt64 ... {0}, {1}\n", ulongVariable, ulongVariable = ulong.MaxValue);

            short shortVariable = short.MinValue;
            WriteLine(" short or System.Int16 ... {0}, {1}", shortVariable, shortVariable = short.MaxValue);

            ushort ushortVariable = ushort.MinValue;
            WriteLine(" ushort or System.UInt16 ... {0}, {1}\n", ushortVariable, ushortVariable = ushort.MaxValue);

            string stringVariable = "A string can have 2GB or over 1 billion characters.";
            WriteLine(" string or System.String ... {0}\n", stringVariable);

            object objectVariable = "An object can hold any type.";
            WriteLine(" object or System.Object ... {0}\n", objectVariable);

            const decimal PI = 3.14159265359M;
            WriteLine(" You cannot change constant value after initialization.\n Constant PI = {0} always.", PI);

            ReadLine();

        }
    }
}

Kad pokrenemo navedeni program dobićemo rezultate koji nam pokazuju minimalne i maksimalne vrednosti tipova podataka u C# programskom jeziku.

DATA TYPES IN C# PROGRAMMING LANGUAGE

bool or System.Boolean ... True, False
byte or System.Byte ... 0, 255
sbyte or System.SByte ... -128, 127
char or System.Char ... A, 9

decimal or System.Decimal ... -79228162514264337593543950335,
                                                     79228162514264337593543950335

double or System.Double ... -1.79769313486232E+308, 

                                                 1.79769313486232E+308

float or System.Single ... -3.402823E+38, 3.402823E+38

int or System.Int32 ... -2147483648, 2147483647
uint or System.UInt32 ... 0, 4294967295

long or System.Int64 ... -9223372036854775808, 9223372036854775807
ulong or System.UInt64 ... 0, 18446744073709551615

short or System.Int16 ... -32768, 32767
ushort or System.UInt16 ... 0, 65535

string or System.String ... A string can have 2GB or 1 billion characters.
 

object or System.Object ... An object can hold any type.

You cannot change constant value after initialization.
Constant PI = 3.14159265359 always.


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


( C# 6.0 Tutorial - Fundamentals - 2. Data Types, Variables and Constants )

Prvo što možete primetiti u ovom kodu je da je on sav na engleskom jeziku. Kad vi učite programiranje, često se koristi i srpski jezik u nazivima promenjivih, metoda, klasa; postoje i kompanije koje kod nas vode cele projekte na srpskom jeziku ali je to u principu loša praksa. Vaš kod uvek treba da je na engleskom jeziku da bi bio razumljiv svakom programeru u svetu. Promenjiva se na engleskom jeziku kaže variable. Ja sam u ovom primeru namerno svaku promenjivu nazvao variable ali sa drugačijim prefiksom, da bi vama bilo jasnije šta su promenjive. Znači:

float floatVariable = float.MinValue;

U ovoj liniji koda, deklarisana je promenjiva floatVariable tipom float i dodeljena je njena minimalna vrednost promenjivoj. Znači promenjiva je i deklarisana i inicijalizovana. Inicijalizovana znači da ste promenjivoj dodelili neku početnu vrednost. Naziv vaše promenjive uvek treba da počinje malim slovom iako možete velikim, ali naziv promenjive ne sme da sadrži ključne reči C# programskog jezika i identifikatore. Pogledajte na slici koje su to ključne reči C# programskog jezika. Ove reči ne možete koristiti za nazive promenjivih ali ni metoda ili nazive klasa.




( Ključne reči u C# programskom jeziku )


Ne može da korisitite specijalne karaktere za nazive promenjivih osim donje crte. Na primer ne možete ovako zvati promenjive:

888, int, 8house, vari@ble itd.

Takođe ne preporučujem da koristite donju crtu _ poput _variable iako je to dozvoljeno jer možete da ograničite međupovezanost nekog drugog programskog jezika sa C# programskim jezikom poput Visual Basic-a. Vi ste navedenu liniju koda mogli napisati i ovako:

float floatVariable = -3.402823E+38F;

To je najmanja vrednost za koju tip podataka float možete koristiti. Ako će te koristiti brojeve u vašem programu manje od minimalne vrednosti ili veće od maksimalne vrednosti nekog tipa podataka, onda treba da izaberete drugi tip podataka koji je u rangu tipa podataka; inače će te dobiti grešku za prekoračenje memorije. Deklaracija promenjive se vrši samo jednom, naučna notacija E u navedenom izrazu označava da je broj pisan skraćeno od -3.4028230000000000000000000000000000000, to ste učili u matematici; ali sufiks F na kraju broja je druga priča. Npr. ako vi napišete nešto ovako:

float floatVariable = 8.54;

Dobiće te grešku jer računar ne zna da li je 8.54 double, float ili decimal tip podataka.
Sufiksi u C# programskom jeziku su:

  • F – float
  • D – double
  • M – decimal
  • L – long
  • U – unsigned
  • UL – unsigned long
Za ostale tipove promenjivih ne morate koristiti sufikse. Ovo će raditi:

int intVariable = 8;

Šta su Escape karakteri?

Pogledajte ovu liniju koda:

WriteLine(" decimal or System.Decimal ...  {0},\n\t\t\t\t {1}\n",
                        decimalVariable, decimalVariable = decimal.MaxValue);

Metoda WriteLine ispisuje na Command Prompt jednu liniju teksta i ona podrazumeva da ste ispisali i escape karakter \n na kraju reda za prelazak u novi red. Ako vi dodate escape karakter \n na kraju reda, napraviće te još jedan prazan red u Command Prompt-u Kad god hoćete da napravite novi red, jednostavno to možete uraditi escape karakterom \n. U ovoj liniji koda koristimo i escape karakter \t. Kad koristite ovaj escape karakter, to vam je isto kao da ste pritisnuli TAB taster na tastaturi. Pogledajte ostale escape karaktere na slici koje možete da koristite. Programeri C i C++ programskog jezika su takođe upoznati mnogo više sa korišćenjem escape karaktera.


( Escape karakteri u C# programskom jeziku )

Komentari

Komentari koji su podržani od strane C# programskog jezika su isti kao što koriste programeri C i C++ programskog jezika. Oni mogu biti single-line komentari koji počinju sa karakterima // i traju do kraja linije u kojoj pišete komentar:

// This bool variable can be true or false

ili delimited comments – razdvojeni komentari koji počinju sa /* karakterima i završavaju se sa */ karakterima:

/*  DATA TYPES, VARIABLES AND CONSTANTS
    MANUEL RADOVANOVIC - 12/11/15   */

Postoje i specijalni XML tag komentari koji se u C# programskom jeziku uglavnom koriste za dokumentaciju koda ili klase. Počinje sa /// karaktera i sama pravi summary tag. Na primer:

/// <summary>

///  This class performs an important function.

/// </summary>

Šta su konstante?

Konstante su vam isto što i promenjive samo što u njima držite vrednosti koje nećete menjati. Konstante ne možete menjati, jedino ako prepravljate program. Tad su korisne jer onda prepravljate podatak na samo jednom mestu, inače bi ste morali izvrnuti čitav kod programa i prepravljati svugde gde se pojavljuje vrednost koju hoćete da promenite. I mnogo je jednostavnije pisati u kodu PI gde se traži nego 3.141459265395. Konstante se deklarišu ključnom rečju const.

const decimal PI = 3.14159265359M;

Šta je došlo novo sa C# 6.0 u navedenom primeru?

Sad možete imensku reference da označite kao statičke i onda da koristite njihove metode bez kompletne imenske putanje.

using static System.Console;

Onda nije potrebno da pišemo:

Console.WriteLine("\t\tDATA TYPES IN C# PROGRAMMING LANGUAGE\n");

Već možete da izostavite imenski naziv Console:

WriteLine("\t\tDATA TYPES IN C# PROGRAMMING LANGUAGE\n");

Ako ovo pokušate bez ključne reči static, onda vam ovo neće raditi:

using System.Console;