অর্থবহ সংক্ষিপ্ত পদ্ধতি নামকরণের নির্দেশিকা


25

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

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

উদাহরণস্বরূপ, এটি আমি যে নির্দেশিকাগুলি অনুসরণ করছি তার অংশ হতে পারে:

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

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

উপরের দিকনির্দেশনাটি স্থানীয় ইংরেজী স্পিকারদের জন্য স্বজ্ঞাত হতে পারে তবে আমার পক্ষে ইংরেজি আমার দ্বিতীয় ভাষা এটি এই জাতীয় জিনিস সম্পর্কে আমাকে বলা দরকার।


সাইটে স্বাগতম! আপনি এই সম্পর্কিত প্রশ্নটি সাহায্যকারী পেতে পারেন: প্রোগ্রামারস.স্ট্যাকেক্সেঞ্জার.কম
সেকশনস /

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

7
সংক্ষিপ্ত চেয়ে বর্ণনামূলক গুরুত্বপূর্ণ। বেশিরভাগ আইডিই'র অফার সমাপ্তি, সুতরাং দৈর্ঘ্য কোনও বাধা হওয়া উচিত নয় এবং বর্ণনামূলক নামগুলি বোঝা এবং মনে রাখা সহজ।
কালেব

@ আন্নালিয়্যার আমি অন্যরকম কিছু জিজ্ঞাসা করছি, আমার প্রশ্নটি নামকরণের জন্য প্রস্তাবিত পরিভাষা বা ব্যাকরণের নোটগুলির সাথে সম্পর্কিত যা অন্যদেরকে পদ্ধতির উদ্দেশ্যটি আরও ভালভাবে বুঝতে সহায়তা করতে পারে।
000

3
পাঠযোগ্য সংক্ষিপ্ত চেয়ে গুরুত্বপূর্ণ। সমস্ত আধুনিক আইডিইতে কোড সমাপ্তির সুবিধা রয়েছে, তাই কোন পদ্ধতিটি কী তা টাইপ করা সহজ করার চেয়ে মূল্যবান discover এটি আবিষ্কার করা সহজ করে তোলে।

উত্তর:


34

নামকরণ। সফটওয়্যার বিকাশ সম্পর্কে একটি কঠিন বিষয় :)

যখন আমি কোনও নাম রাখি, এখানে আমার অগ্রাধিকারের সেট রয়েছে:

  • আমার ভাষার প্রতিমা অনুসরণ করুন। রুবি আন্ডারস্কোর পছন্দ করে। জাভাস্ক্রিপ্ট উটের ক্ষেত্রে পছন্দ করে। আপনি যে ভাষায় রয়েছেন তা হ'ল অনুসরণকারী কনভেনশন।
  • এপিআই এর অভিপ্রায় প্রকাশ করে। এটি "সেন্ড_এইচটিটিপি_ডাটা" নয় এটি "পোস্ট_উত্তেজক_স্তাতা"
  • বাস্তবায়ন বিশদ ফাঁস করা এড়িয়ে চলুন। বলুন, একটি প্রকারের সাথে একটি ভেরিয়েবল উপসর্গ করা।
  • পূর্ববর্তী নির্দেশিকাগুলি ভঙ্গ না করে প্রয়োজনের চেয়ে বেশি অক্ষর ব্যবহার করে না।

স্পষ্টতই এটি একটি বরং সরল পদ্ধতি। নামকরণ উপযোগী।

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


2
ভাল উত্তর এবং ক্লিন কোডের প্রস্তাব দেওয়ার জন্য +1। আমি পাশাপাশি এই বইয়ের সুপারিশ করছি। আমি আরও একটি জিনিস যুক্ত করব, এবং এটি মার্টিনের বই থেকে এসেছে: "আমি কোডও সহজেই লিখতে চাই" কোড পড়তে সক্ষম হওয়ার তুলনায় অনেক কম অগ্রাধিকার। স্পষ্টতই, নামটির মতো একটি জিনিস খুব দীর্ঘ, তবে আমি সহজেই লিখতে সহজ যেগুলির চেয়ে বেশি পঠনযোগ্য দীর্ঘ নামগুলির দিকে ঝুঁকতে চাই। বেশিরভাগ আধুনিক আইডিই-তে যাই হোক না কেন স্বয়ংক্রিয়ভাবে সম্পূর্ণ complete
DXM

