সি # 3.0 অবজেক্ট ইনিশিয়ালাইজার কনস্ট্রাক্টর বন্ধনীগুলি optionচ্ছিক কেন?


114

দেখে মনে হচ্ছে যে সি # 3.0 অবজেক্ট ইনিশিয়ালাইজার সিনট্যাক্স কোনও প্যারামিটারলেস কনস্ট্রাক্টর বিদ্যমান থাকলে কনস্ট্রাক্টরে খোলা / বন্ধ জুটি বন্ধ করতে দেয়। উদাহরণ:

var x = new XTypeName { PropA = value, PropB = value };

উল্টোদিকে:

var x = new XTypeName() { PropA = value, PropB = value };

আমি কৌতূহলী যে কেন এখানে কন্সট্রাক্টর খোলা / নিকট বন্ধনী জুটি optionচ্ছিক XTypeName?


9
একদিকে যেমন আমরা গত সপ্তাহে একটি কোড পর্যালোচনাতে এটি পেয়েছি: var list = new list <Foo> {}; যদি কিছু
ব্লু

@ ব্লু এই কারণেই আমি এই প্রশ্নটি জিজ্ঞাসা করতে চেয়েছিলাম। আমি আমাদের কোডে অসঙ্গতি লক্ষ্য করেছি। সাধারণভাবে অসঙ্গতি আমাকে বিরক্ত করে তাই আমি ভেবেছিলাম সিনট্যাক্সের বিকল্পগুলির পিছনে কোনও ভাল যুক্তি আছে কিনা তা আমি দেখতে পাচ্ছি। :)
জেমস ডান

উত্তর:


143

এই প্রশ্নটি আমার ব্লগের বিষয় ছিল সেপ্টেম্বর 20, 2010 এ । জোশ এবং চাদের উত্তর ("তারা কোনও মূল্য যুক্ত করে না কেন তবে এগুলি কেন প্রয়োজন?" এবং "অতিরিক্ত কাজগুলি নির্মূল করতে") মূলত সঠিক। মাংস যে কিছুটা আরও:

অবজেক্ট ইনিশিয়ালাইজারদের "বৃহত্তর বৈশিষ্ট্য" অংশ হিসাবে আপনাকে যুক্তি তালিকাটি এলিডে প্রবেশের অনুমতি দেওয়ার বৈশিষ্ট্যটি "মিষ্টিযুক্ত" বৈশিষ্ট্যগুলির জন্য আমাদের বারের সাথে দেখা করে। কিছু বিষয় আমরা বিবেচনা করেছি:

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

তারপরে আপনি কেন কোনও অবজেক্ট আরম্ভকারী নেই এমন কোনও অবজেক্ট ক্রিয়েশন এক্সপ্রেশনর ডিফল্ট কনস্ট্রাক্টর কলটিতে খালি বন্ধনী optionচ্ছিক করেন নি ?

উপরের মানদণ্ডগুলির তালিকায় আবার দেখুন। এর মধ্যে একটি হ'ল এই পরিবর্তনটি কোনও প্রোগ্রামের লেক্সিকাল, ব্যাকরণগত বা শব্দার্থক বিশ্লেষণে কোনও নতুন অস্পষ্টতা প্রবর্তন করে না। আপনার প্রস্তাবিত পরিবর্তনটি একটি অর্থ বিশ্লেষণ অস্পষ্টতার পরিচয় দেয় :

class P
{
    class B
    {
        public class M { }
    }
    class C : B
    {
        new public void M(){}
    }
    static void Main()
    {
        new C().M(); // 1
        new C.M();   // 2
    }
}

লাইন 1 একটি নতুন সি তৈরি করে, ডিফল্ট কনস্ট্রাক্টরকে কল করে এবং তারপরে নতুন অবজেক্টে উদাহরণ পদ্ধতি এমকে কল করে। লাইন 2 বিএম এর একটি নতুন উদাহরণ তৈরি করে এবং এটির ডিফল্ট কনস্ট্রাক্টরকে কল করে। যদি লাইন 1 এর প্রথম বন্ধনীগুলি alচ্ছিক হয় তবে লাইন 2টি দ্বিধাগ্রস্ত হবে। তারপরে আমাদের দ্ব্যর্থহীনতার সমাধান করার জন্য একটি আইন নিয়ে আসতে হবে; আমরা এটিকে ত্রুটি করতে পারি না কারণ এটি তখন একটি ব্রেকিং পরিবর্তন হতে পারে যা বিদ্যমান আইনি সি # প্রোগ্রামকে একটি ভাঙ্গা প্রোগ্রামে পরিবর্তন করে।

