মামলার বিবৃতি দেওয়ার পরে আমাদের কেন বিরতি দরকার?


94

সংকলক স্বয়ংক্রিয়ভাবে সুইচটিতে প্রতিটি কোড ব্লকের পরে ব্রেক স্টেটমেন্ট দেয় না কেন? এটি কি historicalতিহাসিক কারণে? আপনি কখন একাধিক কোড ব্লকগুলি কার্যকর করতে চান?


4
জেডিকে -12 সম্পর্কে একটি উত্তর তৈরি করুন এবং ম্যান্ডেট না করার জন্য স্যুইচ লেবেলগুলিকে সংস্কার করা হয়েছে break
নামান

উত্তর:


94

কখনও কখনও একই কোড ব্লকের সাথে একাধিক কেস যুক্ত করা সহায়ক

case 'A':
case 'B':
case 'C':
    doSomething();
    break;

case 'D':
case 'E':
    doSomethingElse();
    break;

ইত্যাদি ঠিক একটি উদাহরণ।

আমার অভিজ্ঞতা হিসাবে, সাধারণত "কেটে যাওয়ার" পক্ষে খারাপ স্টাইল এবং একটি মামলার জন্য একাধিক ব্লকের কোড কার্যকর করা হয় তবে কিছু পরিস্থিতিতে এর ব্যবহারও হতে পারে।


29
// Intentional fallthrough.আপনি যখন বিরতি বাদ দেন কেবল সর্বদা লাইনগুলিতে একটি মন্তব্য যুক্ত করুন । এটি আমার মতে "দুর্ঘটনাক্রমে বিরতি ভুলে যাওয়া সহজ" এর মতো খারাপ শৈলী নয়। পিএস অবশ্যই উত্তর হিসাবে যেমন সহজ ক্ষেত্রে না।
দ্বিগুণ করুন

@ ডাবলপ - আমি সম্মত আমার মতে, সম্ভব হলে আমি এড়াতে চাই তবে যদি তা বোধ হয় তবে নিশ্চিত হয়ে নিন যে আপনি কী করছেন তা খুব পরিষ্কার।
ওয়াইল্ডক্রাস্টাসিয়ান

6
@ ডাবলপ: একাধিক caseগুলি যদি এভাবে একসাথে রাখা হয় তবে আমি মন্তব্যটি নিয়ে বিরক্ত করব না । যদি তাদের মধ্যে কোড থাকে তবে হ্যাঁ, মন্তব্যটি সম্ভবত যোগ্যতাযুক্ত।
বিলি ওনিল

4
আমি এমন একটি ভাষা কল্পনা করি যেখানে আপনি একের মধ্যে একাধিক কেস ঘোষণা করতে পারেন case, যেমন: case 'A','B','C': doSomething(); case 'D','E': doSomethingElse();ক্ষেত্রে ক্ষেত্রে বিরতি ছাড়াই। পাস্কাল এটি করতে পেরেছিলেন: "কেস স্টেটমেন্ট প্রতিটি নির্বাচকের সাথে অর্ডিনাল এক্সপ্রেশনের মানকে তুলনা করে, যা একটি ধ্রুবক, সাবরেঞ্জ বা কমা দ্বারা আলাদা হওয়া তাদের তালিকা হতে পারে" " ( wiki.freepascal.org/Case )
খ্রিস্টান

32

ঐতিহাসিকভাবে , এটা কারণ caseমূলত একটি সংজ্ঞা ছিল label, নামেও পরিচিত লক্ষ্য বিন্দু A -এরgoto কল । স্যুইচ স্টেটমেন্ট এবং এর সাথে যুক্ত কেসগুলি কোডের প্রবাহে একাধিক সম্ভাব্য এন্ট্রি পয়েন্ট সহ কেবল একটি মাল্টওয়ে শাখা উপস্থাপন করে।

যা যা বলেছিল, এটি প্রায় অসীম সংখ্যায় লক্ষ্য করা গেছে breakযা প্রায় সর্বদা পূর্বনির্ধারিত আচরণ যা আপনি বরং প্রতিটি ক্ষেত্রে শেষে করতে চান।


