Wenn ich Code mit einer if-Anweisung schrieb, war ich oft wütend auf Eclipse, der sagte: "Es gibt keine Rückkehr !!". Aber ich weiß nicht warum. .. ..
Um primitiver zu denken, habe ich eine Methode geschrieben, die die größere zurückgibt, wenn zwei Argumente vom Typ int übergeben werden (es ist eine Aufnahme mit der Funktion max, aber ich habe mit einem leicht verständlichen Beispiel experimentiert. Weil ich wollte).
//Code 1
public class BiggerNumber {
public static void main(String[] args) {
//TODO automatisch generierter Methodenstub
System.out.println(returnBiggerNumber(250,500));
}
public static int returnBiggerNumber(int num1,int num2) {
if (num1 < num2) {
return num2;
}else if (num1> num2 ) {
return num1;
}else if (num1 == num2) {
return num1;
}else { //← Das!
return num1;
}
}
}
Es war das letzte, was ich nicht verstehen konnte. Wenn Sie dies nicht schreiben, wird ein Kompilierungsfehler angezeigt. .. ..
Für diese sehr einfache Methode gibt es nur drei mögliche Zweige.
Theoretisch sollte dies alle Möglichkeiten abdecken. .. .. Ich sollte in der Lage sein, die im Argument enthaltene Nummer zurückzugeben Gibt es eine andere Möglichkeit? Ich war besorgt.
Als ich einen Senior mit einer langen Geschichte von Java nach der Ursache des Fehlers fragte, ** "Der Compiler kann nicht ausnahmslos feststellen, ob alle bedingten Zweige geschrieben sind. Selbst wenn es sich um einen bedingten Zweig handelt, der tatsächlich nicht erreicht werden kann, muss er daher formal geschrieben werden. 』** ist das, was sie sagten.
"Das war's!"
Wenn ja, ist die einzige Möglichkeit der Verzweigung außer <,> ==. Es ist möglicherweise nicht erforderlich, den bedingten Ausdruck von == zu schreiben. Also (ich) das erste, was mir in den Sinn kommt, ist dies.
//Code 2
public static int returnBiggerNumber(int num1,int num2) {
if (num1 < num2) {
return num2;
}else if (num1> num2 ) {
return num1;
}else {
return num1;
}
}
Oder gibt es das auch.
//Code 3
public static int returnBiggerNumber(int num1,int num2) {
if (num1 < num2) {
return num2;
}else if (num1> num2 ) {
return num1;
}
return num1;
}
Es fühlt sich ein wenig seltsam an, aber das ist auch effektiv. Ist das Geschmackssache?
//Code 4
public static int returnBiggerNumber(int num1,int num2) {
if (num1 < num2) {
return num2;
}else if (num1> num2 ) {
return num1;
}else if (num1 == num2) {
}
return num1;
}
Erstens sollte es kein Problem geben, da wir für alle Muster zurückkehren können! Ich war überzeugt, dass es an ** Swifts Switch-Anweisungsregeln ** lag.
Dies ist das. ** "Gibt es eine case-Klausel, die alle möglichen Werte des dem Schalter zugewiesenen Werttyps abdeckt? Die Standardklausel muss vorhanden sein. 』** (* Übrigens ist es in Java nicht erforderlich, und es ist auch in if-Anweisung nicht erforderlich, selbst mit demselben Swift)
Nein, ** Dies ist eine Geschichte, die nichts mit dem Rückgabewert zu tun hat. .. .. ** Ich hatte ein Missverständnis.
Ob es sich um eine Java-switch-Anweisung, eine schnelle if-Anweisung oder eine switch-Anweisung handelt, Wenn es sich um eine Funktion / Methode handelt, die einen Rückgabewert zurückgibt, müssen alle Werte zurückgegeben werden.
Nur für den Fall zum Beispiel
public int returnTest(int i) {
switch (i) {
case 1:
return 1;
case 2:
return 2;
case 3:
return 3;
//Auf diese Weise müssen Sie return außerhalb des Standard- oder Switch-Blocks schreiben.
//In Kürze verursacht diese Schreibmethode einen Fehler. Schreiben Sie ihn daher außerhalb des Schalterblocks.
default:
return 4;
}
}
Dies ist eine gängige Regel, aber es scheint, dass sie aufgrund halbfertiger sprachspezifischer Regelkenntnisse nicht organisiert werden konnte.
Ich war also vorerst überzeugt, aber ich würde es begrüßen, wenn Sie einen Kommentar abgeben könnten, wenn Sie Tsukkomi oder + α haben.
Recommended Posts