আজ () কেন অপরিষ্কার কার্যকারণের উদাহরণ?


38

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

উইকিপিডিয়া নিবন্ধটি বলেছে "বিভিন্ন সময় এটি বিভিন্ন ফলাফল দেয়" তবে এটি ভিন্নরূপে বলার মতো x sin(x)আপনাকে বিভিন্ন অনুপাত দেয়। এবং sin(x)তাদের খাঁটি ফাংশনের উদাহরণ।


8
আপনি যদি দিনের সময় পার করেন তবে ফাংশনটি কী করবে?
জেবি কিং

1
আমি আশা করি এটি আপনাকে দিনের সময় দেবে। (সবচেয়ে দরকারী ফাংশন নয়)। তবে এর কোনও যুক্তি নেই, যা আমি মনে করি উত্তরের মূল।
ব্র্যাড

3
আপনি কি তার আউটপুট পূর্বাভাস করতে পারেন (আপনি সরবরাহ করেছেন ইনপুট পরামিতিগুলির উপর ভিত্তি করে)?
ড্যানিয়েল বি

1
@ ড্যানিয়েলবি অনুপস্থিত / নাল ইনপুট প্যারামিটারটি বেরিয়ে আসার কোনও ভবিষ্যদ্বাণীপূর্ণ শক্তি নেই। কেবলমাত্র আমি যা করতে পারি তা হল আমার কব্জি ঘড়ির দিকে নজর দেওয়া (আমার সেল ফোনটি জে কে)।
ব্র্যাড

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

উত্তর:


103

কোনও আনুষ্ঠানিক ইনপুট যুক্তি না থাকায় এটি কি?

কারণ আউটপুট এমন কোনও কিছুর উপর নির্ভর করে যা কোনও বর্তমান নয় input

দিনের আসল সময়টিকে "ফাংশনের ইনপুট" হিসাবে বিবেচনা করা হয় না কেন?

কারণ আপনি এটি প্যারামিটার হিসাবে পাস করেন নি। যদি আপনি এটি একটি প্যারামিটার হিসাবে পাস করেন তবে ফাংশনটি তারিখগুলিতে একটি পরিচয় ফাংশনে পরিণত হবে, এটি বেশ অকেজো। কোনও Today()ফাংশনের পুরো পয়েন্ট হ'ল এমন কোনও আউটপুট যা বাহ্যিক এবং ক্রমাগত পরিবর্তিত মান (সময়) এর উপর নির্ভর করে on

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


2
যদিও বাস্তবতার সময়টি একটি ইনপুটের ধরণ , কারণ এটি একটি ইনপুট হিসাবে দেওয়া হয় না এবং এটি ফাংশনটির নিয়ন্ত্রণের বাইরে (উভয় অভ্যন্তরীণভাবে এবং যিনি কল করছেন তার নিয়ন্ত্রণের বাইরে Today()) Today()অশুদ্ধ হয়ে যায় becomes Today()ফাংশন একটি নিরীহ উদাহরণ একটি বিট হতে পারে। আরও উপযুক্ত কিছু Count()ফাংশন হতে পারে । গণনা করার জন্য একই সংখ্যক আইটেম দেওয়া Count()সর্বদা একই সংখ্যায় ফিরে আসবে, তবে যেহেতু এটি এর পরিধি বাইরে Count()নয় এটি অপরিষ্কার।
ব্র্যাড

1
@ ব্র্যাড এটি কিছুটা ধূসর অঞ্চল - একটি অন্তর্নিহিত আসল যুক্তি রয়েছে - অ্যারে বা তালিকা। অপরিবর্তনীয় তালিকা এবং একই যুক্তি প্রতিবার দেওয়া হয়েছে এটি সর্বদা একই মান প্রদান করবে।
সর্বোচ্চ

34
"বাস্তবতার সময় একটি ইনপুট সাজানো" - হ্যাঁ; প্রকৃতপক্ষে, গ্লোবাল রাষ্ট্র সমস্ত কার্যক্রমে স্পষ্টভাবে উপলব্ধ (যেমন 'একটি ইনপুট এর ধরণের'), তবে তারা যদি তার ফলাফলের জন্য এটির উপর নির্ভর করে তবে তারা অশুচি!
আকাশম