সুতরাং নিয়মটি খুব জটিল হতে হবে: মূলত: প্রথম বন্ধনীগুলি কেবলমাত্র ক্ষেত্রে alচ্ছিক যেখানে তারা অস্পষ্টতার পরিচয় দেয় না। অস্পষ্টতার পরিচয় দেওয়া সমস্ত সম্ভাব্য কেস বিশ্লেষণ করতে হবে এবং সেগুলি সনাক্ত করার জন্য সংকলকটিতে কোড লিখতে হবে।

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

সব কিসের জন্য? একটি ক্ষুদ্র গ্রাহক সুবিধা যা ভাষায় কোনও নতুন প্রতিনিধিত্বমূলক শক্তি যোগ করে না, তবে ক্রেজি কর্নারের কেসগুলিকে কেবল "গোটচা" করার জন্য অপেক্ষা করছে এমন কিছু দরিদ্র অনর্থক আত্মা যারা এটির মধ্যে চলে। এর মতো বৈশিষ্ট্যগুলি তত্ক্ষণাত্ কাটা হয়ে যায় এবং "এটি কখনও করবেন না" তালিকায় রাখুন।

আপনি কীভাবে সেই নির্দিষ্ট অস্পষ্টতা নির্ধারণ করলেন?

এটি সঙ্গে সঙ্গে পরিষ্কার ছিল; বিন্দুযুক্ত নাম কখন প্রত্যাশিত হবে তা নির্ধারণের জন্য আমি সি # তে নিয়মের সাথে বেশ পরিচিত।

নতুন বৈশিষ্ট্যটি বিবেচনা করার সময় আপনি কীভাবে এটি নির্ধারণ করবেন যে এটি কোনও দ্বিধাদ্বন্দ্ব ঘটায় কিনা? হাতে, আনুষ্ঠানিক প্রমাণ দ্বারা, মেশিন বিশ্লেষণ করে, কী?

সব তিনটি. আমি উপরে যেমন করেছিলাম তেমন বেশিরভাগ ক্ষেত্রে আমরা কেবল এটিতে ফটকা এবং নুডল দেখি। উদাহরণস্বরূপ, ধরুন আমরা সি # তে একটি নতুন উপসর্গ অপারেটর যুক্ত করতে চেয়েছিলাম "ফ্রব":

x = frob 123 + 456;

(আপডেট: frobঅবশ্যই await; এখানে বিশ্লেষণগুলি মূলত সেই বিশ্লেষণটি যা ডিজাইনের দল যুক্ত করার পরে গিয়েছিলawait )

"ফ্রব" এখানে "নতুন" বা "++" এর মতো - এটি কোনও প্রকারের প্রকাশের আগে আসে। আমরা কাঙ্ক্ষিত নজির এবং সাহসীকরণ ইত্যাদি কাজ করব এবং তারপরে "প্রোগ্রামটির যদি ইতিমধ্যে কোনও প্রকার, ক্ষেত্র, সম্পত্তি, ইভেন্ট, পদ্ধতি, ধ্রুবক বা স্থানীয় নামে পরিচিত ফ্রব থাকে তবে কী হবে?" এটি তত্ক্ষণাত এমন মামলার দিকে পরিচালিত করবে:

frob x = 10;

এর অর্থ কি "x = 10 এর ফলস্বরূপ ফ্রব অপারেশন করবেন, বা এক্স নামক ফ্রোব্যাকের একটি ভেরিয়েবল তৈরি করুন এবং এটির জন্য 10 নির্ধারণ করবেন?" (অথবা, যদি ফ্রোব্বিং কোনও ভেরিয়েবল উত্পন্ন করে, এটি 10 ​​থেকে 10 এর জন্য একটি অ্যাসাইনমেন্ট হতে পারে frob xAfter সর্বোপরি, *x = 10;পার্স এবং বৈধ যদি xতা হয় int*))

G(frob + x)

এর অর্থ কি "এক্সের উপর আনরি প্লাস অপারেটরের ফলাফল ফ্রব" বা "এক্সে এক্সপ্রেশন ফ্রব যুক্ত করুন"?

ইত্যাদি। এই অস্পষ্টতাগুলি সমাধান করার জন্য আমরা বোধগম্যতার পরিচয় দিতে পারি। আপনি যখন "var x = 10;" বলবেন এটি দ্ব্যর্থক; এর অর্থ "x এর ধরণ নির্ধারণ করা" বা এর অর্থ "x প্রকারের বর্ণের" হতে পারে। সুতরাং আমাদের কাছে একটি হিউরিস্টিক রয়েছে: আমরা প্রথমে বর্ণ নামের একটি প্রকারটি অনুসন্ধান করার চেষ্টা করি এবং কেবলমাত্র যদি উপস্থিত না থাকে তবেই আমরা এক্স প্রকারটি অনুমান করি।

