Naučte se identifikovat mrtvý kód a nedosažitelný kód v Javě. Může vám to být zadáno v úlohách na kódování při pohovoru v jazyce Java jako hádanka.
Chyby mrtvého kódu a nedosažitelného kódu
Abyste si udělali představu o mrtvém kódu, v této hádance jsem níže uvedl kus kódu. Pokuste se identifikovat problémy v kódu, pokud je zkompilován v prostředí Eclipse IDE.
Odpověď na výše uvedenou hádanku uvádím v další části, ale doporučuji vám, abyste si ji nejprve sami vyzkoušeli. Je to jen pro zábavu.
Řešení – Má mrtvý kód
Všichni jsme se jistě setkali s chybami kompilace souvisejícími s „Nedostupným kódem“ a někteří si možná všimli „varování o mrtvém kódu“. Výše uvedená hádanka se týká pouze jich.
V první metodě howToDoInJava_method1()
je druhý tiskový příkaz nedosažitelný, takže kompilátor si bude stěžovat ze zapomenutých důvodů.
V druhé metodě howToDoInJava_method2()
je druhý tiskový příkaz také nedosažitelný, ale kupodivu vás kompilátor pouze varuje. Později se zde pokusíme dobrat logiky.
V třetí metodě howToDoInJava_method3()
je druhý tiskový příkaz také nedosažitelný, takže si kompilátor opět stěžuje.
Proč !!!
Co je to mrtvý kód
Nedosažitelný kód ve druhé metodě se nazývá „mrtvý kód“. Jedná se čistě o chybu hlášenou kompilátorem Eclipse, a pokud výše uvedenou třídu zkompilujete pomocí „javac“, bude si vestavěný kompilátor Javy stěžovat pouze na další dvě metody. .
Citace ze specifikace jazyka Java –
„Jde o to, že musí existovat nějaká možná cesta provádění od začátku konstruktoru, metody, inicializátoru instance nebo statického inicializátoru, který obsahuje příkaz, k příkazu samotnému. Analýza bere v úvahu strukturu příkazů.
S výjimkou zvláštního zacházení s příkazy
while
,do
afor
, jejichž podmíněný výraz má konstantní hodnotu true, se hodnoty ostatních výrazů při analýze toku nezohledňují.“
To znamená, že při určování nedosažitelného kódu se nebere v úvahu blok 'if'
. Protože pokud projdete jednou z cest příkazu 'if'
, mohli byste se dostat k druhému příkazu print. Vše záleží na kompilátoru, který to určí během kompilace.
V ostatních dvou příkazech kompilátor určil nedosažitelnost, takže si stěžuje s chybou.
Pokud druhou metodu přepíšeme znovu takto.
public void howToDoInJava_method2() {System.out.println("how to do");if (true) {return;}else{return;}System.out.println("in java");}
Nyní kompilátor určí, že se v žádném případě nemůže dostat k poslednímu příkazu print, takže 'javac'
opět hlásí nedosažitelný kód i pro tuto druhou metodu.