C# programmeerimiskeeles viitab “tingimuslik operaator” tavaliselt kolmeliikmelisele operaatorile (ternary operator), kuid laiemas tähenduses hõlmab see ka relatsioonilisi operaatoreid ja null-väärtustega seotud operaatoreid, mis juhivad programmi loogikat.
Siin on ülevaade peamistest tingimuslikest operaatoritest:
1. Tingimuslik (kolmeliikmeline) operaator ?:
See on lühivorm if-else lausest ja koosneb kolmest osast. See on ainus operaator C#-s, mis võtab kolm operandi.
- Süntaks:
tingimus ? väljend_kui_tõene : väljend_kui_väär. - Kasutus: Kui tingimus on tõene, tagastatakse esimene väärtus; kui väär, siis teine. See on mugav viis väärtuste omistamiseks ühe reaga.
2. Null-koalesentsi operaator ??
See operaator on mõeldud mugavaks tööks null-väärtustega (loodud C# 2.0-s).
- Toimimine: Väljend
a ?? btagastab muutujaasisu, kui see ei olenull. Kuiaonnull, tagastatakse väärtusb. - Null-koalesentsi omistamine (??=): Alates versioonist C# 8.0 saab kasutada operaatorit
??=, mis omistab parempoolse väärtuse vasakpoolsele muutujale ainult siis, kui vasakpoolne on hetkelnull.
3. Relatsioonilised (tingimuslikud) operaatorid
Neid operaatoreid kasutatakse kahe väärtuse võrdlemiseks ja need tagastavad alati tõeväärtuse (bool) ehk kas true või false. Peamised operaatorid on:
==(võrdne) ja!=(mittevõrdne).<(väiksem kui) ja>(suurem kui).<=(väiksem või võrdne) ja>=(suurem või võrdne).
4. Seos kontrollstruktuuridega
Kuigi operaatorid ise teostavad arvutusi või võrdlusi, kasutatakse neid kõige sagedamini kontrollstruktuurides, et juhtida programmi kulgu:
- if lause: Siseneb koodiplokki ainult siis, kui antud tingimus on tõene.
- switch lause: Toimib filtrina, mis suunab täitmise vastavalt muutuja väärtusele sobivasse “juhtumisse” (case).
- is ja as operaatorid: Kasutatakse tüübikontrolliks ja turvaliseks tüübiteisenduseks.
Tingimuslikud operaatorid võimaldavad kirjutada kompaktsemat ja loetavamat koodi, vältides pikki ja lohisevaid kontrollstruktuure olukordades, kus on vaja teha lihtsaid valikuid kahe väärtuse vahel.
Näited:
1. if / else if / else
static void Main(string[] args)
{
Console.WriteLine("vali meetod ");
Console.WriteLine("Sisesta number");
Console.WriteLine("1.Teksti sisestus ja .txt-faili genereerimine");
Console.WriteLine("2.Kalkulaator");
Console.WriteLine("3.Ruut");
int choice = int .Parse(Console.ReadLine());
if (choice == 1)
{
txtFail();
}
else if (choice == 2)
{
Calc();
}
else if (choice == 3)
{
Ruut();
}
else
{
Console.WriteLine("Vale valik");
}
4.switch
switch (valik)
{
case "1": Osa4_funktsioonid.tekstisisestamine(); break;
case "2": Osa4_funktsioonid.Tekstilugemine(); break;
case "3":
Console.Write("failinimi: ");
file = Console.ReadLine();
Osa4_funktsioonid.Ridade_lugemine(file);
break;
case "4":
Console.Write("failinimi: ");
file = Console.ReadLine();
list = Osa4_funktsioonid.Ridade_lugemine_listiks(file);
break;
case "5":
Osa4_funktsioonid.listi_muutmine(file);break;
case "6":
Osa4_funktsioonid.Otsing(file); break;
default: Console.Write("sisesta kehtiv number: "); break;
}
5. Ternaarne operaator ? :
static void Ruutvõrrand()
{
Console.WriteLine("Sisesta arv A");
double a = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Siseta arv B");
double b = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Sisesta arv C");
double c = Convert.ToDouble(Console.ReadLine());
double D = b * b - 4 * a * c;
if (D > 0)
{
double x1 = (-b + Math.Sqrt(D)) / (2 * a);
double x2 = (-b - Math.Sqrt(D)) / (2 * a);
Console.WriteLine("Lahendid: x1 = " + x1 + ", x2 = " + x2);
}
else if (D == 0)
{
double x = -b / (2 * a);
Console.WriteLine("Üks lahend: x = " + x);
}
else
{
Console.WriteLine("Lahendeid pole");
}
