return жайлы сәл толығырақ...

Бағдарламалау
return — өзі тиесілі методтан, қандай да бір мәнді қайтара отырып(міндетті түрде емес, мән қайтармауы да мүмкін),сол методтан шығарып жіберу операторы. деп алдыңғы кішігірім жазбада айтып өткен болатынмын. Бұл тақырыпқа тез ену үшін сол тақырыпты сәл түрлендіріп қайталау арқылы кірісейік:

Мән қайтармайтын тұсын мысалмен түсіндіріп көрейін(бұл оңайырақ:)):
алдыңғы есепті 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 сандарын енгізейік:
return
Enter басылған соң Main(string [] args) методының қалған кодтарына ауысамыз.
return
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
Жоғарыда келтірілген мысалда 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 емес методтарды шақырып, қайтарған мәнін қандай да бір айнымалыға бекітсек болады. //Міндетті түрде емес.Сонымен қатар айнымалымен де мәнін бекіту үшін шақырылып отырған методтың типтері бір-біріне сай болуы керек.
//Бұл ережелерді бар деп тануға өзімнің тәжірибем ғана негіз болып отыр. Сол себепті қателескен болып шығуым да ғажап емес))
Соңғы мысалда айтылған ережелер қай жерде орын алып тұрғанын көру үшін мына суретке назар аударыңыздар:return
Әдейі, қабылдауға, тесттеуге де ыңғайлы болсын деп әуелі кодын, сосын қайталап суретін салдым. Сонда да ашылмай кеткен тұстары болса айта жатарсыздар.
Әлі де тілге тиек етуге тұрарлық жиі кездесетін мысалдары бар. Олар жайлы кейінірек… иншаЛлах ;)

11 пікір

avatar
Сонша екі мақала етіп жазатындай бір нәрсе көріп тұрғам жоқ ритурннан.
Return функциядан шығарады, break циклдан шығарады, болды емес пе?!
avatar
Білгенімен бөліскеннің айыбы жоқ болар.
avatar
assalamu aleikum, bauirim. Bulai enbektenip makala jazip jurgen adamdar az, bulai tusindirgennin de paidasi zor(bireuler uwin). Sondiktan, toktama Nurlan ari karai jalgastiruindi kutemiz, saahaAllahu laka)))
avatar
не ғой, Зыңң брат… Бес саусақ бірдей емес демекші, біреулер тәжірибесі баршылық — оларға шет жағасына жөн сілтесең де жеткілікті және бір айтқанда мың сөз қозғасаң да есінде қалады, ал біреулер — мүлдем хабары жоқ, оларға әрбір нүктені түртіп өткеннің күнде де қайталап бірдеңе сұрағысы келіп тұрады және аз-аздан жеткізбесең, аяғына жеткенше бас жағын ұмытып қалуы мүмкін)) Мысалы, мен өз басым сондаймын — егжей-тегжейлі мыжғылап ұқтырмаса, бір затты жан-жақты қарастырып мысалмен түсіндірмесе ұқпай қаламын… Гудоктын шәкіртімін ғой, қысқасы)))
+Сонымен қатар, мен не жазсам да тек қана жаңадан бастап жатқанжарға арнап жазылуда. Өз деңгейіңіз үшін менің тақырыптарым тым төмен екенін көріп тұрсаңыз……
++Сонымен қатар, екі тақырып екі түрлі сұрақты қарастырады:1-екеуінің айырмашылығы неде?, 2-ретурнды нақты қандай мақсатта және қандай ережелерге сүйеніп отырып қолданамыз?
+++Сонымен қатар, бір жазбада көп нәрсе айтылып кетсе басым көпшілік оны басынан-аяқ зейінмен қарастырғысы келмейді, естуім бойынша.
++++Сонымен қатар, шынымды айтсам, осы жазбалар сырт көзге кішігірім болып көрінсе де мен үшін оп-оңай тиіп жатқан жоқ, әрқайсысы біраз сағаттардың жемісі, сәтті-сәтсіз шыққанына қарамастан.
+++++, Сонымен қатар, осы пікірді арнайы сіз үшін ұзақ қылып жаздым) Егер басынан бастап не жазғанымның барлығы айна-қатесіз есіңізде қалса… монстырсыз ғой, брат))))
avatar
Гудокқа жарнама жасамаймыз:)
avatar
Жалпы ешқандай жаман ойым болмаған, тек «Return функциядан шығарады, break циклдан шығарады, болды емес пе?!» деп сұрадым.
avatar
Әлбетте, браааТ)
Сіз менің сөздерімді оқығанда не ой туды соны жаздыңыз, жұрт та сіздің пікірді оқығанда не түсінді — соны жазуда.«Ничего личного, произошло exception „Мелкое недоразумение“))»
Бұл да қысқашадан гөрі толығырақ, ойымызды ашығырақ жазғанымыздың абзадығына дәлел)
avatar
Коп жагдайда кодта break орнына return колданып жатады. Сол себепти кейбиреулерге тусиниксиз болуы мумкин айырмашылыгы. Сол себепти макала орынды жазылган деп ойлаймын.
avatar
avatar
Head first-теги кыздар ма мынау? ))
avatar
Мен қате жазып қойыппын )) ретурны бар болсын-болмасын, типі войд болсын-болмасын, шақырған методтарды қандай да бір айнымалыға бекіту міндетті емес.
Түзетіп қойдым
Тек қана тіркелген және авторизациядан өткен қолданушылар пікір қалдыра алады.