4
count()বেশিরভাগ প্রোগ্রামিং ভাষার @ ব্র্যাড অবশ্যই শুদ্ধ। এটির একটি স্পষ্ট ইনপুট মান রয়েছে: সংগ্রহ যাঁর গণনা আপনি চান। যেমন একটি সিনট্যাক্স দ্বারা বিভ্রান্ত করবেন না myCollection.count(); এটা শুধু চিনি count(myCollection)
আন্দ্রেস এফ।

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

24

sin(x)যতক্ষণ xএকই থাকে ততক্ষণ সর্বদা একই মান প্রদান করবে । Today()সময়ের সাথে সাথে বিভিন্ন ফলাফল ফেরত দিতে পারে কারণ এটি আপনার নিয়ন্ত্রণের বাইরের মানের উপর নির্ভর করে । উদাহরণস্বরূপ, যদি আপনার প্রোগ্রাম নিয়ন্ত্রণের বাইরে কিছু পরিবর্তন সিস্টেমের অভ্যন্তরীণ $current_datetime যখন আপনার প্রোগ্রাম চলছে, Today()হঠাৎ ভিন্ন ফলাফল উত্পাদ হবে।


"সর্বদা একটি আলাদা মান ফেরত দেবে" হ'ল ... অশুচি শব্দবন্ধ। উইকিপিডিয়া বলে "আয় সপ্তাহের বর্তমান দিবস" যার অর্থ সোমবার প্রাপ্ত মান পৃথক করা হবে না
মশা

7
@ গ্যানাট: সত্য, যদি না আপনার প্রোগ্রামের বাহ্যিক কোনও কিছু আপনার কম্পিউটারের অভ্যন্তরীণ ক্যালেন্ডার পরিবর্তন করে যাতে হঠাৎ এটি মনে হয় বৃহস্পতিবার। তারপরে কলিং Today()সোমবার "বৃহস্পতিবার" ফিরে আসত।
হতাশ

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

3
@ ডেলানন: হ্যাঁ, এটি নিষ্পাপ ডাটাবেস স্ক্রিপ্ট লেখকদের নিষিদ্ধকরণ! : পি "তবে কীভাবে এটি 300 রেকর্ড মিস করতে পারে? গতকাল সকালে আমি এটি পরীক্ষা করে নিলে স্ক্রিপ্টটি ঠিকঠাকভাবে কাজ করেছিল!"
হতাশ

@ ডেলান এটি নিশ্চিত আমি শুধু উল্লেখ করেছিলেন যে, ব্যবহার সবসময় প্রাথমিক শাব্দিক (বর্তমান সংস্করণ উত্তরে সংশোধন পারা ) কিছুটা যথাযথ নয় এমন ছিল
মশা

13

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

একটি খাঁটি ফাংশন হবে int Add(int a, int b) {return a + b;}। ফাংশনটি যা দেওয়া হয় তা সম্পূর্ণরূপে কাজ করে এবং অন্য কোনও বাহ্যিক রাষ্ট্রের ডেটা ব্যবহার করে না। এর প্রাকৃতিক ফলাফল হ'ল আপনি Add(2,2)সময় থেকে শেষ অবধি এখন থেকে 4 পেতে পারেন । এছাড়াও, কারণ ফাংশনটি কোনও বাহ্যিক অবস্থার পরিবর্তন করে না (এটির কোনও "পার্শ্ব প্রতিক্রিয়া" নেই), এখন থেকে 2 এবং 2 যোগ করুন (টাইম) শেষ হওয়া অবধি সিস্টেমের অন্য কিছু পরিবর্তন করবে না, আপনি না হলে কোনও ভেরিয়েবলের জন্য ফাংশনটির ফলাফল নির্ধারণ করুন বা অন্যথায় স্থিতি আপডেট করার জন্য মানটি ব্যবহার করুন (যা নিজেই ক্রিয়াকলাপ দ্বারা পরিচালিত কোনও অপারেশন নয়)। কার্যত সমস্ত শাস্ত্রীয় গাণিতিক ক্রিয়াকলাপগুলি খাঁটি ফাংশন এবং এগুলি হিসাবে প্রয়োগ করা যেতে পারে।

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

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

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


