JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ بيان تبديل ڪريو

جاوا ۾ بيان تبديل ڪريو

گروپ ۾ شايع ٿيل
تصور ڪريو ته توهان هڪ ڪانٽو تي بيٺا آهيو، جهڙوڪ هڪ مشهور مصوري مان هيرو. کاٻي پاسي ويندؤ ته گهوڙي وڃائي ويهندؤ، ساڄي پاسي هلندؤ ته علم حاصل ڪندا. اهڙي صورتحال ۾ پروگرام ڪيئن ڪجي؟ توهان گهڻو ڪري اڳ ۾ ئي ڄاڻو ٿا ته اسان اهڙي چونڊ ڪندا آهيون if-then ۽ if-then-else تعميرات استعمال ڪندي .
if (turn_left) {
    System.out.println(«Коня потеряешь»);
}
if (turn_right) {
    System.out.println(“Знания обретёшь”);
}
else
    System.out.println(“Так и будешь стоять?);
ڇا جيڪڏهن اهڙا ٻه ٽريڪ نه آهن، پر 10؟ ڇا ھڪڙو رستو آھي "ساڄي ڏانھن"، "ٿورڙو کاٻي طرف"، "ٿورو وڌيڪ کاٻي ڏانھن" وغيره، 10 ٽڪرن جي مقدار ۾؟ تصور ڪريو ته توهان جو if-then-else ڪوڊ هن نسخي ۾ ڪيئن وڌندو!
if (вариант1)
{}
else if (вариант2)
{}else if (вариантN).
تنهن ڪري، توهان وٽ شرطن جو هڪ ڪانٽو ناهي، پر ڪيترائي، چئو، 10 (هتي اهم شيء اها آهي ته ڪانٽن جو تعداد محدود آهي). اهڙين حالتن لاء، اتي هڪ خاص چونڊ آپريٽر آهي - switch case java .
switch (ВыражениеДляВыбора) {
           case  (Значение1):
               Код1;
               break;
           case (Значение2):
               Код2;
               break;
...
           case (ЗначениеN):
               КодN;
               break;
           default:
               КодВыбораПоУмолчанию;
               break;
       }
بيان ۾ عملدرآمد جو حڪم هن ريت آهي:
  • SelectionExpression جو جائزو ورتو ويو آهي. اڳيون، سوئچ بيان جي نتيجي واري اظهار کي ايندڙ قدر سان موازنہ ڪري ٿو (جي ترتيب ڏنل ترتيب ۾).
  • جيڪڏهن SelectExpression Value سان ملندو آهي، ته پوءِ ڪولن پٺيان ڪوڊ لڳايو ويندو آهي.
  • جيڪڏهن وقفي جي تعمير جو سامنا ڪيو ويو آهي ، پوء ڪنٽرول سوئچ ڪمانڊ کان ٻاهر منتقل ڪيو ويندو آهي.
  • جيڪڏهن ExpressionForSelection ۽ Values ​​جي وچ ۾ ڪوبه ميلاپ نه ملي ته پوءِ ڪنٽرول DefaultSelectionCode ڏانهن منتقل ڪيو ويندو.
اهم نقطا
  • جاوا ۾ سوئچ چونڊ بيان لاءِ SelectionExpression قسم ھيٺين مان ھڪڙو ھجڻ گھرجي.

    • بائيٽ ، مختصر ، چار ، انٽ .
    • انهن جا لفافي آهن بائيٽ ، شارٽ ، ڪرڪٽر ، انٽيجر .
    • اسٽرنگ (جاوا 7 کان وٺي).
    • ڳڻپ ( اينوم ).
  • ڊفالٽ بلاڪ اختياري آهي، پوءِ جيڪڏهن SelectionExpression ۽ Values ​​ملن نه ٿا، ته ڪو عمل نه ڪيو ويندو.
  • وقفي اختياري آهي؛ جيڪڏهن اهو موجود نه آهي، ڪوڊ جاري رهندو (بلاڪ جي صورت ۾ قدرن جي وڌيڪ مقابلي کي نظر انداز ڪندي) جيستائين پهريون breakسوئچ بيان سامهون نه اچي يا آخر تائين.
  • جيڪڏهن اهو ضروري آهي ته هڪ ئي ڪوڊ کي ڪيترن ئي چونڊ اختيارن لاءِ عمل ڪيو وڃي، نقل ڪرڻ کان بچڻ لاءِ اسين ان جي سامهون ڪيترن ئي لاڳاپيل قدرن کي لڳاتار ڪيس بلاڪ ۾ ظاهر ڪندا آهيون .