31

জাভা সি থেকে আসে এবং এটি সি থেকে সিনট্যাক্স from

এমন এক সময় রয়েছে যেখানে আপনি একাধিক কেস স্টেটমেন্ট চান যাতে কেবল একটি মৃত্যুদন্ড কার্যকর হয়। নীচে একটি নমুনা দেওয়া হবে যা আপনাকে জানাবে যে মাসে কত দিন রয়েছে।

class SwitchDemo2 {
    public static void main(String[] args) {

        int month = 2;
        int year = 2000;
        int numDays = 0;

        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                numDays = 31;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                numDays = 30;
                break;
            case 2:
                if ( ((year % 4 == 0) && !(year % 100 == 0))
                     || (year % 400 == 0) )
                    numDays = 29;
                else
                    numDays = 28;
                break;
            default:
                System.out.println("Invalid month.");
                break;
        }
        System.out.println("Number of Days = " + numDays);
    }
}

4
কেউ আপ তীর জন্য লক্ষ্য এবং মিস? অথবা আপনার ব্রেস স্টাইল বা ইন্ডেন্টেশন দিয়ে তাদের একটি গরুর মাংস থাকতে পারে ...
জিম লুইস

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

4
আমার ছাত্রদের এটি করার জন্য সর্বজনীনভাবে মারধর করা হবে। এটা কোয়েট কুৎসিত।
ncmathadist

4
@ncmathadadist এটি কিছু করার একটি উপায়ের একটি বিষয়টিকে চিত্রিত করে। আমি দ্বিমত পোষণ করি না যে এই উদাহরণটি সম্ভবত চরম। তবে এটি একটি বাস্তব বিশ্বের উদাহরণ, যা আমি বিশ্বাস করি যে মানুষ একটি ধারণা উপলব্ধি করতে সহায়তা করে।
রোমেন হিপ্পো

15

আমি মনে করি এটি একটি ভুল। একটি ভাষা নির্মাণ breakহিসাবে এটি ডিফল্ট হিসাবে ঠিক তত সহজ এবং পরিবর্তে একটি fallthroughকীওয়ার্ড রয়েছে। আমি যে কোডটি লিখেছি এবং পড়েছি সেগুলির বেশিরভাগ ক্ষেত্রেই প্রতিটি ক্ষেত্রে বিরতি রয়েছে।


4
আমি বরং পরামর্শ দিই continue <case name>যা কোন মামলার বিবৃতি অব্যাহত রাখতে স্পষ্ট করে নির্দিষ্ট করতে দেয়;
ভিলক্স-

4
@ ভিলাক্স caseবর্তমানের মধ্যে একটি স্বেচ্ছাসেবীর অনুমতি দেওয়ার সময় switchএটি কেবল একটি হয়ে যায় goto। ;-)
খ্রিস্টান সেমরাউ

13

আপনি কেস ফল-থ্রু দিয়ে আকর্ষণীয় সব ধরণের কাজ করতে পারেন।

উদাহরণস্বরূপ, যাক আপনি সমস্ত ক্ষেত্রে একটি নির্দিষ্ট ক্রিয়া করতে চান তা বলতে দিন, তবে একটি নির্দিষ্ট ক্ষেত্রে আপনি সেই ক্রিয়াটি আরও কিছু করতে চান। পতনের মাধ্যমে একটি স্যুইচ স্টেটমেন্ট ব্যবহার করা এটি বেশ সহজ করে তুলবে।

switch (someValue)
{
    case extendedActionValue:
        // do extended action here, falls through to normal action
    case normalActionValue:
    case otherNormalActionValue:
        // do normal action here
        break;
}

অবশ্যই breakকোনও মামলা শেষে বিবৃতিটি ভুলে যাওয়া এবং অপ্রত্যাশিত আচরণের কারণ সহজ। আপনি ব্রেক স্টেটমেন্ট বাদ দিলে ভাল সংকলক আপনাকে সতর্ক করবে।