অথবা, আমরা সিন্ট্যাক্সটিকে এমন পরিবর্তন করতে পারি যাতে এটি অস্পষ্ট না হয়। যখন তারা সি # 2.0 ডিজাইন করেছিলেন তাদের এই সমস্যাটি ছিল:

yield(x);

এর অর্থ কি "একটি আয়রকের মধ্যে ফলন x" বা "আর্গুমেন্ট x দিয়ে ফলন পদ্ধতিটি কল করবেন?" এটি পরিবর্তন করে

yield return(x);

এটা এখন দ্ব্যর্থহীন।

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

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

অথবা, যখন আমরা সি # 3.0 তে ল্যাম্বডাসে প্রকারভেদ প্রকারের অনুগ্রহ করেছিলাম তখন আমরা আমাদের প্রস্তাবগুলি লিখেছিলাম এবং তারপরে সেগুলি কেমব্রিজের মাইক্রোসফ্ট রিসার্চে পাঠিয়েছিলাম যেখানে ভাষা দলগুলি সেখানে আনুষ্ঠানিক প্রমাণটি প্রমাণ করার পক্ষে যথেষ্ট ছিল যে প্রকার অনুমানের প্রস্তাবটি ছিল তাত্ত্বিকভাবে শব্দ।

সি # তে আজ কি অস্পষ্টতা আছে?

অবশ্যই।

G(F<A, B>(0))

সি # 1 এ এর ​​অর্থ কী তা পরিষ্কার। এটি যেমন:

G( (F<A), (B>0) )

অর্থাৎ এটি দুটি আর্গুমেন্টের সাথে জি কে কল দেয় যেগুলি বুল। সি # 2-এ, এর অর্থ সি # 1 এর অর্থ কী হতে পারে তবে এর অর্থ "জেনেরিক পদ্ধতিতে F 0 পাস করুন যা টাইপ পরামিতি A এবং B গ্রহণ করে এবং তারপরে এফ এর ফলকে G তে পাস করবে"। আমরা পার্সারে একটি জটিল হিউরিস্টিক যুক্ত করেছি যা এটি নির্ধারণ করে যে আপনি সম্ভবত দুটি ক্ষেত্রে কে বোঝাতে চেয়েছেন।

একইভাবে, C # 1.0 তেও বর্ণগুলি দ্ব্যর্থহীন are

G((T)-x)

এটি কি "কাস্ট-এক্স থেকে টি" বা "টি থেকে এক্স বিয়োগ করে"? আবার, আমাদের কাছে একটি হিউরিস্টিক রয়েছে যা ভাল অনুমান করে।


3
ওহ, দুঃখিত, আমি ভুলে গিয়েছি ... ব্যাট সিগন্যাল পদ্ধতির এটি কাজ করে বলে মনে হচ্ছে, (আইএমও) এর সাথে যোগাযোগের একটি সরাসরি উপায়কে অগ্রাধিকার দেওয়া হয় যার মাধ্যমে জনসাধারণের পড়াশুনার জন্য জনসাধারণের এক্সপোজারটি এসও পোস্ট আকারে পাবে না that সূচকযোগ্য, অনুসন্ধানযোগ্য এবং সহজেই উল্লেখ করা যায়। কোনও স্টেজড এসও পোস্ট / উত্তর নৃত্যের কোরিওগ্রাফ করার জন্য আমরা কি তার পরিবর্তে সরাসরি যোগাযোগ করব? :)
জেমস ডান

5
আমি আপনাকে সুপারিশ করব যে আপনি কোনও পোস্ট মঞ্চায়িত করা এড়ান। এটি অন্যদের পক্ষে ন্যায়সঙ্গত হবে না যাঁদের প্রশ্নের অতিরিক্ত অন্তর্দৃষ্টি থাকতে পারে। আরও ভাল পদ্ধতির পোস্টটি পোস্ট করা, তারপরে অংশগ্রহণের জন্য একটি লিঙ্ক ইমেল করা।
চিলটেম্প

1
@ জেমস: আপনার ফলোআপ প্রশ্নটি সমাধান করার জন্য আমি আমার উত্তর আপডেট করেছি।
এরিক লিপার্ট

8
@ এরিক, আপনি কি "এই কখনও করবেন না" তালিকাটি সম্পর্কে ব্লগ করতে পারবেন? আমি অন্যান্য উদাহরণগুলি দেখতে আগ্রহী যেগুলি কখনই সি # ভাষার অংশ হবে না :)
ইলিয়া রাইঝেনকভ

2
@Eric: আমি সত্যিই সত্যিই সত্যিই আমার সাথে আপনার ধৈর্য্যের প্রশংসা করি :) ধন্যবাদ! খুবই তথ্যবহুল.
জেমস ডান

