Příkazy skoku bezpodmínečně přenášejí řízení. Příkaz break ukončí nejbližší uzavřený iterační příkaz nebo příkaz switch. Příkaz continue zahájí novou iteraci nejbližšího přiloženého příkazu iteration. Příkaz return ukončí provádění funkce, ve které se vyskytuje, a vrátí ovládací prvek volajícímu. Příkaz goto předá ovládací prvek instrukci označené štítkem.

instrukce k přerušení

Příkaz break ukončí provádění nejbližšího vnějšího iteračního příkazu (tj. for , foreach , while nebo do smyčky) nebo příkazu switch. Příkaz break přenese řízení na příkaz, který následuje po dokončeném příkazu (pokud nějaký existuje).

Ve vnořených smyčkách ukončí příkaz break pouze nejvnitřnější smyčku, která jej obsahuje, jak ukazuje následující příklad:

Při použití příkazu switch uvnitř smyčky přenáší příkaz break na konci sekce switch řízení pouze z příkazu switch. Smyčka obsahující příkaz switch není ovlivněna, jak ukazuje následující příklad:

Pokračujte ve výuce

Příkaz continue zahajuje novou iteraci nejbližšího vnějšího příkazu iterace (tj. cyklu for , foreach , while nebo do), jak je znázorněno v následujícím příkladu:

návratový výpis

Příkaz return ukončí provádění metody, ve které je přítomen, a vrátí řízení a výsledek funkce (pokud existuje) volající metodě.

Pokud se člen funkce nevyhodnotí jako hodnota, použije se příkaz return bez výrazu, jak ukazuje následující příklad:

Jak je ukázáno v předchozím příkladu, příkaz return bez výrazu se obvykle používá k předčasnému ukončení člena funkce. Pokud člen funkce neobsahuje příkaz return, ukončí se po provedení posledního příkazu.

Pokud se člen funkce vyhodnotí jako hodnota, použije se příkaz return s výrazem, jak ukazuje následující příklad:

Pokud příkaz return obsahuje výraz, musí být tento výraz implicitně převoditelný na návratový typ člena funkce, pokud není asynchronní. Výraz vrácený asynchronní funkcí musí být implicitně převeden na argument typu Task nebo ValueTask, bez ohledu na návratový typ funkce. Pokud je návratový typ asynchronní funkce Task nebo ValueTask, použije se příkaz return bez výrazu.

Vrátí se přes odkaz

Ve výchozím nastavení vrací příkaz return hodnotu výrazu. Můžete vrátit odkaz na proměnnou. Referenční návratové hodnoty jsou hodnoty, které metoda vrací volajícímu pomocí odkazu. To znamená, že volající může změnit návratovou hodnotu metody a tato změna se projeví ve stavu objektu ve volané metodě. Chcete-li to provést, použijte příkaz return s klíčovým slovem ref, jak ukazuje následující příklad:

READ
Jak se jmenuje barva, na kterou se dá psát křídou?

Návratová hodnota odkazu umožňuje metodě vrátit odkaz na proměnnou volajícímu spíše než pevnou hodnotu. Volající se pak může rozhodnout, zda bude výslednou proměnnou zpracovávat hodnotou nebo odkazem. Volající může vytvořit novou proměnnou, která je odkazem na vrácenou hodnotu, nazývanou místní odkaz. Návratová referenční hodnota znamená, že metoda vrací odkaz do nějaké proměnné (nebo jejího aliasu). Rozsah proměnné musí zahrnovat tuto metodu. Životnost proměnné musí pokračovat i po návratu metody. Veškeré změny, které volající provede v návratové hodnotě metody, se použijí na vrácenou proměnnou.

Pokud je deklarována metoda návratová referenční hodnota, což znamená, že vrací alias proměnné. Cílem návrhu je často volání kódu pro přístup k této proměnné pomocí aliasu, včetně úprav. Metody vrácené odkazem nemohou mít návratový typ void.

Aby volající změnil stav objektu, musí být vrácená hodnota odkazu uložena v proměnné, která je explicitně definována jako referenční proměnná.

