Funkcije predstavljaju izdvojeni celoviti skup naredbi koji izvršavaju određeni zadatak. Kad god imate veliki zadatak i imate potrebu da ga podelite u manje celine, ili jednostavno kad jedan dio koda hoćete više puta da izvršavate u kodu, onda pravite funkciju. Danas da radite na bilo kojem projektu bez funkcija je nezamislivo. Zamislite da u vašem programu hoćete da na više mesta pretvorite milje u kilometre. Da ne bi ste pisali više puta isti kod, vi će te jednostavno napraviti funkciju koja pretvara milje u kilometre i pozivati funkciju kad god vam treba takvo konvertovanje. U programiranju se isti kod skoro nikad ne piše dva puta i ako dođe do neke greške dovoljno je da ispravite vaš kod jednom u funkciji. Inače, bez funkcija bi ste morali prepravljati kod na svim mestima gde ste pretvarali milje u kilometre, dok veličina koda bi bila mnogostruka.
( Statična funkcija koja vraća vrednost u C# programskom jeziku )
Funkcije često nazivaju metodama, što one i jesu. Ali mnogo programera danas meša pojam metode sa funkcijama jer postoji razlika. Metode nisu samo funkcije, već predstavljaju i druge članove klase i strukture koji ne predstavljaju podatke. Znači metode su i indekseri, operatori, konstruktori i destruktori. Čak i svojstva se ponekad smatraju metodama, ali treba znati da svojstva imaju samo karakteristike metoda i atributa, ali svojstva nisu ni metode ni atributi. Ovo je bitno da znate i radi testova koji se polažu za Microsoft sertifikate. I pored toga što su funkcije u C# programskom jeziku slične funkcijama u C i C++ programskom jeziku, funkcije u C++ programskom jeziku možete pogledati ovde; one se takođe razlikuju. C# programski jezik ne podržava globalne metode. Svaku funkciju morate pisati unutar klase. U C# programskom jeziku nije moguće koristiti blokove za grupisanje modifikatora poput public ili private već se u C# programskom jeziku funkcije ali i ostale metode moraju deklarisati sa modifikatorima. Modifiers - modifikatori vam određuju rang delovanja promenjive, funkcije, strukture, metode i klase na nivou celog Solution – rešenja. Osnovni modifikatori pristupa su:
- Public – javan, bez restrikcija.
- Protected Internal – limitiran na program, klasu i izvedene klase
- Internal – limitiran na program i klasu
- Protected – limitiran na klasu i izvedene klase.
- Private – limitiran samo na klasu
Pored navedeni modifikatora obavezno trebate obratiti pažnju i na:
- Static – omogućava da nam nije potrebno da instaciramo klasu kako bi smo pristupili članu klase
Postoje i drugi modifikatori kojima pravimo anonimne ili asinhronizovane funkcije ali o njima će biti posebno pisano u narednim postovima. Inače, najbitnija podela funkcija je podela na funkcije koje ne vraćaju nikakvu vrednost i funkcije koje vraćaju neku vrednost.
Funkcije koje ne vraćaju vrednost
Sintaksa funkcije koja ne vraća nikakvu vrednost je sledeća:
tip void ime_funkcije (lista_parametatra)
{
{
telo_funkcije;
}
Ovu vrstu funkcije ste već viđali na svakom programskom primeru koji smo pisali na postovima do sada.
}
Ovu vrstu funkcije ste već viđali na svakom programskom primeru koji smo pisali na postovima do sada.
static void Main(string[] args)
{
}
using static System.Console;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace VoidFunction
{
class Program
{
static void Main(string[] args)
{
string firstName = String.Empty;
string lastName = String.Empty;
do
{
Write("Enter your first name: ");
firstName = ReadLine();
} while (firstName == String.Empty);
do
{
Write("Enter your last name: ");
lastName = ReadLine();
} while (lastName == String.Empty);
FullName(firstName, lastName);
ReadLine();
}
static void FullName(string fName, string lName)
{
WriteLine($"\n\tYour full name is: {fName} {lName}");
}
}
}
Program Pro = new Program();
Pro.FullName(firstName,
lastName);
Enter your first name: Manuel
Enter your last name: Radovanovic
Your full name is: Manuel Radovanovic
Kako to sve izgleda možete videti i na video-u:
( C# 6.0 Tutorial - Fundamentals - 18. Function Without Return Value )
Funkcije koje vraćaju vrednost
Sintaksa funkcije koja vraća vrednost je sledeća:
modifikator tip ime_funkcije (lista_parametatra)
{
telo_funkcije;
return vrednost;
}
Za razliku od funkcija koje ne vraćaju vrednost, funkcije koje vraćaju moraju da sadrže ključnu reč return koja vraća vrednost. Tip funkcije definišete u zavisnosti kakav tip želite da vam funkcija vrati. Naravno parametri mogu da budu različitog tipa i da se razlikuju od tipa funkcije. Kako se koriste funkcije koje vraćaju vrednost pogledajte u sledećem programu koji konvertuje temperaturu iz celzijusa u farenhajte i obratno:
using System;
using static System.Console;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ReturnFunctions
{
class Program
{
static void Main(string[] args)
{
byte menu = 0;
do
{
Clear();
WriteLine("\t\t\tTHE TEMPERATURE CONVERTER\n");
WriteLine("\t1. Convert Celsius to
Fahrenheit");
WriteLine("\t2. Convert Fahrenheit to
Celsius");
WriteLine("\t3. Quite\n");
Write("\t\tYour choice: ");
bool correctMenu = byte.TryParse(ReadLine(), out menu);
Clear();
if (menu == 1)
{
double temperature = 0.0;
do
{
Write("\n\tWhat is the temperature in Celsius? ");
bool correctTemperature = Double.TryParse(ReadLine(),
out temperature);
if (correctTemperature)
{
WriteLine($"\n\t{temperature} celsius are {CelsiusToFahrenheit(temperature)} fahrenheits.");
ReadKey();
}
} while (temperature > Double.MaxValue &&
temperature < Double.MinValue);
}
if(menu == 2)
{
double temperature = 0.0;
do
{
Write("\n\tWhat is the temperature in Fahrenheits? ");
bool correctTemperature = Double.TryParse(ReadLine(),
out temperature);
if (correctTemperature)
{
WriteLine($"\n\t{temperature} fahrenheits are {FahrenheitToCelsius(temperature)} celsius.");
ReadKey();
}
} while (temperature > Double.MaxValue &&
temperature < Double.MinValue);
}
} while (menu != 3);
}
static double CelsiusToFahrenheit(double temperature)
{
return ((9.0 / 5.0) * temperature) + 32;
}
static double FahrenheitToCelsius(double temperature)
{
return (5.0 / 9.0) * (temperature - 32);
}
}
}
static public double CelsiusToFahrenheit(double temperature)
{
return ((9.0 / 5.0) * temperature) + 32;
}
THE TEMPERATURE CONVERTER
1. Convert Celsius to Fahrenheit
2. Convert Fahrenheit to Celsius
3. Quite
Your choice: 1
What is the temperature in Celsius? 100
100 celsius are 212 fahrenheits.
THE TEMPERATURE CONVERTER
1. Convert Celsius to Fahrenheit
2. Convert Fahrenheit to Celsius
3. Quite
Your choice: 2
What is the temperature in Fahrenheits? 212
212 fahrenheits are 100 celsius.
THE TEMPERATURE CONVERTER
1. Convert Celsius to Fahrenheit
2. Convert Fahrenheit to Celsius
3. Quite
Your choice: 3
Kako to sve izgleda možete videti i na video-u:
( C# 6.0 Tutorial - Fundamentals - 19. Functions With Return Value )
Svaka Vam cast
OdgovoriIzbrišiHvala!
OdgovoriIzbrišiBas deteljno lepo objasnjeno bez zamrsivanja strvari. Prosti lepi primeri.
OdgovoriIzbrišiHvala puno!
Hvala
OdgovoriIzbrišiPozdrav.Možete li mi reći šta znači ovo :Internal modifikator pristupa neće biti vidljiv izvan assemblyja.Šta je zapravo assembly ?Hvala unapred
OdgovoriIzbrišiJedno rešenje može da ima više povezanih projekata. Kad ne želiš da drugi projekti pristupaju tvojim *.dll fajlovima onda ograničiš klase na Internal modifikator. Na nivou assemblyja lakše ćeš shvatiti na nivou *exe ili *dll fajla kad se kompajlira. Pogledaj advanced napredni nivo C# ... https://www.manuelradovanovic.com/2016/03/arhitektura-microsoft-net-framework-a.html
OdgovoriIzbrišiAko sam dobro shvatio Assembly je zapravo jedan solution .A ako imamo više solutiona onda je vezan samo za jedan.
OdgovoriIzbrišiSolution(rešenje) uvek ima barem jedan Project(projekat) ili više njih. Svaki projekat ima ili program ili klasu ili više njih. Assembly je sklop više skrivenih privremenih fajlova neophodnih da se formira kompajlirani fajl (*exe ili *dll), koji se nalazi u Projecat. Znači Internal modifikator je ograničen na nivou tvog programa ili klase u Project-u. Jel sad šta jasnije?
OdgovoriIzbrišiJbg ja sam Bosanac pa ide malo teže :) , ali sad je i meni jasno pa samim tim i svima.Hvala legendo.
OdgovoriIzbriši