জাভাতে গেটো স্টেটমেন্টের বিকল্প


84

জাভাতে গোটো কীওয়ার্ডের বিকল্প ফাংশনটি কী ?

যেহেতু জাভাতে গোটো নেই।


10
@ হারিগম: আপনি জাভাতে যদি goto পাওয়া যায় তবে আপনি কি ধরণের কোড লিখতে পারেন ? আমি মনে করি যে এতে আরও গুরুত্বপূর্ণ বিষয় রয়েছে।
polygenelubricants

4
@ হরিগম: আমি দ্বিতীয় পলিজনিন, আপনার প্রোগ্রামটি কেন গোটো দরকার তা অন্তর্ভুক্ত করার জন্য আপনি কি আপনার প্রশ্নটি আপডেট করতে পারেন?
প্রত্যেকে

13
লোকেরা সর্বদা গোটো ব্যবহার না করার বিষয়ে কথা বলে, তবে আমি মনে করি সত্যিকারের ভাল ব্যবহারের এমন একটি বিশ্বব্যাপী কেস রয়েছে যা বেশ সুপরিচিত এবং ব্যবহৃত .. লকগুলি বা কী না, তবে আমার ক্ষেত্রে আমি ফিরে আসার আগে একটি বিরতিতে সরাসরি যেতে সক্ষম হতে চাই যাতে আমি বাধ্যতামূলক ক্লিনআপ করতে পারি। অবশ্যই পুরো জায়গা জুড়ে গোটো দ্বারা আবদ্ধ একটি প্রোগ্রাম ভয়ঙ্কর হবে, তবে পদ্ধতি সংস্থাগুলির মধ্যে সীমাবদ্ধ থাকলে আপনি যতক্ষণ না কোনও সম্মেলন অনুসরণ করেন ততক্ষণ খারাপ মনে হয় না (কেবলমাত্র ফাংশনগুলির শেষ দিকে ঝাঁপুন, কখনই ব্যাকআপ নেই)
ম্যাট ওল্ফ

7
আপনি ভাল সংস্থায় আছেন লিনাস টোরভাল্ডস আবেগের সাথে গোটো কার্নেলট্রপ.অর্গ / নোড / 553 রক্ষা করেছেন । নিঃসন্দেহে প্রকল্প মুদ্রা থেকে সবচেয়ে উল্লেখযোগ্য বাদ।
ফ্লেচ

7
@ ম্যাটওয়াল্ফ এই উদাহরণটিতে কাজটি শেষ পর্যন্ত চেষ্টা করে না?
আন্দ্রেস রিফ্রিও

উত্তর:


84

আপনি লেবেলযুক্ত 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;
            }
        }
    }

তবে সঠিকভাবে ডিজাইন করা কোডে আপনার গোট কার্যকারিতা থাকা উচিত নয়।


89
এটি আপনাকে ধর্ষকদের হাত থেকে বাঁচায় না!
ববি

25
সঠিকভাবে ডিজাইন করা কোডগুলিতে আপনার কেন কার্যকারিতা দরকার নেই?
রজারমশরুম

13
কারণ সমাবেশই কেবল এটির ব্যবহারের অনুমতি দেয়। কিছুক্ষণ বিবৃতি, একটি বিবৃতি, একটি করণীয়, একটি ভবিষ্যদ্বাণী, একটি ফাংশন কল, এগুলি সবই নিয়ন্ত্রিত এবং অনুমানযোগ্য পদ্ধতিতে ব্যবহৃত GOTO বিবৃতি। এসেম্বলারের স্তরে, এটি সর্বদা GOTOs হবে তবে খাঁটি GOTO আপনাকে যে কার্যকারিতা দেয় তা আপনার প্রয়োজন হবে না - ফাংশন এবং লুপ / ​​নিয়ন্ত্রণ বিবৃতিগুলির সাথে এর একমাত্র সুবিধা হ'ল এটি আপনাকে যে কোনও কোডের মাঝখানে লাফ দিতে দেয় । এবং সেই 'সুবিধা' হ'ল স্প্যাগেটি কোডের সংজ্ঞা।

4
@ ওয়াটসেবিফ এখানে এডজার ডাব্লু ডিজকস্ট্রার বিখ্যাত 1968 চিঠিটি এখানে ব্যাখ্যা করেছে যে তাকে কেন ক্ষতিকারক বলে বিবেচনা করা হয়েছিল
thomanski


42