জাভাতে স্ট্রিংগুলিতে স্যুইচ / কেস ব্যবহার করা যাবে?
স্টিভ কুও

@ স্টিভ: ওফ, আমার মনে হয় এই মুহূর্তে না। স্ট্যাকওভারফ্লো.com / প্রশ্নগুলি / 33৩৮২০6/২ অনুসারে জাভাটির ভবিষ্যতের সংস্করণে স্ট্রিংয়ের অনুমতি দেওয়া হবে। (আমি বর্তমানে আমার বেশিরভাগ প্রোগ্রাম সি # তে করে থাকি, যা স্যুইচ স্টেটমেন্টগুলিতে স্ট্রিংগুলিকে মঞ্জুরি দেয়)) বিভ্রান্তিকর উদ্ধৃতিগুলি সরিয়ে দেওয়ার জন্য আমি উত্তরটি সম্পাদনা করেছি।
জ্যাচ জনসন

4
@ জাচজাহনসন, অনেক পরে, জাভা 7 স্ট্রিংগুলিতে স্যুইচ করার অনুমতি দেয়।
বব ক্রস

7

সংকলক স্বয়ংক্রিয়ভাবে সুইচটিতে প্রতিটি কোড ব্লকের পরে ব্রেক স্টেটমেন্ট দেয় না কেন?

বেশ কয়েকটি মামলার জন্য অভিন্ন ব্লক (যা বিশেষ-বিশেষায়িত হতে পারে) ব্যবহার করতে সক্ষম হওয়ার ভাল বাসনাটি বাদ দিয়ে ...

এটি কি historicalতিহাসিক কারণে? আপনি কখন একাধিক কোড ব্লকগুলি কার্যকর করতে চান?

এটি মূলত সি এর সাথে সামঞ্জস্যের জন্য এবং মূলত gotoকীওয়ার্ডরা পৃথিবীতে ঘোরাফেরা করার পরে যুক্তিযুক্তভাবে একটি প্রাচীন হ্যাক hack এটি কিছু আশ্চর্যজনক জিনিসকে অবশ্যই সক্ষম করে যেমন ডাফের ডিভাইস , তবে এটি তার পক্ষে বা বিপক্ষে কোনও বিষয় হ'ল ... সর্বোপরি তর্কাত্মক।


5

breakপরে সুইচ caseগুলি সুইচ স্টেটমেন্টে fallthrough এড়াতে ব্যবহার করা হয়। যদিও আকর্ষণীয়ভাবে এটি এখন নতুন তৈরি হওয়া স্যুইচ লেবেলের মাধ্যমে জেপি -325 এর মাধ্যমে প্রয়োগ করা সম্ভব ।

এই পরিবর্তনগুলির breakসাথে, প্রতিটি প্রদর্শিত সুইচটি caseআরও প্রদর্শিত হিসাবে এড়ানো যেতে পারে: -

public class SwitchExpressionsNoFallThrough {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int value = scanner.nextInt();
        /*
         * Before JEP-325
         */
        switch (value) {
            case 1:
                System.out.println("one");
            case 2:
                System.out.println("two");
            default:
                System.out.println("many");
        }

        /*
         * After JEP-325
         */
        switch (value) {
            case 1 ->System.out.println("one");
            case 2 ->System.out.println("two");
            default ->System.out.println("many");
        }
    }
}

উপর JDK-12 দিয়ে উপরের কোড নির্বাহ , তুলনামূলক আউটপুট হিসেবে দেখা যেতে পারে

//input
1
// output from the implementation before JEP-325
one
two
many
// output from the implementation after JEP-325
one

এবং

//input
2
// output from the implementation before JEP-325
two
many
// output from the implementation after JEP-325
two

এবং অবশ্যই জিনিস অপরিবর্তিত

// input
3
many // default case match
many // branches to 'default' as well

4

সুতরাং একই কাজটি করার জন্য আপনার যদি বেশ কয়েকটি ক্ষেত্রে প্রয়োজন হয় তবে আপনাকে কোডটি পুনরাবৃত্তি করতে হবে না:

case THIS:
case THAT:
{
    code;
    break;
}

বা আপনি যেমন কাজ করতে পারেন:

case THIS:
{
   do this;
}
case THAT:
{
   do that;
}

একটি ক্যাসকেড ফ্যাশনে।

সত্যিই বাগ / কনফিউশন প্রবণ, আপনি যদি আমাকে জিজ্ঞাসা করেন।


এটি কি উভয়ই চালায় do thisএবং do thatকেবল এটির do thatজন্য?
জনিআআআআআআ

4
শুধু ডক্স পড়ুন। এটা বাজে! বাগ লেখার কী সহজ উপায়!
জনিআআআআআআআ

4

Recordতিহাসিক রেকর্ড যতদূর যায়, টনি হোয়ার 1960 এর দশকে "কাঠামোগত প্রোগ্রামিং" বিপ্লবের সময় কেস স্টেটমেন্টটি আবিষ্কার করেছিলেন। টনির কেস স্টেটমেন্ট প্রতি কেস একাধিক লেবেল সমর্থন করে এবং কোনও দুর্গন্ধযুক্ত breakবিবৃতি ছাড়াই স্বয়ংক্রিয় প্রস্থানকে সমর্থন করে । সুস্পষ্টর প্রয়োজনের breakবিষয়টি বিসিপিএল / বি / সি লাইন থেকে বেরিয়ে আসে। ডেনিস রিচি লিখেছেন (ACM HOPL-II এ):

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

আমি বিসিপিএল সম্পর্কে কোনও historicalতিহাসিক লেখা খুঁজে পাইনি, তবে রিচির মন্তব্য থেকে জানা যায় যে এটি breakকমবেশি একটি historicalতিহাসিক দুর্ঘটনা ছিল। বিসিপিএল পরে সমস্যাটি সমাধান করে ফেলেছিল, তবে সম্ভবত রিচি এবং থম্পসন ইউনিক্স আবিষ্কার করতে খুব ব্যস্ত ছিলেন যাতে এই জাতীয় বিবরণটি নিয়ে বিরক্ত করা যায় না :-)


এটি আরও ভোট পেতে হবে। স্পষ্টতই ওপি ইতিমধ্যে জানত যে বাদ দেওয়া break"একাধিক কোড ব্লকগুলি কার্যকর করতে" অনুমতি দেয় এবং এই নকশা পছন্দটির প্রেরণার সাথে আরও বেশি উদ্বিগ্ন। অন্যরা সি থেকে জাভা পর্যন্ত সুপরিচিত heritageতিহ্যের কথা উল্লেখ করেছিলেন এবং এই উত্তর গবেষণাকে আরও সি-পূর্ব দিন পর্যন্ত ঠেলে দেয়। আমি আশা করি আমাদের প্রথম থেকেই এটি (যদিও খুব আদিম) প্যাটার্নটি মিলছিল।
wlnirvana

3

জাভা সি থেকে উদ্ভূত, যার heritage তিহ্যটিতে ডফের ডিভাইস হিসাবে পরিচিত একটি প্রযুক্তি রয়েছে । এটি এমন একটি অপ্টিমাইজেশন যা কোনও break;বিবৃতি অনুপস্থিতিতে নিয়ন্ত্রণের এক কেস থেকে অন্য ক্ষেত্রে পড়ে falls সি প্রমিতকরণের পরে, "বন্যের" মতো প্রচুর কোড ছিল এবং এই জাতীয় নির্মাণগুলিকে ভেঙে ফেলার জন্য ভাষাটি পরিবর্তন করা প্রতিকূল ছিল।


2

লোকেরা যেমন আগে বলেছিল, এটি হ'ল পতনের মাধ্যমে অনুমতি দেওয়া এবং এটি কোনও ভুল নয়, এটি একটি বৈশিষ্ট্য। যদি খুব বেশি breakবিবৃতি আপনাকে বিরক্ত করে returnতোলে তবে পরিবর্তে বিবৃতি ব্যবহার করে আপনি সেগুলি থেকে সহজেই মুক্তি পেতে পারেন । এটি আসলে একটি ভাল অনুশীলন, কারণ আপনার পদ্ধতিগুলি যতটা সম্ভব ছোট হওয়া উচিত (পঠনযোগ্যতা এবং রক্ষণাবেক্ষণের জন্য) তাই switchকোনও পদ্ধতির জন্য ইতিমধ্যে একটি বিবৃতি যথেষ্ট বড়, সুতরাং, একটি ভাল পদ্ধতিতে অন্য কোনও কিছু থাকা উচিত নয়, এটি একটি উদাহরণ:

public class SwitchTester{
    private static final Log log = LogFactory.getLog(SwitchTester.class);
    public static void main(String[] args){
        log.info(monthsOfTheSeason(Season.WINTER));
        log.info(monthsOfTheSeason(Season.SPRING));
        log.info(monthsOfTheSeason(Season.SUMMER));
        log.info(monthsOfTheSeason(Season.AUTUMN));
    }

    enum Season{WINTER, SPRING, SUMMER, AUTUMN};

    static String monthsOfTheSeason(Season season){
        switch(season){
            case WINTER:
                return "Dec, Jan, Feb";
            case SPRING:
                return "Mar, Apr, May";
            case SUMMER:
                return "Jun, Jul, Aug";
            case AUTUMN:
                return "Sep, Oct, Nov";
            default:
                //actually a NullPointerException will be thrown before reaching this
                throw new IllegalArgumentException("Season must not be null");
        }        
    }
}   

মৃত্যুদন্ড কার্যকর:

12:37:25.760 [main] INFO lang.SwitchTester - Dec, Jan, Feb
12:37:25.762 [main] INFO lang.SwitchTester - Mar, Apr, May
12:37:25.762 [main] INFO lang.SwitchTester - Jun, Jul, Aug
12:37:25.762 [main] INFO lang.SwitchTester - Sep, Oct, Nov

প্রত্যাশিত.


0

সংকলক দ্বারা স্বয়ংক্রিয় বিরতি যুক্ত না করা 1 <= a <= 31 এবং 2 থেকে ব্রেক স্টেটমেন্ট সরিয়ে মত অবস্থার জন্য পরীক্ষা করতে একটি সুইচ / কেস ব্যবহার করা সম্ভব করে তোলে ।

switch(a) {
  case 1: //I'm between 1 and 3
  case 2: //I'm between 1 and 3
  case 3: //I'm between 1 and 3
          break;
}

ইয়েচ আমি একেবারে ঘৃণা করি।
ncmathadist

0

কারণ এমন পরিস্থিতি রয়েছে যেখানে আপনি প্রথম ব্লকের মধ্য দিয়ে প্রবাহিত করতে চান উদাহরণস্বরূপ একাধিক ব্লকে একই কোড লেখা এড়াতে কিন্তু তবুও সেগুলি ম্রো নিয়ন্ত্রণের জন্য ভাগ করতে সক্ষম হবেন। আরও অনেক কারণ রয়েছে।


0

এটি একটি পুরানো প্রশ্ন তবে বাস্তবে আমি আজ বিরতি বিবৃতি ছাড়াই মামলাটি ব্যবহার করেছি। বিরতি ব্যবহার না করা আসলে খুব কার্যকর যখন আপনার ক্রম অনুসারে বিভিন্ন ফাংশন একত্রিত করা দরকার।

উদাহরণস্বরূপ, টোকেন সহ ব্যবহারকারীকে প্রমাণীকরণের জন্য HTTP প্রতিক্রিয়া কোডগুলি ব্যবহার করা

সার্ভারের প্রতিক্রিয়া কোড 401 - টোকেনটি পুরানো -> টোকেনটি পুনরায় জন্মানো এবং ব্যবহারকারীকে লগ ইন করুন।
সার্ভারের প্রতিক্রিয়া কোড 200 - টোকেন ঠিক আছে -> লগ ব্যবহারকারীকে।

ক্ষেত্রে বিবৃতি:

case 404:
case 500:
        {
            Log.v("Server responses","Unable to respond due to server error");
            break;
        }
        case 401:
        {
             //regenerate token
        }
        case 200:
        {
            // log in user
            break;
        }