8

এটি মোটামুটি সুস্পষ্ট বলে মনে হয় যে এই ফাংশনটি পৃষ্ঠার একেবারে শুরুতে প্রদত্ত বিশুদ্ধতার প্রথম পরীক্ষায় ব্যর্থ হয়েছে:

  1. ফাংশন সর্বদা একই আর্গুমেন্ট মান (গুলি) প্রদত্ত একই ফলাফলের মানটি মূল্যায়ন করে। ফাংশন ফলাফলের মান কোনও গোপন তথ্য বা অবস্থার উপর নির্ভর করতে পারে না যা প্রোগ্রামের প্রয়োগের সময় বা প্রোগ্রামের বিভিন্ন মৃত্যুদন্ডের মধ্যে পরিবর্তন হতে পারে বা এটি I / O ডিভাইসগুলির কোনও বাহ্যিক ইনপুটের উপর নির্ভর করতে পারে না।

নোট করুন যেহেতু এটি কোনও আর্গুমেন্ট নেয় না, তেমনি একটি সম্ভাব্য যুক্তি মানগুলির সেট রয়েছে - খালি সেট। এবং এই ফাংশন একই 'আর্গুমেন্ট মান (গুলি)' এর জন্য বিভিন্ন ফলাফল করতে পারে এবং করতে পারে ।

উপরন্তু, ফাংশন ফলাফলের মান নেই এ "গোপন ... রাষ্ট্র যে প্রোগ্রাম সঞ্চালনের আয় পরিবর্তিত হতে পারেন" নির্ভর করে। সুতরাং অন্য একটি ব্যর্থতা।


@ জার্গডব্লিউমিটাগ আমি নিশ্চিত নই যে আমি কোথায় দাবি করছি যে কোনও যুক্তি ছাড়াই কোনও ফাংশন কোনও মান ফেরত দিতে পারে না।
আকাশম

মস্তিষ্ক বাতকর্ম. আমি " রিটার্ন মানগুলির একমাত্র সম্ভাব্য সেট" পড়েছি ।
Jörg W Mittag

8

() => 1এটি একটি শুদ্ধ ফাংশন হবে, যেহেতু এটি সর্বদা 1 প্রদান করে। Today()"সোমবার" বা "মঙ্গলবার" বা অন্য কোনও মান ফিরে আসতে পারে।

এটিকে ভাবার আর একটি উপায় খাঁটি ফাংশন রাষ্ট্রের উপর নির্ভর করে না। বিশ্বকে সাধারণত রাষ্ট্র হিসাবে বিবেচনা করা হয়। আজকের দিনটি কী তা জানতে আপনাকে বাস্তবের অবস্থা জানতে হবে।

তবে আপনি কী তা জানতে বিশ্বের রাষ্ট্র সম্পর্কে বিশেষ কিছু জানার দরকার sin(x)নেই। এবং কখনও sin(x)কোনও প্রদত্তের জন্য কল xকরলে একই মান ফিরে আসবে।


উইকিপিডিয়া বলেছে "সপ্তাহের বর্তমান দিনটি ফিরে আসে", যার অর্থ এটি সোমবার, মঙ্গলবার ইত্যাদিতে ফিরে আসতে পারে তবে "1/23/2013" বা "1/24/2013" নয়
gnat

7
@gnat: আপডেট হয়েছে, তবে পার্থক্যটি আসলে বস্তুগত ছিল না।
গুভান্তে

2

Date(timestamp)একটি খাঁটি ফাংশন হবে। কারণ এর আদর্শশক্তি। এবং কারণ কোনও পার্শ্ব-প্রতিক্রিয়া হবে না।

Today()আপনি যখন ফোন করবেন তার উপর নির্ভর করে এর ফলাফলটি পরিবর্তিত করতে পারে । এটাই এটিকে অপবিত্র করে তোলে। এটা আদর্শবান নয়। যদিও এর কোনও পার্শ্ব-প্রতিক্রিয়া নেই, তবে এটি খাঁটি করে না।