gotoজাভাতে ধারণার সাথে সরাসরি কোনও সমতুল্য নেই । কয়েকটি কনস্ট্রাকশন রয়েছে যা আপনাকে ক্লাসিকের সাথে করতে পারেন এমন কিছু কাজ করার অনুমতি দেয় goto

  • breakএবংcontinue বিবৃতি আপনি একটি লুপ বা সুইচ বিবৃতিতে একটি ব্লক আউট তিড়িং লাফ করার অনুমতি দেয়।
  • একটি লেবেল বিবৃতি এবং break <label> আপনাকে একটি নির্ধারিত পদ্ধতির (বা আরম্ভকারী ব্লক) এর মধ্যে কোনও স্তরে একটি স্বেচ্ছাসেবী যৌগিক বিবৃতি ছাড়িয়ে যেতে দেয়।
  • আপনি যদি একটি লুপ স্টেটমেন্ট লেবেল করেন তবে আপনি continue <label>অভ্যন্তরীণ লুপ থেকে বাইরের লুপের পরবর্তী পুনরাবৃত্তিটি চালিয়ে যেতে পারেন ।
  • ব্যতিক্রম ছুঁড়ে ফেলা এবং ধরা আপনাকে পদ্ধতি কলের অনেক স্তর থেকে (কার্যকরভাবে) বাইরে চলে যেতে দেয়। (তবে, ব্যতিক্রমগুলি তুলনামূলকভাবে ব্যয়বহুল এবং "সাধারণ" নিয়ন্ত্রণ প্রবাহ 1 করার একটি খারাপ উপায় হিসাবে বিবেচিত হয় ))
  • এবং অবশ্যই, আছে return

এই জাভা কনস্ট্রাক্টসের কোনওটিই আপনাকে পূর্বের শাখায় বা কোডের কোনও বিন্দুতে বর্তমান বিবৃতি হিসাবে নীড়ের একই স্তরে অনুমতি দেয় না। এরা সবাই এক বা একাধিক বাসা বাঁধার (স্কোপ) স্তর ছাড়ায় এবং তারা সবাই (বাদে continue) নীচে নেমে লাফ দেয়। এই বিধিনিষেধটি পুরানো বেসিক, ফরট্রান এবং কোবোল কোড 2 এর অন্তর্নিহিত গোটো "স্প্যাগেটি কোড" সিন্ড্রোম এড়াতে সহায়তা করে ।


1- ব্যতিক্রমগুলির সবচেয়ে ব্যয়বহুল অংশ ব্যতিক্রম বস্তুর প্রকৃত সৃষ্টি এবং এর স্ট্যাকট্রেস। আপনি যদি সত্যিই, "স্বাভাবিক" প্রবাহ নিয়ন্ত্রণের জন্য ব্যতিক্রম হ্যান্ডলিংটি ব্যবহার করতে চান তবে আপনি হয় ব্যতিক্রমী বিষয়টিকে পূর্বনির্ধারণ / পুনঃব্যবহার করতে পারেন বা একটি কাস্টম ব্যতিক্রম শ্রেণি তৈরি করতে পারেন যা fillInStackTrace()পদ্ধতিটিকে ওভাররাইড করে । ক্ষতিটি হ'ল ব্যতিক্রমের printStackTrace()পদ্ধতিগুলি আপনাকে দরকারী তথ্য দেয় না ... আপনার যদি কখনও তাদের কল করার প্রয়োজন হয়।

2 - স্প্যাগেটি কোড সিন্ড্রোম স্ট্রাকচার্ড প্রোগ্রামিং পদ্ধতির উত্সাহ তৈরি করেছে , যেখানে আপনি উপলভ্য ভাষা নির্মাণের ব্যবহার সীমিত করেছেন। এটি বেসিক , ফোর্টরান এবং সিওবিএল-এ প্রয়োগ করা যেতে পারে তবে এটির যত্ন এবং শৃঙ্খলার প্রয়োজন। gotoসম্পূর্ণরূপে পরিত্রাণ পাওয়া একটি বাস্তববাদী আরও ভাল সমাধান ছিল। আপনি যদি এটি কোনও ভাষায় রাখেন তবে সবসময় এমন কিছু ক্লাউন থাকে যা এটির অপব্যবহার করবে।


মত নির্মান Looping যখন (...) {} এবং জন্য (...) {} আপনি স্পষ্টভাবে একটি অবাধ অবস্থান জাম্পিং ছাড়া কোডের ব্লক পুনরাবৃত্তি করার অনুমতি দেয়। এছাড়াও, পদ্ধতিটি মাইমথোডকে কল করে () আপনাকে অন্য কোথাও পাওয়া কোড কার্যকর করতে এবং শেষ হয়ে গেলে বর্তমান ব্লকে ফিরে যেতে দেয়। এই সবগুলি গোটোর কার্যকারিতা প্রতিস্থাপন করতে ব্যবহার করা যেতে পারে যেগুলি ফিরে যেতে ব্যর্থ হওয়ার সাধারণ সমস্যাটিকে রোধ করে got
ক্রিস নাভা