এটি ব্যবহার করে আপনাকে 401 প্রতিক্রিয়াটির জন্য লগ ইন করতে হবে না কারণ যখন টোকেনটি পুনরায় জেনারেট করা হয় তখন রানটাইম 200 এর ক্ষেত্রে লাফ দেয়।


0

আপনি সহজেই অন্যান্য ধরণের সংখ্যা, মাস, গণনা আলাদা করতে পারবেন।
এই ক্ষেত্রে যদি এটি ভাল হয়;

public static void spanishNumbers(String span){

    span = span.toLowerCase().replace(" ", "");
    switch (span){
     case "1":    
     case "jan":  System.out.println("uno"); break;    
     case "2":      
     case "feb":  System.out.println("dos"); break;    
     case "3":     
     case "mar":  System.out.println("tres"); break;   
     case "4":   
     case "apr":  System.out.println("cuatro"); break;
     case "5":    
     case "may":  System.out.println("cinco"); break;
     case "6":     
     case "jun":  System.out.println("seis"); break;
     case "7":    
     case "jul":  System.out.println("seite"); break;
     case "8":    
     case "aug":  System.out.println("ocho"); break;
     case "9":   
     case "sep":  System.out.println("nueve"); break;
     case "10":    
     case "oct": System.out.println("diez"); break;
     }
 }

0

আমি এখন এমন প্রকল্পে কাজ করছি যেখানে breakআমার সুইচ বিবৃতিতে আমার প্রয়োজন হয় অন্যথায় কোডটি কাজ করবে না। আমার সাথে থাকুন এবং breakআপনার সুইচ স্টেটমেন্টে আপনার কী প্রয়োজন তা আমি একটি ভাল উদাহরণ দেব ।

কল্পনা করুন আপনার তিনটি রাজ্য রয়েছে, একটি যা ব্যবহারকারীর একটি সংখ্যা প্রবেশের জন্য অপেক্ষা করে, দ্বিতীয়টি এটি গণনা করে এবং তৃতীয়টি যোগফল মুদ্রণের জন্য।

সেক্ষেত্রে আপনার রয়েছে:

  1. রাজ্য 1 - ব্যবহারকারীর একটি নম্বর প্রবেশের জন্য অপেক্ষা করুন
  2. রাজ্য 2 - অঙ্কটি মুদ্রণ করুন
  3. state3 - যোগফল গণনা করুন

রাজ্যের এ খুঁজছি, আপনি দোহন ক্রম শুরু করতে চান state1 , তারপর state3 এবং পরিশেষে state2 । অন্যথায় আমরা যোগফলগুলি গণনা না করে কেবল ব্যবহারকারীদের ইনপুট প্রিন্ট করব। কেবল এটি আবার স্পষ্ট করার জন্য আমরা ব্যবহারকারীর একটি মান প্রবেশের জন্য অপেক্ষা করি, তারপরে যোগফল গণনা করে যোগফলটি মুদ্রণ করি।

এখানে একটি উদাহরণ কোড দেওয়া হয়েছে:

while(1){
    switch(state){
      case state1:
        // Wait for user input code
        state = state3; // Jump to state3
        break;
      case state2:
        //Print the sum code
        state = state3; // Jump to state3;
      case state3:
        // Calculate the sum code
        state = wait; // Jump to state1
        break;
    }
}

যদি আমরা ব্যবহার না করি তবে breakএটি এই আদেশে, state1 , state2 এবং state3 কার্যকর করবে । তবে ব্যবহার করে breakআমরা এই দৃশ্যটিকে এড়াতে পারি এবং সঠিক পদ্ধতিতে অর্ডার করতে পারি যা শুরু করতে হবে স্টেট 1, তারপরে state3 এবং সর্বশেষ তবে সর্বনিম্ন নয় রাষ্ট্র 2 দিয়ে।


-1

হুবহু, কারণ কিছু চতুর স্থান নির্ধারণের সাথে আপনি ক্যাসকেডে ব্লকগুলি কার্যকর করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.