return жайлы сәл толығырақ...
return — өзі тиесілі методтан, қандай да бір мәнді қайтара отырып(міндетті түрде емес, мән қайтармауы да мүмкін),сол методтан шығарып жіберу операторы. деп алдыңғы кішігірім жазбада айтып өткен болатынмын. Бұл тақырыпқа тез ену үшін сол тақырыпты сәл түрлендіріп қайталау арқылы кірісейік:
…
Мән қайтармайтын тұсын мысалмен түсіндіріп көрейін(бұл оңайырақ:)):
алдыңғы есепті static void Main(string [] args)-да емес жеке методқа шығарып, сол методты шақыру арқылы жұмыс істейік:
Көп түрленіп қажеті жоқ, тағы да 1,2,3,4,5,0 сандарын енгізейік:

Enter басылған соң Main(string [] args) методының қалған кодтарына ауысамыз.

static void Main(string[] args)
{
Ал енді break орнына return қолданайық:
Жоғарыда келтірілген мысалда return-ның ешкімге ешқандай мән қайтармайтын нұсқасы келтірілген.
Ал енді мән қайтаратын нұсқаларына кезек берейін. Айтулы оператордың өзектілігі де осы тұста анық байқалады.
Әуелі мысал келтіріп, кейін барып анықтама бергенім дұрыс шығар бұл жолы.
Ашығырақ, алдыңғы мысалды түбегейлі өзгерту арқылы түсіндіріп көрейін. Кодты бір қарап шығыңыз, тексеріп көріңіз, содан кейін барып әрі қарай түсініктемесін оқысаңыз жақсырақ(өз ойымша).
Бұл жерде 3 ереже бар:
1) Егер де методтың типі void-тан өзгеше болса демек оның денесінде міндетті түрде return болуы керек, сол арқылы методтан шығу барысында қандай да бір мәнді иеленуіміз керек.
2) Методың типі мен оның қайтаратын объектісінің типі бір-біріне сай болуы керек.Абсолютті бірдей болуы шарт емес(бұл жерді толығырақ түсіндіремін кешірек, иншаЛлах).
3) Типі void емес методтарды шақырып, қайтарған мәнін қандай да бір айнымалыға бекітсек болады. //Міндетті түрде емес.Сонымен қатар айнымалымен де мәнін бекіту үшін шақырылып отырған методтың типтері бір-біріне сай болуы керек.
//Бұл ережелерді бар деп тануға өзімнің тәжірибем ғана негіз болып отыр. Сол себепті қателескен болып шығуым да ғажап емес))
Соңғы мысалда айтылған ережелер қай жерде орын алып тұрғанын көру үшін мына суретке назар аударыңыздар:
Әдейі, қабылдауға, тесттеуге де ыңғайлы болсын деп әуелі кодын, сосын қайталап суретін салдым. Сонда да ашылмай кеткен тұстары болса айта жатарсыздар.
Әлі де тілге тиек етуге тұрарлық жиі кездесетін мысалдары бар. Олар жайлы кейінірек… иншаЛлах ;)
…
Мән қайтармайтын тұсын мысалмен түсіндіріп көрейін(
алдыңғы есепті static void Main(string [] args)-да емес жеке методқа шығарып, сол методты шақыру арқылы жұмыс істейік:
class Program
{
static void Main(string[] args)
{
Method1();
Console.WriteLine("Дал казiр Маin методындамыз...");
Console.WriteLine("Багдарламадан шыгу ушiн кез-келген батырманы басыныз...");
Console.ReadKey();
}
static void Method1()
{
//bul Method1 0-sani engizilgenge deingi sandardin kosindisin wigaradi
int a = 0, b;
while (true)
{
b = int.Parse(Console.ReadLine());
if (b == 0)
break;
a += b;
}
Console.WriteLine("Барлык енгiзiлген сандардын косындысы = " + a);
Console.WriteLine("Method1-ден шыгу ушiн 'Enter' батырмасын басыныз...");
Console.ReadLine();
}
}
Көп түрленіп қажеті жоқ, тағы да 1,2,3,4,5,0 сандарын енгізейік:

Enter басылған соң Main(string [] args) методының қалған кодтарына ауысамыз.

static void Main(string[] args)
{
Ал енді break орнына return қолданайық:
class Program
{
Method1();
Console.WriteLine("Дал казiр Маin методындамыз...");
Console.WriteLine("Багдарламадан шыгу ушiн кез-келген батырманы басыныз...");
Console.ReadKey();
}
static void Method1()
{
int a = 0, b;
while (true)
{
b = int.Parse(Console.ReadLine());
if (b == 0)
return;
a += b;
}
Console.WriteLine("Барлык енгiзiлген сандардын косындысы = " + a);
Console.WriteLine("Method1-ден шыгу ушiн 'Enter' батырмасын басыныз...");
Console.ReadLine();
}
}
Бұл жолы 0-ді енгізгенде «Барлык енгiзiлген сандардын косындысы = » деген қатарды көре алмаймыз, себебі return методтан «лақтырып» тастайды.Дегенмен, бағдарламадан шығып кетпейміз,(осы тұсты дұрыс ұғыңыздар!)Method1()-мен қош айтысып,Method1() қай жерде шақырылды сол жерден әрі қарай кете береміз, біздің жағдайымызда Main(string [] args)методына ораламыз. Ол мына қатардан байқалады:
Жоғарыда келтірілген мысалда return-ның ешкімге ешқандай мән қайтармайтын нұсқасы келтірілген.
Ал енді мән қайтаратын нұсқаларына кезек берейін. Айтулы оператордың өзектілігі де осы тұста анық байқалады.
Әуелі мысал келтіріп, кейін барып анықтама бергенім дұрыс шығар бұл жолы.
Ашығырақ, алдыңғы мысалды түбегейлі өзгерту арқылы түсіндіріп көрейін. Кодты бір қарап шығыңыз, тексеріп көріңіз, содан кейін барып әрі қарай түсініктемесін оқысаңыз жақсырақ
class Program
{
static void Main(string[] args)
{
int a = Method1();
Console.WriteLine("Барлык енгiзiлген сандардын косындысы = " + a);
Console.ReadKey();
}
static int Method1()
{
int a = 0, b;
while (true)
{
b = int.Parse(Console.ReadLine());
if (b == 0)
return a;
a += b;
}
}
}
Бұл жерде 3 ереже бар:
1) Егер де методтың типі void-тан өзгеше болса демек оның денесінде міндетті түрде return болуы керек, сол арқылы методтан шығу барысында қандай да бір мәнді иеленуіміз керек.
2) Методың типі мен оның қайтаратын объектісінің типі бір-біріне сай болуы керек.Абсолютті бірдей болуы шарт емес(бұл жерді толығырақ түсіндіремін кешірек, иншаЛлах).
3) Типі void емес методтарды шақырып, қайтарған мәнін қандай да бір айнымалыға бекітсек болады. //Міндетті түрде емес.Сонымен қатар айнымалымен де мәнін бекіту үшін шақырылып отырған методтың типтері бір-біріне сай болуы керек.
//Бұл ережелерді бар деп тануға өзімнің тәжірибем ғана негіз болып отыр. Сол себепті қателескен болып шығуым да ғажап емес))
Соңғы мысалда айтылған ережелер қай жерде орын алып тұрғанын көру үшін мына суретке назар аударыңыздар:

Әдейі, қабылдауға, тесттеуге де ыңғайлы болсын деп әуелі кодын, сосын қайталап суретін салдым. Сонда да ашылмай кеткен тұстары болса айта жатарсыздар.
Әлі де тілге тиек етуге тұрарлық жиі кездесетін мысалдары бар. Олар жайлы кейінірек… иншаЛлах ;)
11 пікір
Return функциядан шығарады, break циклдан шығарады, болды емес пе?!
+Сонымен қатар, мен не жазсам да тек қана жаңадан бастап жатқанжарға арнап жазылуда. Өз деңгейіңіз үшін менің тақырыптарым тым төмен екенін көріп тұрсаңыз……
++Сонымен қатар, екі тақырып екі түрлі сұрақты қарастырады:1-екеуінің айырмашылығы неде?, 2-ретурнды нақты қандай мақсатта және қандай ережелерге сүйеніп отырып қолданамыз?
+++Сонымен қатар, бір жазбада көп нәрсе айтылып кетсе басым көпшілік оны басынан-аяқ зейінмен қарастырғысы келмейді, естуім бойынша.
++++Сонымен қатар, шынымды айтсам, осы жазбалар сырт көзге кішігірім болып көрінсе де мен үшін оп-оңай тиіп жатқан жоқ, әрқайсысы біраз сағаттардың жемісі, сәтті-сәтсіз шыққанына қарамастан.
+++++, Сонымен қатар, осы пікірді арнайы сіз үшін ұзақ қылып жаздым) Егер басынан бастап не жазғанымның барлығы айна-қатесіз есіңізде қалса… монстырсыз ғой, брат))))
Сіз менің сөздерімді оқығанда не ой туды соны жаздыңыз, жұрт та сіздің пікірді оқығанда не түсінді — соны жазуда.
«Ничего личного, произошло exception „Мелкое недоразумение“))»Бұл да қысқашадан гөрі толығырақ, ойымызды ашығырақ жазғанымыздың абзадығына дәлел)
Түзетіп қойдым