Návratová hodnota ref je alias jiné proměnné v rozsahu volané metody. Jakékoli použití referenční návratové hodnoty lze považovat za alias pro odpovídající proměnnou.

  • Když přiřadíte její hodnotu, přiřadíte hodnotu proměnné, kterou vytváří alias.
  • Když čtete jeho hodnotu, čtete hodnotu proměnné, kterou aliasuje.
  • Pokud to vrátíte по ссылке, vracíte alias do stejné proměnné.
  • Pokud to předáte jiné metodě по ссылке, předáváte odkaz na proměnnou, kterou aliasuje.
  • Vytvořením lokální referenční proměnné pro alias vytvoříte nový alias pro stejnou proměnnou.

Návratová hodnota ref by měla být ref-safe-context pro metodu volání. To znamená:

  • Životnost návratové hodnoty musí přesáhnout dobu provádění metody. Jinými slovy, nemůže to být lokální proměnná v metodě, která ji vrací. Může to být instance statického pole nebo třídy nebo argument předaný metodě. Pokus o vrácení lokální proměnné generuje chybu kompilátoru CS8168, „Nelze vrátit místní obj odkazem, protože není lokální.
  • Vrácená hodnota nemůže být doslova null . Metoda vracení odkazu může vracet alias proměnné, jejíž hodnota je aktuálně nulová, jako hodnotu (bez instancí) nebo jako typ hodnoty NULL pro typ hodnoty.
  • Vrácená hodnota nemůže být konstanta, člen výčtu, návratová hodnota z vlastnosti nebo metody nebo struktura třídy.
READ
Jak zvolit sílu proudu při svařování?

Navíc návratové referenční hodnoty nejsou povoleny pro asynchronní metody. Asynchronní metoda může vrátit řízení dříve, než je její provádění dokončeno a její návratová hodnota je známá.

Metoda se vrací návratová hodnota odkazy by měly:

  • Přidejte klíčové slovo reference před návratový typ.
  • Každý příkaz return v těle metody obsahuje klíčové slovo ref před názvem vracené instance.

Následující příklad ukazuje metodu, která splňuje zadané podmínky a vrací odkaz na objekt Person s názvem p:

Níže je uveden úplnější příklad vrácené referenční hodnoty, který ukazuje podpis metody a tělo.

Volaná metoda může také deklarovat návratovou hodnotu ref pouze pro čtení, aby vrátila hodnotu odkazem a zabránila volajícímu kódu ve změně návratové hodnoty. Volající se může vyhnout kopírování vrácené hodnoty uložením hodnoty do lokální referenční proměnné pouze pro čtení.

Následující příklad definuje třídu Book, která obsahuje dvě pole String: Název a Autor. Je také definována třída BookCollection, která zahrnuje soukromé pole objektů Book. Jednotlivé objekty knihy jsou vráceny odkazem voláním metody GetBookByTitle.

Pokud volající uloží návratovou hodnotu metody GetBookByTitle jako referenční lokální proměnnou, změny, které volající provede v návratové hodnotě, se projeví v objektu BookCollection, jak je znázorněno v následujícím příkladu.

goto prohlášení

Příkaz goto předá řízení příkazu označenému štítkem, jak ukazuje následující příklad:

Jak je ukázáno v předchozím příkladu, můžete použít příkaz goto k ukončení vnořené smyčky.

Při práci s vnořenými smyčkami zvažte refaktorování jednotlivých smyček do samostatných metod. Výsledkem je, že můžete získat zjednodušený a čitelnější kód bez příkazu goto.

V příkazu switch můžete také použít příkaz goto k přenesení řízení do sekce switch s popiskem konstanty case, jak ukazuje následující příklad:

Můžete také použít výchozí příkaz goto v příkazu switch; k přenesení ovládání do sekce přepínačů označené jako výchozí .

Pokud štítek s daným názvem v aktuálním prvku funkce neexistuje nebo pokud příkaz goto není v rozsahu štítku, dojde k chybě při kompilaci. To znamená, že příkaz goto nelze použít k přenosu řízení z aktuálního prvku funkce nebo do vnořených oborů.

Specifikace jazyka C#

Další informace naleznete v následujících částech článku Specifikace jazyka C#:

READ
Jak se jmenuje papír používaný na zdobení kytic?

См. также

Zdroj tohoto obsahu lze nalézt na GitHubu, kde také můžete vytvářet a zobrazovat problémy a stahovat požadavky. Další informace naleznete v naší členské příručce.

Java univerzita

