জাভাতে গোটো কীওয়ার্ডের বিকল্প ফাংশনটি কী ?
যেহেতু জাভাতে গোটো নেই।
জাভাতে গোটো কীওয়ার্ডের বিকল্প ফাংশনটি কী ?
যেহেতু জাভাতে গোটো নেই।
উত্তর:
আপনি লেবেলযুক্ত BREAK স্টেটমেন্টটি ব্যবহার করতে পারেন :
search:
for (i = 0; i < arrayOfInts.length; i++) {
for (j = 0; j < arrayOfInts[i].length; j++) {
if (arrayOfInts[i][j] == searchfor) {
foundIt = true;
break search;
}
}
}
তবে সঠিকভাবে ডিজাইন করা কোডে আপনার গোট কার্যকারিতা থাকা উচিত নয়।
goto
জাভাতে ধারণার সাথে সরাসরি কোনও সমতুল্য নেই । কয়েকটি কনস্ট্রাকশন রয়েছে যা আপনাকে ক্লাসিকের সাথে করতে পারেন এমন কিছু কাজ করার অনুমতি দেয় goto
।
break
এবংcontinue
বিবৃতি আপনি একটি লুপ বা সুইচ বিবৃতিতে একটি ব্লক আউট তিড়িং লাফ করার অনুমতি দেয়।break <label>
আপনাকে একটি নির্ধারিত পদ্ধতির (বা আরম্ভকারী ব্লক) এর মধ্যে কোনও স্তরে একটি স্বেচ্ছাসেবী যৌগিক বিবৃতি ছাড়িয়ে যেতে দেয়।continue <label>
অভ্যন্তরীণ লুপ থেকে বাইরের লুপের পরবর্তী পুনরাবৃত্তিটি চালিয়ে যেতে পারেন ।return
।এই জাভা কনস্ট্রাক্টসের কোনওটিই আপনাকে পূর্বের শাখায় বা কোডের কোনও বিন্দুতে বর্তমান বিবৃতি হিসাবে নীড়ের একই স্তরে অনুমতি দেয় না। এরা সবাই এক বা একাধিক বাসা বাঁধার (স্কোপ) স্তর ছাড়ায় এবং তারা সবাই (বাদে continue
) নীচে নেমে লাফ দেয়। এই বিধিনিষেধটি পুরানো বেসিক, ফরট্রান এবং কোবোল কোড 2 এর অন্তর্নিহিত গোটো "স্প্যাগেটি কোড" সিন্ড্রোম এড়াতে সহায়তা করে ।
1- ব্যতিক্রমগুলির সবচেয়ে ব্যয়বহুল অংশ ব্যতিক্রম বস্তুর প্রকৃত সৃষ্টি এবং এর স্ট্যাকট্রেস। আপনি যদি সত্যিই, "স্বাভাবিক" প্রবাহ নিয়ন্ত্রণের জন্য ব্যতিক্রম হ্যান্ডলিংটি ব্যবহার করতে চান তবে আপনি হয় ব্যতিক্রমী বিষয়টিকে পূর্বনির্ধারণ / পুনঃব্যবহার করতে পারেন বা একটি কাস্টম ব্যতিক্রম শ্রেণি তৈরি করতে পারেন যা fillInStackTrace()
পদ্ধতিটিকে ওভাররাইড করে । ক্ষতিটি হ'ল ব্যতিক্রমের printStackTrace()
পদ্ধতিগুলি আপনাকে দরকারী তথ্য দেয় না ... আপনার যদি কখনও তাদের কল করার প্রয়োজন হয়।
2 - স্প্যাগেটি কোড সিন্ড্রোম স্ট্রাকচার্ড প্রোগ্রামিং পদ্ধতির উত্সাহ তৈরি করেছে , যেখানে আপনি উপলভ্য ভাষা নির্মাণের ব্যবহার সীমিত করেছেন। এটি বেসিক , ফোর্টরান এবং সিওবিএল-এ প্রয়োগ করা যেতে পারে তবে এটির যত্ন এবং শৃঙ্খলার প্রয়োজন। goto
সম্পূর্ণরূপে পরিত্রাণ পাওয়া একটি বাস্তববাদী আরও ভাল সমাধান ছিল। আপনি যদি এটি কোনও ভাষায় রাখেন তবে সবসময় এমন কিছু ক্লাউন থাকে যা এটির অপব্যবহার করবে।
কেবল মজাদার জন্য, এখানে জাভাতে একটি GOTO বাস্তবায়ন দেওয়া আছে।
উদাহরণ:
1 public class GotoDemo { 2 public static void main(String[] args) { 3 int i = 3; 4 System.out.println(i); 5 i = i - 1; 6 if (i >= 0) { 7 GotoFactory.getSharedInstance().getGoto().go(4); 8 } 9 10 try { 11 System.out.print("Hell"); 12 if (Math.random() > 0) throw new Exception(); 13 System.out.println("World!"); 14 } catch (Exception e) { 15 System.out.print("o "); 16 GotoFactory.getSharedInstance().getGoto().go(13); 17 } 18 } 19 }
এটি চালানো:
$ java -cp bin:asm-3.1.jar GotoClassLoader GotoDemo 3 2 1 0 Hello World!
আমার কি "এটি ব্যবহার করবেন না!" যুক্ত করার দরকার আছে?
Math.random()
0 ফিরতে পারে It এটি> =
HellWorld!o World!
আউটপুট খুঁজে পেতে পারে এবং হতবাক হয়ে যায়। #AllBugsAreFeatures
কিছু মন্তব্যকারী এবং downvoters ভাবেন যে এই নয় এতে যান , থেকে উত্পন্ন বাইটকোড জাভা বিবৃতি নিচে সত্যিই দাড়ায় যে এই বিবৃতি সত্যিই প্রকাশ করবেন এতে যান শব্দার্থবিদ্যা।
বিশেষত, do {...} while(true);
দ্বিতীয় উদাহরণের লুপটি লুপ অবস্থার মূল্যায়ন না করার জন্য জাভা সংকলকরা অনুকূলিত করেছেন।
label: {
// do stuff
if (check) break label;
// do more stuff
}
বাইটকোডে:
2 iload_1 [check]
3 ifeq 6 // Jumping forward
6 ..
label: do {
// do stuff
if (check) continue label;
// do more stuff
break label;
} while(true);
বাইটকোডে:
2 iload_1 [check]
3 ifeq 9
6 goto 2 // Jumping backward
9 ..
continue label
পিছনে ঝাঁপ দাও
// do stuff
// do more stuff
আগ্রহের বক্তব্য হয় এবং তা হয় তবে পিছনের দিকে ঝাঁপিয়ে পড়ার continue label
"প্রভাব আছে" ( while(true)
অবশ্যই বক্তব্যের কারণে )। আমি জানতাম না যে এটি এমন একটি সুনির্দিষ্ট প্রশ্ন, যদিও ...
while(true)
একটি মধ্যে কম্পাইলার দ্বারা অনুবাদ করা হয়goto
বাইটকোড অপারেশন। true
ধ্রুবক আক্ষরিক হিসাবে , সংকলকটি এই অপটিমাইজেশনটি করতে পারে এবং কোনও কিছুর মূল্যায়ন করতে হবে না। সুতরাং, আমার উদাহরণটি পিছনের দিকে ঝাঁপিয়ে পড়ে সত্যিই একটি গোটো ...
আপনি যদি সত্যিই গোটো স্টেটমেন্টগুলির মতো কিছু চান তবে আপনি সর্বদা নামকৃত ব্লকগুলিকে ভাঙতে চেষ্টা করতে পারেন।
লেবেলটি ভাঙতে আপনাকে ব্লকের ক্ষেত্রের মধ্যে থাকতে হবে:
namedBlock: {
if (j==2) {
// this will take you to the label above
break namedBlock;
}
}
আপনার কেন গোটো এড়ানো উচিত তা নিয়ে আমি আপনাকে বক্তৃতা দেব না - আমি ধরে নিচ্ছি যে এর উত্তর ইতিমধ্যে আপনি জানেন।
public class TestLabel {
enum Label{LABEL1, LABEL2, LABEL3, LABEL4}
/**
* @param args
*/
public static void main(String[] args) {
Label label = Label.LABEL1;
while(true) {
switch(label){
case LABEL1:
print(label);
case LABEL2:
print(label);
label = Label.LABEL4;
continue;
case LABEL3:
print(label);
label = Label.LABEL1;
break;
case LABEL4:
print(label);
label = Label.LABEL3;
continue;
}
break;
}
}
public final static void print(Label label){
System.out.println(label);
}
স্টিফেনসি লিখেছেন:
দুটি কনস্ট্রাক্টশন রয়েছে যা আপনাকে ক্লাসিক গোটো দিয়ে করতে পারেন এমন কিছু কাজ করার অনুমতি দেয়।
আরো একটা...
ম্যাট ওল্ফ লিখেছেন:
লোকেরা সর্বদা গোটো ব্যবহার না করার বিষয়ে কথা বলে, তবে আমি মনে করি সত্যিকারের ভাল ব্যবহারের এমন একটি বিশ্বসুলভ কেস রয়েছে যা বেশ সুপরিচিত এবং ব্যবহৃত ... এটি হ'ল কোনও ফাংশন থেকে ফেরার আগে কিছু কোড কার্যকর করা নিশ্চিত করে .. সাধারণত এটি প্রকাশিত হয় লকগুলি বা কী না, তবে আমার ক্ষেত্রে আমি ফিরে আসার আগে একটি বিরতিতে সরাসরি যেতে সক্ষম হতে চাই যাতে আমি বাধ্যতামূলক ক্লিনআপ করতে পারি।
try {
// do stuff
return result; // or break, etc.
}
finally {
// clean up before actually returning, even though the order looks wrong.
}
http://docs.oracle.com/javase/tutorial/essential/exception/finally.html
চেষ্টা ব্লকটি যখন প্রস্থান করে তখন অবশেষে ব্লকটি সর্বদা কার্যকর করে। এটি নিশ্চিত করে যে কোনও অপ্রত্যাশিত ব্যতিক্রম ঘটলে অবশেষে ব্লকটি কার্যকর করা হয়। তবে শেষ পর্যন্ত কেবল ব্যতিক্রম হ্যান্ডলিংয়ের চেয়ে বেশি কার্যকর - এটি প্রোগ্রামারটিকে ক্লিনআপ কোডটি দুর্ঘটনাক্রমে কোনও রিটার্ন, চালিয়ে যাওয়া বা বিরতিতে ছাড়িয়ে এড়াতে দেয় allows কোনও ব্যতিক্রম প্রত্যাশিত না হওয়া সত্ত্বেও, শেষ অবধি ক্লিনআপ কোড রাখা সর্বদা একটি ভাল অনুশীলন।
অবশেষে এর সাথে সম্পর্কিত নিরীহ সাক্ষাত্কারের প্রশ্নটি হ'ল: আপনি যদি চেষ্টা {} ব্লক থেকে ফিরে আসেন, তবে আপনার শেষ অবধি return in এও ফিরে আসে, কোন মানটি ফিরে আসে?
return
finally
সবচেয়ে সহজ:
int label = 0;
loop:while(true) {
switch(state) {
case 0:
// Some code
state = 5;
break;
case 2:
// Some code
state = 4;
break;
...
default:
break loop;
}
}
নীচের কোড ব্যবহার করে দেখুন। এটা আমার জন্য কাজ করে.
for (int iTaksa = 1; iTaksa <=8; iTaksa++) { // 'Count 8 Loop is 8 Taksa
strTaksaStringStar[iCountTaksa] = strTaksaStringCount[iTaksa];
LabelEndTaksa_Exit : {
if (iCountTaksa == 1) { //If count is 6 then next it's 2
iCountTaksa = 2;
break LabelEndTaksa_Exit;
}
if (iCountTaksa == 2) { //If count is 2 then next it's 3
iCountTaksa = 3;
break LabelEndTaksa_Exit;
}
if (iCountTaksa == 3) { //If count is 3 then next it's 4
iCountTaksa = 4;
break LabelEndTaksa_Exit;
}
if (iCountTaksa == 4) { //If count is 4 then next it's 7
iCountTaksa = 7;
break LabelEndTaksa_Exit;
}
if (iCountTaksa == 7) { //If count is 7 then next it's 5
iCountTaksa = 5;
break LabelEndTaksa_Exit;
}
if (iCountTaksa == 5) { //If count is 5 then next it's 8
iCountTaksa = 8;
break LabelEndTaksa_Exit;
}
if (iCountTaksa == 8) { //If count is 8 then next it's 6
iCountTaksa = 6;
break LabelEndTaksa_Exit;
}
if (iCountTaksa == 6) { //If count is 6 then loop 1 as 1 2 3 4 7 5 8 6 --> 1
iCountTaksa = 1;
break LabelEndTaksa_Exit;
}
} //LabelEndTaksa_Exit : {
} // "for (int iTaksa = 1; iTaksa <=8; iTaksa++) {"
জাভাতে নেই goto
, কারণ এটি কোডটি কাঠামোগত ও কাঠামোটি পড়ার জন্য অস্পষ্ট করে তোলে । যাইহোক, যদি আপনি ব্যবহার করতে পারেন break
এবং continue
যেমন সভ্য আকারে এতে যান তার সমস্যা ছাড়াই।
ahead: {
System.out.println("Before break");
break ahead;
System.out.println("After Break"); // This won't execute
}
// After a line break ahead, the code flow starts from here, after the ahead block
System.out.println("After ahead");
আউটপুট :
Before Break
After ahead
before: {
System.out.println("Continue");
continue before;
}
এটি একটি পরিণাম ডেকে আনবে অসীম লুপ প্রত্যেক সময় লাইন হিসেবে continue before
মৃত্যুদন্ড কার্যকর করা হয়, কোড প্রবাহ থেকে আবার শুরু হবেbefore
।
goto
পাওয়া যায় তবে আপনি কি ধরণের কোড লিখতে পারেন ? আমি মনে করি যে এতে আরও গুরুত্বপূর্ণ বিষয় রয়েছে।