3
রবার্ট মার্টিনের বই থেকে আরও একটি গুরুত্বপূর্ণ ধারণা: পদ্ধতির জন্য - দীর্ঘ স্কোপ সংক্ষিপ্ত নাম, স্বল্প স্কোপ দীর্ঘ নাম। ভেরিয়েবলের জন্য বিপরীত - সংক্ষিপ্ত স্কোপ সংক্ষিপ্ত নাম, দীর্ঘ স্কোপ দীর্ঘ নাম।
প্যাটকোস সিএসবা

"ক্লিন কোড" হ'ল সর্বাধিক বই যা আমাকে কোড পঠনযোগ্যতার প্রভাব বুঝতে সাহায্য করেছিল এবং আমি নিয়মিতভাবে অনুসরণ করা সেরা অনুশীলনগুলির তালিকাভুক্ত করেছি
পল

একটি প্রশ্ন, পদ্ধতির নামে অভিপ্রায় প্রকাশ করে, এটি কী পদ্ধতি পুনরায় ব্যবহারযোগ্যতা প্রভাবিত করে না? post_twitter_status এটিকে খুব নির্দিষ্ট করে তোলে।
এরেসদেভ

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

7

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

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

দিনের শেষে, আপনি নামগুলি সহ একটি কুরুচিপূর্ণ কোডটি এড়াতে চান যা পুরো সারিটি গ্রহণ করে বা এগুলি এত গ্ল্যাব হয় যে তাদের মানটি ছিনিয়ে নিতে পারে।


6

আমার জন্য, কোনও কিছুর জন্য একটি ভাল নাম সন্ধান করা সর্বদা এটির অস্তিত্বকে ন্যায্য করতে হবে এমন একটি বস্তু হিসাবে ভাবতে ফিরে আসে । নিজেকে জিজ্ঞাসা করুন:

  • শ্রেণি / পদ্ধতি / ভেরিয়েবল কী করে, অর্থাৎ এর বিস্তৃত উদ্দেশ্য কী এবং এর জন্য কী?
  • এর উদ্দেশ্য সম্পর্কে বিশেষত কোনটি যোগাযোগ করা প্রয়োজন, অর্থাত নামটির প্রয়োজনীয় অংশটি কী?

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

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

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

public boolean shouldConsiderAbbreviating(List<String> someNames) {
  for (String eachName : someNames) {
    if (isTooLong(eachName)) {
      return true;
    }
  }
  return false;
}

এটি জাভা সম্পর্কে কিছুটা জ্ঞানের লোকদের কাছে এই জাতীয় কিছু হিসাবে পঠনযোগ্য হবে:

আপনার কিছু নামের (যা স্ট্রিং রয়েছে) এর একটি সংক্ষিপ্ত বিবরণ বিবেচনা করা উচিত কিনা তা নির্ধারণ করার জন্য, কিছু নামের উপরে পুনরাবৃত্তি করুন এবং প্রতিটি নামের জন্য নির্ধারণ করুন যে এটি খুব দীর্ঘ কিনা; যদি তাই হয়, ফিরে true; যদি কেউ খুব বেশি দীর্ঘ না হয় তবে ফিরে আসুন false

কেবলমাত্র আরও জটিল পদ্ধতিতে কেবল যুক্তি stringsএবং লুপ ভেরিয়েবলের নামকরণের সাথে উপরের কোডটি বিপরীত করুন string। নামটি এক নজরে ব্যবহারের পরিবর্তে স্বতন্ত্র ব্যবহারের পরিবর্তে আপনাকে পার্থক্যটি দেখতে হবে।


3

একটি ভাল নামকরণ সন্ধান করা সবসময় আরও বেশি কারণের মধ্যে একটি সমঝোতা। আপনি কখনই পুরোপুরি সন্তুষ্ট হতে পারবেন না।

এটি বলেছিল, এমনকি যদি আপনার মাতৃভাষাটি সেভাবে না হয় তবে বিবেচনা করুন যে ইংরেজী হ'ল এমন ভাষা যা প্রোগ্রামিং ভাষাগুলি টোকেন গঠন করে। ইংরাজির মতো সিনট্যাক্স ব্যবহার করা কোড পাঠকে আরও "সাবলীল" করে তোলে কারণ প্রতিবার কোনও কীওয়ার্ড পাওয়া গেলে "ভাঙা পড়ার নিয়ম" নেই "

সাধারণভাবে, object.method(parameters)কোনও স্কিমের সাথে মেলাতে পছন্দ করার মতো বিষয়গুলি বিবেচনা করুন subject.verb(complements)

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

বিশেষ্য সম্পর্কে, ক্লাসগুলি তাদের are(ধারণার মেয়াদে) এর জন্য নামকরণ করা উচিত , এবং তারা কীসের জন্য বস্তু রাখে are for

এটি বলেছে, প্রথমটির মধ্যে list.add(component)এবং component.add_to(list)পছন্দ করে। সাধারণভাবে "সক্রিয় ট্রানজিটিভ" ক্রিয়াগুলি তাদের প্যাসিভ বা রিফ্লেক্সিভ অংশগুলির প্রতি শ্রদ্ধার সাথে আরও ভাল প্রতিনিধিত্ব করে। ডিজাইন সীমাবদ্ধ না করা অবধি


2

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

এছাড়াও যা গুরুত্বপূর্ণ হিসাবে গুরুত্বপূর্ণ তা হল আপনার ক্লাসগুলির জন্য চয়ন করা নাম as পদ্ধতির নাম দেখার সময় এগুলি প্রচুর প্রসঙ্গ সরবরাহ করে। এর মতো একটি পদ্ধতি স্বাক্ষর:

public User Find(int userId);

এর চেয়ে বোঝা সহজ:

public Person Find(int personId);

কারণ শ্রেণীর নাম থেকে প্রাপ্ত প্রসঙ্গটি Userপ্রোগ্রামারকে Find()আপনার সিস্টেমের ব্যবহারকারীকে নির্দিষ্ট ধরণের ব্যক্তি সনাক্ত করার জন্য বলে । Personক্লাসটি ব্যবহার করে এমন সংস্করণ আপনাকে প্রথমে কেন পদ্ধতিটি ব্যবহার করতে হবে তার কোনও প্রসঙ্গ আপনাকে দেয় না।


1

আপনার প্ল্যাটফর্মের অন্যরা কীভাবে এটি করেন তা দেখুন - কিছু বড় প্লেয়ারের কাছে এমনকি কোড শৈলী এবং নামকরণের নির্দেশিকা থাকতে পারে।

কিছু প্ল্যাটফর্মগুলি সংক্ষিপ্ত নাম পছন্দ করে (উদাহরণস্বরূপ, উইন 32 সি এপিআই- _tcsstrতে স্ট্রিংয়ের মধ্যে স্ট্রিং সন্ধান করার ফাংশন - এটি কি সুস্পষ্ট নয়?), অন্যরা ব্রেভিটির পক্ষে পাঠযোগ্যতার পক্ষে যান (উদ্দেশ্য-সি এর জন্য অ্যাপলের কোকো কাঠামোয় , স্ট্রিংয়ের একটি স্ট্রিংকে অন্য স্ট্রিংয়ের সাথে প্রতিস্থাপন এবং অনুলিপি হিসাবে ফলাফলটি ফেরত দেওয়ার পদ্ধতি stringByReplacingOccurrencesOfString: withString:)। আমি উত্তরোত্তরগুলি বোঝার পক্ষে যথেষ্ট সহজ, এবং কেবলমাত্র লেখার জন্য মাঝারি শক্ত (বিশেষত কোড সমাপ্তির সাথে)।

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


1
  1. ইংরেজী ধরে নিন, যদি না এই কোডে কাজ করে এমন প্রতিটি বিকাশকারী একই অ-ইংরেজি ভাষায় কথা বলতে না পারে।

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

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


এমনকি কোডে কাজ করে এমন প্রতিটি বিকাশকর্তা যদি অ-ইংরাজী কথা বলতে পারেন, তবুও ইংরেজি ব্যবহার করুন ...!
এমভিভিশন

0
  1. উপসর্গ ব্যবহার করুন। যদি গুচ্ছ পদ্ধতিতে এমন কিছু করার জন্য ব্যবহার করা হয় বা কোনওভাবে একসাথে দলবদ্ধ করা যেতে পারে, তবে এই পদ্ধতির কী সাধারণ রয়েছে তা দেখানোর জন্য তাদের নামের আগে একটি সাধারণ উপসর্গ রেখে দিন।
  2. যদি আপনি অন্যরা তাত্ক্ষণিকভাবে নামগুলি বুঝতে চান (এপিআই নামকরণের ক্ষেত্রে গুরুত্বপূর্ণ) আপনি অস্পষ্ট সংক্ষেপণ ব্যবহার করবেন না
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.