اچو ته جاوا ۾ سوئچ بيان استعمال ڪرڻ جي مشق تي وڃو

پريشان نه ٿيو، اسان نظريي سان ڪيو آهي، ۽ وڌيڪ مثالن کان پوء سڀ ڪجهه واضح ٿي ويندو. سو اچو ته شروع ڪريون. اچو ته نظام شمسي جي سيارن بابت فلڪيات مان هڪ مثال ڏسون. جديد بين الاقوامي ضابطن جي مطابق، اسان پلوٽو کي خارج ڪنداسين (ان جي مدار جي خاصيتن جي ڪري). ياد رکو ته اسان جا سيارا سج کان هيٺ ڏنل تسلسل ۾ واقع آهن: عطارد، وينس، ڌرتي، مريخ، مشتري، زحل، يورينس ۽ نيپچون. اچو ته هڪ جاوا ميٿڊ ٺاهيون جيڪو انپٽ جي طور تي سيريل نمبر حاصل ڪري ڌرتيءَ جو سيريل نمبر (سج کان فاصلي جي نسبت سان) ۽ آئوٽ پٽ جي طور تي اهو هن ڌرتيءَ جي ماحول جي مکيه جوڙجڪ کي لسٽ جي صورت ۾ ڏئي ٿو <String> . مان توهان کي ياد ڏياران ٿو ته ڪجهه سيٽن جو ماحول هڪجهڙائي آهي. اهڙيءَ ريت وينس ۽ مريخ ۾ گهڻو ڪري ڪاربان ڊاءِ آڪسائيڊ آهي، مشتري ۽ زحل هائيڊروجن ۽ هيليم تي مشتمل آهي ۽ يورينس ۽ نيپچون ۾ گيس جي آخري جوڙي کان علاوه ميٿين به آهي. اسان جي فنڪشن:
public static List<String> getPlanetAtmosphere(int seqNumberFromSun) {
    List<String> result = new ArrayList<>();
    switch (seqNumberFromSun) {
        case 1: result.add("No Atmosphere");
            break;
        case 2:
        case 4: result.add("Carbon dioxide");
            break;
        case 3: result.add("Carbon dioxide");
            result.add("Nitrogen");
            result.add("Oxygen");
            break;
        case 5:
        case 6: result.add("Hydrogen");
            result.add("Helium");
            break;
        case 7:
        case 8: result.add("Methane");
            result.add("Hydrogen");
            result.add("Helium");
            break;
        default:
            break;
    }
    return result;
}
مهرباني ڪري نوٽ ڪريو: اسان ساڳئي ڪوڊ کي سيٽن سان گڏ هڪجهڙائي واري ماحول سان گڏ ڪيو. ۽ اسان اهو ڪيو لڳاتار ڪيس تعميرات استعمال ڪندي . تنهن ڪري، جيڪڏهن اسان چاهيون ٿا ته اسان جي گهر جي ڌرتيء جي ماحول جي جوڙجڪ کي، اسان کي اسان جي طريقي سان سڏين ٿا پيراميٽر 3:
getPlanetAtmosphere(3).
System.out.println(getPlanetAtmosphere(3)) вернет нам [Углекислый газ, Азот, Кислород].
بريڪ سان تجربو ڪريو ڇا ٿيندو جيڪڏھن اسان سڀ بريڪ بيانن کي ختم ڪريون ؟ اچو ته عملي طور تي ڪوشش ڪريون:
public static List<String> getPlanetAtmosphere(int seqNumberFromSun) {
    List<String> result = new ArrayList<>();
    switch (seqNumberFromSun) {
        case 1: result.add("No Atmosphere");
        case 2:
        case 4: result.add("Carbon dioxide");
        case 3: result.add("Carbon dioxide");
            result.add("Nitrogen");
            result.add("Oxygen");
        case 5:
        case 6: result.add("Hydrogen");
            result.add("Helium");
        case 7:
        case 8: result.add("Methane");
            result.add("Hydrogen");
            result.add("Helium");
        default:
    }
    return result;
}
جيڪڏهن اسان طريقي جي نتيجن کي ڇپائي سگهون ٿا System.out.println(getPlanetAtmosphere(3))، ته پوء اسان جي گهر سيارو زندگي لاء ايترو مناسب نه هوندو. يا مناسب؟ پاڻ فيصلو ڪريو: [ڪاربن ڊاءِ آڪسائيڊ، نائٽروجن، آڪسيجن، هائيڊروجن، هيليم، ميٿين، هائيڊروجن، هيليم]، ائين ڇو ٿيو؟ پروگرام پهرين ميچ کان پوء ۽ سوئچ بلاڪ جي آخر تائين سڀني ڪيسن تي عمل ڪيو.

