স্ট্রিং [] আর্টস বনাম (স্ট্রিং।। আরগস)


9

অ্যান্ড্রয়েডের জন্য প্রোগ্রামিং করার সময় আমি যখনই কোনও এসিঙ্কটাস্ক ব্যবহার করি তখন ডইইনব্যাকগ্রাউন্ড পদ্ধতিটি দেখতে এমন লাগে।

 protected String doInBackground(String... args)

কিন্তু সেই ব্লকের যে কোনও জায়গায় যুক্তি ব্যবহার করার সময় আমি তাদেরগুলিতে একটি সাধারণ স্ট্রিং অ্যারের মতো অ্যাক্সেস করতে পারি উদাহরণস্বরূপ আমার প্রোগ্রামে

        @Override
    protected String doInBackground(String... args)
    {
        String details = "";
        try
        {
            details = facade.getRecipeDetails(args[0]);
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
        return details;
    }

যা ভাল কাজ করে এবং এটি মোকাবেলায় আমার কোনও সমস্যা নেই। তবে আমি ভাবছি কেন তারা স্ট্রিংয়ের একটি সাধারণ অ্যারের পরিবর্তে (স্ট্রিং।। আরগস) ব্যবহার করে। এটি কি কারণ কলিং পদ্ধতিতে আপনি ঠিক তেমন কিছু লিখতে পারেন:

 new AsyncHandler.execute("argument1","argument2","argument3",...)  

যুক্তিগুলি পাস করার পরিবর্তে একটি নতুন অ্যারে তৈরি করা? যদিও আমরা লিখতে পারি

new AsyncHandler().execute(new String[]{"Argument1","Argument2"});

যা কিছুটা ভার্জোজ।

(স্ট্রিং ...) এবং স্ট্রিং [] তারা কীভাবে কাজ করে তার সমার্থক, তবে যুক্তিটি পাস করা প্রাক্তনটিকে ব্যবহার করা আরও সহজ কারণ একটি অ্যারে তৈরি করার দরকার নেই? আমি যতদূর বলতে পারি, প্রাক্তনটিও পটভূমিতে একটি স্ট্রিং অ্যারেতে অনুবাদ হয়ে যায় তাই তারা উভয়ই একই কোডটি সংকলন করবে এবং এটি কেবল 'সিনট্যাকটিক চিনির'?


(String ...)মানে আপনি যতটা Stringপ্যারাম চান তা যুক্ত করতে পারেন, String[]এটি একটি প্যারামিটার যা স্ট্রিংগুলির একটি অ্যারে। (String ...)প্রথম পরম উপর নির্ভর করে AsyncTask, এটি সবসময় হয় না String
ফয়জানরব্বানী

@ ফাইজান রব্বানী ব্যতীত আপনি এটিকেও কল করতে পারেন String...যেনString[]
র‌্যাচেট ফ্রিক

@ratchetfreak হ্যাঁ এটি একটি হিসাবে কাজ String[]করতে পারে তবে ধরে নেওয়া যাক এটি ডিফল্টরূপে ছিল String[]Stringঅ্যারেতে বিভিন্ন প্যারাম ব্যবহার করা বেশ সমস্যা হত । পরিবর্তে তারা ব্যবহারের জন্য নমনীয়তা দিয়েছে (String ...)
ফাইজানরব্বানী 18

@ ফাইজান রাব্বানী আমি সচেতন যে এটি সর্বদা স্ট্রিং নয়, এটি কেবল একটি উদাহরণ =)। বুলিয়ান ... বা অন্যান্য জিনিসের ক্ষেত্রেও একই রকম, তবে আমরা পরিচিত (মূলত স্ট্রিং [] আরগস) কারণে আমরা স্ট্রিং ব্যবহার করতে পছন্দ করি। এবং আপনি বলেছিলেন যে 'আপনি যতটা স্ট্রিং চান ততই পাস করতে পারেন', ভাল আপনি অ্যারে দিয়ে বেশ কয়েকটি স্ট্রিং পাস করতে পারবেন। আমার কাছে এটি এখনও মনে হচ্ছে আপনি অ্যারে দিয়ে একই অর্জন করতে পারবেন, যদিও এটি কম পাঠযোগ্য এবং ঝামেলা বেশি। (উদাহরণস্বরূপ অ্যারেগুলির একটি অ্যারে পাস করা কিছুটা পঠনযোগ্যতা হ্রাস করবে)। এটি কি সঠিক যে এটি মূলত তখন পঠনযোগ্যতার জন্য? (ধন্যবাদ ইতিমধ্যে বিটিডব্লিউ)
ডিলান মিউস

@ ফাইজান রব্বানী ভাল এটি new String[]{...}রূপান্তরিত করার একটি সহজ মোড়ক (আপনি যখন এটি ব্যবহার করবেন তখন এটিই ঘটে String...)
র‌্যাচেট ফ্রিক

উত্তর:


15

(String ...)হয় প্যারামিটার একটি অ্যারের ধরনের String, যেখানে যেমন String[]হয় একটি একক প্যারামিটার

এখন এখানে এখানে String[]একই উদ্দেশ্য পূর্ণ করতে (String ...)পারে তবে ব্যবহারের জন্য আরও পঠনযোগ্যতা এবং স্বাচ্ছন্দ্য সরবরাহ করে।

এটি এমন একটি বিকল্পও সরবরাহ করে যা আমরা Stringএকক ব্যবহার না করে একাধিক অ্যারে পাস করতে পারি String[]


1
যদিও String[]একটি পদ্ধতি গ্রহণ মধ্যে প্রেরণ করা সম্ভব String...একটি প্যারামিটার হিসাবে, দুই String[]গুলি করতে পারেন না। এখানে সংক্রামিত কোন অ্যারে কনটেন্টেশন নেই।

5

স্ট্রিং [] বনাম স্ট্রিংয়ের একটি বৈশিষ্ট্য ... "স্ট্রিং ..." কল করার অংশ হওয়ার দরকার নেই।

public void test(String... args){ 
   if(args.length > 0){
      for( String text : args){
         System.out.println(text);
      }
   }else{
      System.out.println("No args defined.");
   }
}

public void callerTest(){
     test();
     System.out.println();

     test("tree");
     System.out.println();

     test("dog", "cat", "pigeon");
}

তারপরে আপনি যদি callerTest();আউটপুট কল করেন তা হবে:

No args defined.

tree

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