Nieosiągalna instrukcja kodu jest częstym problemem wśród początkujących użytkowników języka Java. Wielu początkujących programistów myli ten błąd z „martwym kodem” — kolejnym zjawiskiem związanym z Javą. Chociaż oba są podobne z powodu manifestacji, istnieją pewne różnice, które omówimy w tym poście. Poza tym dowiesz się, jakie są najczęstsze przyczyny, dla których kompilator zwraca nieosiągalną instrukcję kodu, i odkryjesz kilka prostych poprawek, które pozwolą przywrócić kod do działania.
Co to jest nieosiągalny kod?
Z definicji instrukcja nieosiągalna to taka, która nie zostanie wykonana przez kompilator po uruchomieniu kodu gotowego do wdrożenia. Nieosiągalna instrukcja powrotu kodu jest zazwyczaj oznaką błędu logicznego w programie. Chociaż istnieje kilka powodów, dla których kończy się to takim stwierdzeniem, we wszystkich przypadkach nieosiągalny kod jest zbędny, zaśmieca program i należy go unikać za wszelką cenę.Nieosiągalny kod kontra martwy kod
W społeczności programistów pojęcia „nieosiągalny” i „martwy” kod są praktycznie synonimami. Jeśli jednak jesteś wybredny podczas czytania dokumentacji, możesz zauważyć, że wytyczne programistyczne często wspominają o tych dwóch osobno. Czy jest jakaś różnica między martwym a nieosiągalnym kodem? Zasadniczo rozróżnienie między tymi dwoma błędami polega na sposobie, w jaki kompilator na nie reaguje. Jeśli kod, który wpiszesz w kompilatorze, jest nieosiągalny , w powiadomieniu Java pojawi się błąd czasu wykonywania kompilacji. Jeśli Twoje stwierdzenie to „ martwy kod ”, nie wystąpią żadne błędy w czasie wykonywania — programista otrzyma następujące ostrzeżenie systemowe:
class DeadCode {
void deadcode_Method(boolean b) {
System.out.println("Reachable statement");
if(true) {
return;
}
System.out.println("Unreachable statement"); // dead code
}
}
Ponieważ w przypadku martwego kodu nie ma bezpośredniego błędu kompilatora, trudniej go wykryć. Jeśli jednak uważnie śledzisz zwroty System.out.printIn , wyłapanie martwego kodu nie powinno sprawiać kłopotów.
Dlaczego otrzymujesz nieosiągalne instrukcje dotyczące kodu
Dobrą wiadomością jest to, że łatwo jest prześledzić przyczynę nieosiągalnych problemów z kodem. Istnieją trzy główne powody, dla których Twój kompilator zwraca błędy:- Zestawienia przelewów. Jeśli złamiesz swój kod za pomocą instrukcji return, nic po „return = true” nie zostanie wykonane.
- Nieskończona pętla - żaden kod, który napisałeś po nieskończonej pętli, nie zostanie wykonany, ponieważ system będzie powtarzał akcję pętli. Dlatego podczas konwersji kodu na kod bajtowy kompilator wyśle błąd nieosiągalnego kodu.
Zwróć instrukcje
Instrukcja return jest częścią grupy słów kluczowych Transfer, co oznacza, że kończy twoją metodę. Jest pomocny przy oddzielaniu funkcji i pomaga zachować czytelność i czystość kodu. Ponieważ jednak nie można dodawać nowych instrukcji do funkcji po return = true, próba kontynuacji funkcji po słowie kluczowym spowoduje błąd kompilatora „Kod nieosiągalny”. Rzućmy okiem na przykład błędnej obsługi „return = true” i sposób, w jaki kompilator na to reaguje.
class GFG {
public static void main(String args[])
{
System.out.println("My code will run");
return;
// ironically, this code will never run
// here’s an unreachable code message a developer gets.
System.out.println("My code will run");
}
}
Oto jak niewłaściwe użycie instrukcji return zostanie wyświetlone w kompilatorze:
prog.java:11: error: unreachable statement
System.out.println(“My code will run”);
^
1 error
Aby utrwalić to, czego się nauczyłeś, zalecamy obejrzenie lekcji wideo z naszego kursu języka Java
Złam oświadczenia
Instrukcje break to kolejny rodzaj słów kluczowych, na które należy uważać podczas pisania funkcji Java. Zgodnie z definicją słowo kluczowe break służy do zakończenia pętli. W poniższym przykładzie, gdy programista wyjdzie z pętli, nie będzie już mógł wykonać instrukcji w linii 8 - w związku z tym kompilator wyświetli błąd instrukcji unreachable. Oto przykładowy kod, który spowoduje nieosiągalną instrukcję kodu:
public class JavaCodeGeeks
{
public static void main(String[] args) {
for(int i=1;i<5;i++)
{
System.out.println(i);
break;
System.out.println("Code after break");
}
}
}
Patrząc na błąd z punktu widzenia kompilatora, otrzymasz następujące oświadczenie o błędzie.
JavaCodeGeeks.java:8: error: unreachable statement
System.out.println("After break");
^
1 error
Kontynuuj wypowiedzi
Kontynuuj to słowo kluczowe kontrolujące pętlę, używane do powtarzania akcji. Ilekroć chcesz, aby wykonanie pętli samoczynnie rozpoczynało się od zera, dodaj do swojego kodu ciąg dalszy. Instrukcja jest przydatna, aby pomóc programistom wybrać, które instrukcje pętli chcą powtarzać, a które nie będą umieszczane w iteracji. Chociaż kontynuuj jest prostym słowem kluczowym w użyciu, brak pełnego zrozumienia jego działania prowadzi programistów do pułapki „nieosiągalnego kodu”. Ponieważ po napotkaniu kontynuacji system powtórzy pętlę, słowo kluczowe nie będzie w stanie dotrzeć do następujących po nim instrukcji. Powiedz, że masz następujący kod:
public class JavaIsFun
{
public static void main(String[] args) {
for(int i=0;i<8;i++)
{
System.out.println(i);
if(i==5)
{
continue;
System.out.println("Coding after continue");
}
}
}
}
System nie wykona Twojej instrukcji „Kodowanie po kontynuacji” – kompilator od razu Cię o tym poinformuje.
JavaIsFun.java:10: error: unreachable statement
System.out.println("Coding after continue");
Nieskończone pętle
Scenariusz podobny do przykładów użycia słów kluczowych „przerwij” i „kontynuuj” to nieskończona pętla. Projektując nieskończoną pętlę, programista powinien pamiętać, że żadna instrukcja po niej nigdy się nie uruchomi. Tak więc, jeśli nie przerwiesz pętli, cały kod napisany później będzie nieosiągalny. Oto interesujący przykład niewłaściwej obsługi pętli nieskończonej do sprawdzenia:
public class JavaCodeGym
{
public static void main(String[] args) {
while(true)
{
System.out.println("Hey there");
}
System.out.println("Nice to see you");
}
}
Domyślasz się, gdzie ukrywa się błąd? Kompilator wskaże na to od razu po uruchomieniu kodu:
//unreachable code statement compiler error
JavaCodeGym.java:10: error: unreachable statement
System.out.println("Nice to see you");
‘
Ponieważ istnieje nieskończona pętla przed „Miło cię widzieć” , instrukcja nigdy się nie wykona i będzie zwracała nieosiągalny błąd kodu.
GO TO FULL VERSION