সেখানে কেবল "এক প্রকার" বিবৃতি আছে। অন্যটি শর্তাধীন অভিব্যক্তি। কোনটি আরও ভাল পারফরম্যান্স করবে: তারা একই বাইটোকোডে সংকলন করতে পারে এবং আমি তাদের অনুরূপ আচরণ করার প্রত্যাশা করব - বা এতটা কাছাকাছি যে আপনি অবশ্যই পারফরম্যান্সের দিক থেকে অন্যটির চেয়ে একটি বেছে নিতে চান না।
কখনও কখনও একটি if
বিবৃতি আরও পঠনযোগ্য হবে, কখনও কখনও শর্তসাপেক্ষ অপারেটর আরও পঠনযোগ্য হবে। বিশেষত, আমি যখন দুটি অপারেশনগুলি সহজ এবং পার্শ্ব-প্রতিক্রিয়ামুক্ত শর্তসাপেক্ষ অপারেটরটি ব্যবহার করার পরামর্শ দেব, যখন দুটি শাখার মূল উদ্দেশ্য যদি তাদের পার্শ্ব প্রতিক্রিয়া হয় তবে আমি সম্ভবত একটি if
বিবৃতি ব্যবহার করব ।
এখানে একটি নমুনা প্রোগ্রাম এবং বাইটকোড:
public class Test {
public static void main(String[] args) {
int x;
if (args.length > 0) {
x = 1;
} else {
x = 2;
}
}
public static void main2(String[] args) {
int x = (args.length > 0) ? 1 : 2;
}
}
বাইটকোড এর সাথে পচে গেছে javap -c Test
:
public class Test extends java.lang.Object {
public Test();
Code:
0: aload_0
1: invokespecial #1
4: return
public static void main(java.lang.String[]
Code:
0: aload_0
1: arraylength
2: ifle 10
5: iconst_1
6: istore_1
7: goto 12
10: iconst_2
11: istore_1
12: return
public static void main2(java.lang.String[
Code:
0: aload_0
1: arraylength
2: ifle 9
5: iconst_1
6: goto 10
9: iconst_2
10: istore_1
11: return
}
যেমন আপনি দেখতে পাচ্ছেন, এখানে বাইটোকোডে কিছুটা পার্থক্য রয়েছে - istore_1
ব্রেন্সের মধ্যে ঘটনাটি ঘটে কিনা বা না (আমার আগের বিশাল-ত্রুটিযুক্ত প্রয়াসের বিপরীতে :) তবে জেআইটিআর যদি আলাদা নেটিভ কোড দিয়ে শেষ করে তবে আমি খুব অবাক হতাম।