@ ক্রিস - এটি সত্য, তবে বেশিরভাগ ভাষাগুলি যা জিওটিও সমর্থন করে তাদের জাভা লুপ কনস্ট্রাক্টসের নিকটতম এনালগ রয়েছে।
স্টিফেন সি

4
@ ক্রিস - ক্লাসিক ফরটারনে 'ফর' লুপ রয়েছে এবং ক্লাসিক সিওবিওএল-তেও লুপিং কনস্ট্রাক্ট রয়েছে (যদিও আমি বিশদটি মনে করতে পারি না)। কেবল ক্লাসিক বেসিকের কোনও স্পষ্ট লুপিং নির্মাণ নেই ...
স্টিফেন সি

31

কেবল মজাদার জন্য, এখানে জাভাতে একটি 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!

আমার কি "এটি ব্যবহার করবেন না!" যুক্ত করার দরকার আছে?


4
বাগ: Math.random()0 ফিরতে পারে It এটি> =
পোট্রোইয়ে

হ্যা ভাল. কেবলমাত্র বাইটকোড হ্যাকারি দ্বারা প্রয়োগ করা যেতে পারে এমন কোনও কিছুই সত্যিই জাভা নয় ...
স্টিফেন সি

অনুরূপ কিছু আছে যা লাইন সংখ্যার পরিবর্তে লেবেলগুলিকে সমর্থন করে?
Behrouz.M

4
একটি বাস্তবায়নের লিঙ্কটি নষ্ট হয়ে গেছে।
LarsH

@ পোইট্রোয়ে এটি একটি মজাদার ইস্টার ডিম যে কেউ HellWorld!o World!আউটপুট খুঁজে পেতে পারে এবং হতবাক হয়ে যায়। #AllBugsAreFeatures
ReinstateMonica3167040

18

কিছু মন্তব্যকারী এবং 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  ..

কীভাবে / পিছন দিকে লাফানোর সময়? এটি এখনও ব্লকের বাইরে বেরিয়ে আসে। কাউন্টার উদাহরণ: লেবেল: do {System.out.println ("পিছনে"); চালিয়ে যান লেবেল;} যখন (মিথ্যা); আমি মনে করি আপনার উদাহরণে কিছুটা (সত্য) পিছনের দিকে লাফানোর জন্য দায়ী is
বেন হল্যান্ড

@ বেনহোল্যান্ড: continue labelপিছনে ঝাঁপ দাও
লুকাশ

আমি এখনও বিশ্বাসী না। চালিয়ে যাওয়া বিবৃতিটি কোনও সময়ের জন্য, বা করার সময় লুপটির বর্তমান পুনরাবৃত্তি এড়িয়ে যায়। চালিয়ে যাওয়াটি লুপের দেহের শেষে চলে যায়, যা লুপ নিয়ন্ত্রণ করে এমন বুলিয়ান এক্সপ্রেশনের জন্য মূল্যায়ন করা হয়। কিছুক্ষণ পিছনে পিছনে ঝাঁপ দিচ্ছে যা চালিয়ে যান না। Docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html দেখুন
বেন হল্যান্ড

@ বেনহোল্যান্ড: প্রযুক্তিগতভাবে আপনি ঠিক বলেছেন। যৌক্তিক দৃষ্টিকোণ থেকে, যদি// do stuff// do more stuff আগ্রহের বক্তব্য হয় এবং তা হয় তবে পিছনের দিকে ঝাঁপিয়ে পড়ার continue label "প্রভাব আছে" ( while(true)অবশ্যই বক্তব্যের কারণে )। আমি জানতাম না যে এটি এমন একটি সুনির্দিষ্ট প্রশ্ন, যদিও ...
লুকাস এদার

4
@ বেনহোল্যান্ড: আমি উত্তর আপডেট করেছি। while(true)একটি মধ্যে কম্পাইলার দ্বারা অনুবাদ করা হয়goto বাইটকোড অপারেশন। trueধ্রুবক আক্ষরিক হিসাবে , সংকলকটি এই অপটিমাইজেশনটি করতে পারে এবং কোনও কিছুর মূল্যায়ন করতে হবে না। সুতরাং, আমার উদাহরণটি পিছনের দিকে ঝাঁপিয়ে পড়ে সত্যিই একটি গোটো ...
লুকাস এদার

5

আপনি যদি সত্যিই গোটো স্টেটমেন্টগুলির মতো কিছু চান তবে আপনি সর্বদা নামকৃত ব্লকগুলিকে ভাঙতে চেষ্টা করতে পারেন।

লেবেলটি ভাঙতে আপনাকে ব্লকের ক্ষেত্রের মধ্যে থাকতে হবে:

namedBlock: {
  if (j==2) {
    // this will take you to the label above
    break namedBlock;
  }
}

আপনার কেন গোটো এড়ানো উচিত তা নিয়ে আমি আপনাকে বক্তৃতা দেব না - আমি ধরে নিচ্ছি যে এর উত্তর ইতিমধ্যে আপনি জানেন।


4
আমি এখানে লিঙ্কিত আমার এসও প্রশ্নে এটি বাস্তবায়নের চেষ্টা করেছি । এটি আসলে আপনাকে "উপরের লেবেলে" নিয়ে যায় না, সম্ভবত আমি লেখকের বক্তব্যের ভুল ব্যাখ্যা দিয়েছি, তবে স্পষ্টতার জন্য আমি যুক্ত করব যে এটি আপনাকে নীচের দিকের বাইরের ব্লকের ("লেবেলযুক্ত" ব্লকের) শেষ প্রান্তে নিয়ে যাবে তুমি যেখানে ভাঙ্গছো অতএব আপনি উপরের দিকে "ব্রেক" করতে পারবেন না। অন্তত যে আমার বোঝার।
নেমস্পেস

4
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);
    }

এটি একটি স্ট্যাকওভারফ্লোএক্সেপশনটির ফলস্বরূপ আপনি এটিকে দীর্ঘকাল চালাচ্ছেন, এভাবে আমার যাওয়ার দরকার নেই।
কেভিন পার্কার

4
@ কেভিন: এটি কীভাবে স্ট্যাকের উপচে পড়বে? এই অ্যালগরিদমে কোনও পুনরাবৃত্তি নেই ...
লুকাশ এডার

4
এটি দেখতে অনেকটা মূল প্রমাণের মতো দেখায় যে কোনও প্রোগ্রাম "গোটো" ব্যবহার না করেই লেখা যায় - এটি একটি "লেবেল" ভেরিয়েবলের সাথে লুপ হিসাবে রূপান্তর করে যা কোনও গোটোর চেয়ে দশগুণ খারাপ।
gnasher729

3

স্টিফেনসি লিখেছেন:

দুটি কনস্ট্রাক্টশন রয়েছে যা আপনাকে ক্লাসিক গোটো দিয়ে করতে পারেন এমন কিছু কাজ করার অনুমতি দেয়।

আরো একটা...

ম্যাট ওল্ফ লিখেছেন:

লোকেরা সর্বদা গোটো ব্যবহার না করার বিষয়ে কথা বলে, তবে আমি মনে করি সত্যিকারের ভাল ব্যবহারের এমন একটি বিশ্বসুলভ কেস রয়েছে যা বেশ সুপরিচিত এবং ব্যবহৃত ... এটি হ'ল কোনও ফাংশন থেকে ফেরার আগে কিছু কোড কার্যকর করা নিশ্চিত করে .. সাধারণত এটি প্রকাশিত হয় লকগুলি বা কী না, তবে আমার ক্ষেত্রে আমি ফিরে আসার আগে একটি বিরতিতে সরাসরি যেতে সক্ষম হতে চাই যাতে আমি বাধ্যতামূলক ক্লিনআপ করতে পারি।

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 এও ফিরে আসে, কোন মানটি ফিরে আসে?


4
আমি একমত যে এটি একটি নির্বোধ সাক্ষাত্কার প্রশ্ন। অভিজ্ঞ জাভা প্রোগ্রামারকে কী হওয়া উচিত তা জানা উচিত , যদি কেবলমাত্র কোনও ব্লকে কেন রাখা খারাপ ধারণা হয় তা বোঝার জন্য । (এবং জ্ঞানটি কঠোরভাবে প্রয়োজনীয় না হলেও, আমি এমন একজন প্রোগ্রামার দ্বারা উদ্বিগ্ন হব যার সন্ধানের কৌতূহল ছিল না ...)returnfinally
স্টিফেন সি


0

নীচের কোড ব্যবহার করে দেখুন। এটা আমার জন্য কাজ করে.

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++) {"


-1

জাভাতে নেই 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


4
অবিরত ব্যবহার করে পিছনে ঝাঁপ দেওয়ার বিষয়ে আপনার উদাহরণটি ভুল। আপনি একটি লুপের শরীরের বাইরে "চালিয়ে যান" ব্যবহার করতে পারবেন না, এটি একটি সংকলনের ত্রুটির সৃষ্টি করে। একটি লুপের অভ্যন্তরে অবশ্য চালিয়ে যাওয়া সরলভাবে লুপটিকে শর্তযুক্ত করে তোলে। সুতরাং (সত্য)) অবিরত; like এর মতো কিছু একটি অসীম লুপ হবে তবে সেই বিষয়ে (সত্য) is। রয়েছে।
বেন হল্যান্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.