Dnes se podíváme na takovou vlastnost programovacího jazyka Java, jako je operátor break. Toto je první článek na téma přechodových operátorů, takže pokud se vám bude líbit, rád napíšu další. Hned bych rád poznamenal, že tento článek je určen především začínajícím vývojářům a pokročilejší studenti zde pro sebe možná nenajdou nic nového. Tak pojďme. V Javě existují 2 způsoby, jak změnit pořadí, ve kterém se provádějí instrukce programu: příkazy skoku a mechanismus zpracování výjimek. V Javě jsou tři skokové operátory: break, continue a return. Dnes vás zvu, abyste se blíže podívali na operátor přestávky. Zpracování výjimek je tak široké téma, že přesahuje rámec tohoto článku. Existují tři způsoby, jak použít příkaz break v jazyce Java. První a nejoblíbenější způsob je použít break k předčasnému ukončení smyčky, například: Tento příklad vypíše: To znamená, že když se čítač smyčky i rovná předávanému parametru čísla, tedy číslu 3, spuštění smyčky je předčasně přerušeno. Pokud má program několik vnořených smyček, pak přerušte výstupy pouze z nejvnitřnější smyčky, například: Tento příklad vytvoří výstup: Jak je vidět z příkladu, vnitřní smyčka se přeruší pokaždé na čísle 3 (parametr číslo) a vnější smyčka provede 5 přesně tak, jak bylo zamýšleno. V Javě můžete použít více než jeden příkaz break v rámci smyčky, ale to se nedoporučuje, protože čitelnost a struktura kódu je značně snížena. Druhým způsobem použití break je jeho použití k přerušení provádění příkazů ve větvích přepínače, například: Spuštěním tohoto příkladu se vytvoří výstup: Příkaz break předal řízení kódu následujícímu po celém bloku přepínače. Pokud v tomto příkladu neurčíte přerušení přepínače: Výstup nebude podle očekávání: Stalo se to proto, že po provedení bloku případu 2 program pokračoval ve vykonávání všech následujících bloků případ, což nám dalo odpovídající závěr. Někdy nám může být tato vlastnost příkazu switch prospěšná, například: Tento program porovná dané číslo s číslem 5 a dá následující výstup: Při prvním volání metody příkaz switch předá řízení příkazu case 2 a dále k příkazu break v případě 5. Druhý hovor je podobný prvnímu, ale začíná případem 7 . Třetí volání nenalezne vhodnou hodnotu mezi všemi případy, takže se provede výchozí příkaz. Třetím způsobem je použití příkazu break místo příkazu goto C. K tomu použijeme speciální formu příkazu break nazvanou break s popiskem. Tento formulář vypadá jako štítek přerušení; Štítek je obvykle jakýkoli vhodný název z jmenného prostoru Java, který předchází bloku kódu. Po použití přerušení na tento blok kódu se štítkem však bude kód pokračovat ve vykonávání od místa za blokem s odpovídajícím štítkem, například: Tento příklad vytvoří následující výstup: Po prvním volání metody , příkaz break přenese řízení na konec druhého bloku, opustí druhý blok a třetí blok, přičemž provede další příkaz println() na konci prvního bloku. Po druhém hovoru se na obrazovce zobrazí všechny linky. Štítky lze také použít k označení cyklů. Je třeba si uvědomit, že na štítek můžete skočit pouze z bloku kódu označeného štítkem, například takový kód se nezkompiluje: Poznámky k čistotě kódu a příkazu break: Existuje obecně přijímaná rada používat přerušení velmi opatrně, protože použití break komplikuje pochopení smyčky a způsobuje, že se programátor musí podívat dovnitř smyčky, aby pochopil nuance jejího fungování. Existuje heuristické pravidlo, že můžete break používat jistěji v kratších smyčkách a s větší opatrností v dlouhých a hluboce vnořených smyčkách, protože to zvyšuje pravděpodobnost chyb a ztěžuje ostatním programátorům čtení a pochopení vašeho kódu. Jak jsem psal výše, použití velkého množství zlomů roztroušených po celém kódu naznačuje, že programátor zcela nerozumí tomu, proč svůj kód napsal tak, jak to udělal. Možná by stálo za zvážení refaktorování takové smyčky jejím rozdělením na několik menších smyček. Buďte opatrní, když používáte break se štítkem jako náhradu za goto , protože to zvyšuje složitost struktury kódu. To je vše, co jsem vám dnes chtěl říci o příkazu break v Javě. Budu rád za konstruktivní kritiku a v případě zájmu jsem také připraven napsat pokračování o operátorech pokračování a vrácení.