وڌ ۾ وڌ اصلاح جو وقفو

نوٽ ڪريو ته اسان طريقي کي بهتر ڪري سگھون ٿا مختلف ترتيبن سان وقفي جي هدايتن ۽ چونڊ اختيارن سان
public static List<String> getPlanetAtmosphere(int seqNumberFromSun) {
    List<String> result = new ArrayList<>();
    switch (seqNumberFromSun) {
        case 1: result.add("No Atmosphere");
                break;
        case 3: result.add("Nitrogen");
                result.add("Oxygen");
        case 2:
        case 4: result.add("Carbon dioxide");
                break;
        case 7:
        case 8: result.add("Methane");
        case 5:
        case 6: result.add("Hydrogen");
                result.add("Helium");
    }
     return result;
}
ننڍو لڳي ٿو، نه؟ اسان ڪيس آرڊر سان راند ڪندي بيانن جو ڪل تعداد گھٽائي ڇڏيو ۽ ٻيهر منظم ڪيو. ھاڻي ھر قسم جي گيس کي لسٽ ۾ شامل ڪيو ويو آھي صرف ڪوڊ جي ھڪڙي لائن ۾. طريقي جي آخري مثال جي لسٽنگ صرف ڪم کي ظاهر ڪرڻ لاء ڏيکاريل آهي؛ ان کي اهڙي انداز ۾ لکڻ جي سفارش نه ڪئي وئي آهي . جيڪڏهن ليکڪ (۽ اڃا به وڌيڪ ٽئين پارٽي جي پروگرامر) ساڳئي ڪوڊ جي ان کي برقرار رکڻو پوندو، پوء اهو منطق کي بحال ڪرڻ تمام ڏکيو ٿيندو چونڊ بلاڪ جي ٺهڻ ۽ جاوا سوئچ بيان لاء قابل عمل ڪوڊ.

جيڪڏھن کان فرق

if ۽ switch بيانن جي خارجي هڪجهڙائي کي نظر ۾ رکندي ، اهو نه وساريو ته هڪ کان وڌيڪ پسند آپريٽر سوئچ هڪ مخصوص VALUE تي عمل جي اختيارن جي چونڊ کي بيس ڪري ٿو، جڏهن ته if ۾. ڪنهن به منطقي اظهار ٿي سگهي ٿو. هن حقيقت کي اڪائونٽ ۾ وٺو جڏهن توهان جو ڪوڊ ٺاهيو. اچو ته جاوا جي مختلف ورزن ۾ سوئچ لاءِ جدت تي وڌيڪ ويجھو نظر رکون.

جاوا 7 ۾ تبديل ڪريو

جاوا 7 کان اڳ، بائيٽ، شارٽ، چار ۽ int پرائمري استعمال ڪري سگھجن ٿا ھڪڙي سوئچ لاءِ قدر جي طور تي. مٿي ڏنل فهرستن جي بنيادي قسمن جي اينم ۽ لفافي لاء پڻ سپورٽ هئي: ڪردار، بائيٽ، مختصر، ۽ انٽيجر. پر اڪثر اسان کي جاوا سوئچ اسٽرنگ جي قيمت ڳولڻ جي ضرورت آهي! اھو اھو آھي جيڪو جاوا 6 ۾ نظر ايندو:
DayOfWeek day = DayOfWeek.fromValue("Thursday");