12

কারণ সেভাবেই ভাষাটি নির্দিষ্ট করা হয়েছিল। তারা কোনও মূল্য যোগ করে না, তবে কেন তাদের অন্তর্ভুক্ত করবে?

এটি ইমপিলিটি টাইপ করা অ্যারেগুলির সাথেও খুব মিল

var a = new[] { 1, 10, 100, 1000 };            // int[]
var b = new[] { 1, 1.5, 2, 2.5 };            // double[]
var c = new[] { "hello", null, "world" };      // string[]
var d = new[] { 1, "one", 2, "two" };         // Error

তথ্যসূত্র: http://msdn.microsoft.com/en-us/library/ms364047%28VS.80%29.aspx


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

1
@ জামেস ডান, প্রকৃতপক্ষে স্পষ্টভাবে টাইপ করা অ্যারে সিনট্যাক্সের সাথে এটির অনুরূপ বাক্য গঠন, আমার সম্পাদনা দেখুন। কোনও প্রকার নেই, কোনও নির্মাণকারী নেই, এবং অভিপ্রায়টি সুস্পষ্ট, সুতরাং এটি ঘোষণার দরকার নেই
ক্যাফজিক

7

এটি বস্তুর নির্মাণকে সহজ করার জন্য করা হয়েছিল। ভাষা ডিজাইনাররা (আমার জ্ঞানের কাছে) সুনির্দিষ্টভাবে বলেননি যে তারা কেন এটি দরকারী বলে মনে করেছিলেন, যদিও এটি সি # সংস্করণ 3.0 নির্দিষ্টকরণ পৃষ্ঠায় স্পষ্টভাবে উল্লেখ করা হয়েছে :

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

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


4

আপনার প্রথম উদাহরণে, সংকলকটি অনুমান করে যে আপনি ডিফল্ট কনস্ট্রাক্টরকে কল করছেন (সি # 3.0 ভাষা নির্দিষ্টকরণ সূচিত করে যে কোনও বন্ধনী সরবরাহ না করা থাকলে, ডিফল্ট কনস্ট্রাক্টর বলা হয়)।

দ্বিতীয়টিতে, আপনি স্পষ্টভাবে ডিফল্ট কনস্ট্রাক্টরকে কল করেন।

স্পষ্টভাবে কনস্ট্রাক্টরকে মানগুলি প্রেরণ করার সময় আপনি বৈশিষ্ট্যগুলি সেট করতে সেই বাক্য গঠনটি ব্যবহার করতে পারেন। আপনার যদি নিম্নলিখিত শ্রেণীর সংজ্ঞা থাকে:

public class SomeTest
{
    public string Value { get; private set; }
    public string AnotherValue { get; set; }
    public string YetAnotherValue { get; set;}

    public SomeTest() { }

    public SomeTest(string value)
    {
        Value = value;
    }
}

তিনটি বিবৃতি বৈধ:

var obj = new SomeTest { AnotherValue = "Hello", YetAnotherValue = "World" };
var obj = new SomeTest() { AnotherValue = "Hello", YetAnotherValue = "World"};
var obj = new SomeTest("Hello") { AnotherValue = "World", YetAnotherValue = "!"};

ঠিক। আপনার উদাহরণের প্রথম এবং দ্বিতীয় ক্ষেত্রে এগুলি কার্যত অভিন্ন, সঠিক?
জেমস ডুন

1
@ জামেস ডান - সঠিক ভাষা অংশ দ্বারা নির্দিষ্ট অংশ। খালি বন্ধনীগুলি অতিরিক্ত কাজ করে তবে আপনি এখনও তাদের সরবরাহ করতে পারেন।
জাস্টিন নিসনার

1

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


ঠিক আছে, এটি অনর্থক, তবে আমি কেন আগ্রহী যে হঠাৎ তাদের পরিচয়টি introductionচ্ছিক হয়ে উঠছে কেন? এটি ভাষা সিনট্যাক্সের ধারাবাহিকতার সাথে বিরতি বলে মনে হচ্ছে। যদি আমার কাছে ইনিশিয়াল ব্লকটি নির্দেশ করার জন্য খোলা কোঁকড়ানো ধনুর্বন্ধনী না থাকে তবে এটি অবৈধ বাক্য গঠন হতে হবে। মিঃ লিপার্টের কথা আপনি মজার কথা বলেছিলেন, আমি তার উত্তরটির জন্য প্রকাশ্যে ফিশিং করছিলাম যাতে আমি এবং অন্যরা নিষ্ক্রিয় কৌতূহল থেকে উপকৃত হতে পারি। :)
জেমস ডান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.