2

খাঁটি ফাংশনগুলি নিয়ে আলোচনা করার সময় আমি এখানে একটি ছোট সিডো কোড মনে করি

newValue = Function();
while(true)
{
   oldValue = newValue;
   newValue = Function();
   assert( newValue == oldValue );
}

যদি তা অনির্দিষ্টকালের জন্য চলে এবং কখনও কখনও দৃ never়তাটিকে ট্রিগার করতে না পারে তবে এটি খাঁটি ফাংশন। আরও তাই, আপনার যদি কোনও ফাংশন থাকে যা আর্গ ব্যবহার করে তবে কিছুটা পরিবর্তন ...

oldValue = Function( importantVariableToYourApp );
newValue = Function( importantVariableToYourApp );
assert( newValue == oldValue );

যদি আপনি এটি আপনার অ্যাপ্লিকেশনে প্রতিটি পরিবর্তনশীল অ্যাসাইনমেন্টের পরে ব্যবহার করতে পারেন এবং এটি আপনার অ্যাপ্লিকেশনে ফলাফল পরিবর্তন করে না এবং এটি দৃ the়ভাবে ব্যর্থ হতে পারে না তবে এটি একটি বিশুদ্ধ কাজ function


2

প্রথমত, আর্গুমেন্ট ব্যতীত কোনও ফাংশন (বা ইনডেক্স ব্যতীত একটি অ্যারে বা কীগুলি ছাড়াই একটি মানচিত্র) এর মতো কোনও জিনিস নেই। এক বা একাধিক আর্গুমেন্টের মানকে অন্য একটি মানকে মানচিত্র করা এটি কোনও ফাংশনের সংজ্ঞায়িত বৈশিষ্ট্য।

সুতরাং, todayহয় মোটেও একটি ফাংশন নয়, তাই কোন শুদ্ধ ফাংশন। অথবা আমরা বাক্য গঠনটি ব্যাখ্যা করতে পারি

today()

একটি বিট যাতে এটি মানে

today   ()      -- today, applied to the value ()

উদাহরণস্বরূপ, হাস্কেলের মধ্যে এটি বৈধ হবে:

data Day = Mon | Tue | Wed | Thu | Fri | Sat | Sun deriving Show
today :: () -> Day
today () = ....?
main = print (today())

কারণ একক মান () সহ একটি () রয়েছে।

প্রশ্নটি কেবলমাত্র, todayসপ্তাহের দিনটি কীভাবে গণনা করা যায়, যদি এটি কেবল () থাকে? সিস্টেম টাইমার না পড়ে, সরাসরি বা সহায়তাকারী অপবিত্র ফাংশনগুলির মাধ্যমে এটি কেবল সম্ভব নয়।

সিস্টেম টাইমার বিশ্ব রাষ্ট্রের জন্য একটি দুর্দান্ত উদাহরণ example


1

সমস্যাটি today()হ'ল কোনও ফাংশনে দুই বা ততোধিক বার বলা হয়ে থাকলে এটি ভিন্ন ফলাফল আনতে পারে।

এখানে একটি কোড উদাহরণ রয়েছে, এটি একটি বাগ প্রবর্তন করতে পারে।

function doSomething(when)
{
     if(today() == when)
     {
           // open a resource or create a temp file.....
     }

     // do some other work

     if(today() == when)
     {
           // close the resource or delete temp file.....
     }
}

উপরের উদাহরণে এটি সম্ভব। যে দ্বিতীয় ifবিবৃতি কার্যকর হবে না। এমনকি যদি প্রথমটি করে। সংস্থানটি খারাপ অবস্থায় ফেলে রাখা।


1

খাঁটি ফাংশন হওয়ার জন্য, একই প্যারামিটার সরবরাহ করার জন্য প্রতিবার একই ফলাফল দিতে হবে।

প্রতিবার যখন আমরা কল Today()করি তখন আমরা এটিকে একই পরামিতিগুলি সরবরাহ করি (কোনওটিই নয়) এবং তবুও অগত্যা একই ফলটি পাওয়া যাচ্ছে না (সোমবার, মঙ্গলবার ইত্যাদি)।


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

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