switch (day) {
  case MONDAY:
     System.out.println("Today is windy !");
     break;
  case THURSDAY:
     System.out.println("Today is sunny !");
     break;
  case WEDNESDAY:
     System.out.println("Today is rainy!");
     break;
  default:
     System.out.println("Oooops, something wrong !");
۽ enum:
public enum DayOfWeek {
  MONDAY("Monday"),
  THURSDAY("Thursday"),
  WEDNESDAY("Wednesday"),
  NOT_FOUND("Not found");

  private final String value;

  DayOfWeek(final String value) {
     this.value = value;
  }

  public static DayOfWeek fromValue(String value) {
     for (final DayOfWeek dayOfWeek : values()) {
        if (dayOfWeek.value.equalsIgnoreCase(value)) {
           return dayOfWeek;
        }
     }
     return NOT_FOUND;
  }
}
پر جاوا 7 سان شروع ڪندي، اهو ممڪن هو ته اسٽرنگ قسم کي استعمال ڪرڻ لاء قدر جي طور تي سوئچ لاء:
String day = "Thursday";

switch (day) {
  case "Monday":
     System.out.println("Today is windy !");
     break;
  case "Thursday":
     System.out.println("Today is sunny !");
     break;
  case "Wednesday":
     System.out.println("Today is rainy!");
     break;
  default:
     System.out.println("Oooops, something wrong !");
}
نون خاصيتن جي باوجود، اينم استعمال ڪرڻ جو طريقو وڌيڪ لچڪدار آهي ۽ استعمال لاء سفارش ڪئي وئي آهي: اسان هن اينيم کي ڪيترائي ڀيرا ٻيهر استعمال ڪري سگهون ٿا.

جاوا 12 ۾ تبديل ڪريو

جاوا 12 کي بهتر ڪيو ويو آھي سوئچ ايڪسپريسز لاءِ نمونن جي ميلاپ لاءِ. جيڪڏهن اسان سوئچ استعمال ڪريون ٿا جيئن مٿي ڏنل مثال ۾، ڪجهه متغير جي قيمت مقرر ڪرڻ لاء، اسان کي قيمت کي ڳڻپ ڪرڻو پوندو ۽ ان کي ڏنل متغير کي تفويض ڪرڻو پوندو، ۽ پوء وقف استعمال ڪريو:
int count = 2;
int value;
switch (count) {
  case 1:
     value = 12;
     break;
  case 2:
     value = 32;
     break;
  case 3:
     value = 52;
     break;
  default:
     value = 0;
}
پر جاوا 12 جي صلاحيتن جي مهرباني، اسان هن اظهار کي هن ريت لکي سگهون ٿا:
int value = switch (count) {
  case 1:
     break 12;
  case 2:
     break 32;
  case 3:
     break 52;
  default:
     break 0;
};
اچو ته ٿورڙي تبديلين تي وڃو:
  1. جيڪڏهن اڳ ۾ اسان ڪيس بلاڪ جي اندر هڪ متغير قيمت مقرر ڪيو، ڇو ته سوئچ بيان پاڻ کي ڪجهه به واپس نه ڪري سگهيو، هاڻي اسان وٽ هڪ موقعو آهي، ۽ اسان سڌو سنئون استعمال ڪندي قيمت واپس آڻينداسين.

  2. اڳي، اسان وٽ برڪ جي ساڄي طرف ڪجھ به نه ٿي سگھي، پر ھاڻي اسان ان کي واپسي جي بيان جي طور تي استعمال ڪندا آھيون اسان جي سوئچ جي قيمت کي واپس ڪرڻ لاء. ڪالون جا نشان داخل ٿيڻ واري نقطي کي بيان ڪن ٿا بلاڪ ۾. اهو آهي، انهي نقطي کان هيٺ ڏنل سڀني ڪوڊ جو عمل شروع ٿئي ٿو، جيتوڻيڪ جڏهن ٻيو ليبل سامهون اچي ٿو.

    نتيجو هڪ نشان کان آخر تائين منتقلي آهي، جنهن کي زوال جي ذريعي پڻ سڏيو ويندو آهي.

جاوا ۾ بيان تبديل ڪريو - 2اهڙي پاس کي مڪمل ڪرڻ لاء، توهان کي لازمي طور تي سڀني عناصرن مان مڪمل طور تي وڃڻ گهرجي، يا وقف يا واپسي استعمال ڪريو. جاوا 12 ۾ جدت اسان کي ليمبڊا آپريٽر استعمال ڪرڻ جي صلاحيت ڏئي ٿي، جنهن جي نتيجي ۾ يقيني بڻائي ٿي ته صرف ان جي ساڄي پاسي واري ڪوڊ تي عمل ڪيو ويندو. بغير ڪنهن "ناڪامي" جي. هن معاملي ۾ اڳوڻو مثال ڇا نظر ايندو:
int count = 2;
int value = switch (count) {
  case 1 -> 12;
  case 2 -> 32;
  case 3 -> 52;
  default -> 0;
};
ڪوڊ تمام آسان ٿي چڪو آهي، ڇا اهو ناهي؟ ۽ هڪ ٻي شيء: lambda آپريٽر پڻ ڪم ڪري سگهي ٿو هڪ عام اينالاگ ڪولن جي، جنهن کان پوء اتي ڪجهه عملن سان مڪمل بلاڪ آهي:
int count = 2;
int value = switch (count) {
  case 1 -> {
     //some computational operations...
     break 12;
  }
  case 2 -> {
     //some computational operations...
     break 32;
  }
  case 3 -> {
     //some computational operations...
     break 52;
  }
  default -> {
     //some computational operations...
     break 0;
  }
};
خير، جيڪڏهن ڪجهه ڪيسن لاءِ واپسي جي قيمت ساڳي آهي؟ اهو ظاهر ٿيو ته اسان وٽ اصل ۾ ڪجهه مختلف قدرن لاءِ ساڳيا ڪيس آهن. هتي اهو آهي ته اهو ڪيئن مختصر ٿي سگهي ٿو جاوا 12 ۾ نوان خاصيتون استعمال ڪندي:
int count = 2;
int value = switch (count) {
  case 1, 3, 5 -> 12;
  case 2, 4, 6 -> 52;
  default -> 0;
};

جاوا 13 ۾ تبديل ڪريو

جاوا 13 ۾، هڪ سوئچ واپسي جو طريقو تبديل ٿي چڪو آهي. جيڪڏهن جاوا 12 ۾ اسان بريڪ کان پوءِ واپسي جي قيمت لکي، جيڪا اسان لاءِ سوئچ بلاڪ لاءِ واپسي جي طور تي ڪم ڪيو، هاڻي اسان لفظ yield استعمال ڪندي قيمت واپس ڪنداسين . اچو ته ڏسون:
int value = switch (count) {
  case 1:
     yield 12;
  case 2:
     yield 32;
  case 3:
     yield 52;
  default:
     yield 0;
};
ساڳئي وقت، جاوا 12 ۾ لکيل ڪوڊ بريڪ ٽو ريٽرن استعمال ڪندي گڏ نه ٿيندو (( جاوا ۾ بيان تبديل ڪريو - 3بريڪ استعمال ڪيو ويندو، پر حالتن ۾ جتي اسان کي ڪجهه به واپس ڪرڻ جي ضرورت ناهي.

ڪُل

  • ڪيس جو بيان استعمال ڪريو جڏھن ٻن کان وڌيڪ شاخون آھن ته توھان جي ڪوڊ کي ڪلٽر ڪرڻ کان بچڻ لاءِ if structures.
  • هر برانچ جي منطقي بلاڪ کي ختم ڪرڻ نه وساريو جيڪو مخصوص قدر سان لاڳاپيل آهي (ڪيس بلاڪ) هڪ وقفي ڪال سان .
  • ڪجھ ابتدائي قسمن کان علاوه، سوئچ بيان پڻ استعمال ڪري سگھي ٿو Enum ۽ String قسمن کي اظهار طور .
  • ڊفالٽ بلاڪ کي ياد رکو - ان کي استعمال ڪريو غير منصوبابندي ڪيل چونڊ قدرن کي سنڀالڻ لاءِ.
  • ڪارڪردگي کي بهتر ڪرڻ لاء، ڪوڊ شاخن کي منتقل ڪريو سڀ کان وڌيڪ عام انتخابن سان سوئچ بلاڪ جي شروعات ۾.
  • ڪيس جي چونڊ بلاڪ جي آخر ۾ وقفي کي هٽائڻ سان "اصلاح" سان گڏ نه وڃو - اهڙي ڪوڊ کي سمجهڻ ڏکيو آهي، ۽ نتيجي طور، ان جي ترقي دوران برقرار رکڻ ڏکيو آهي.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION