প্রথম শ্রেণির কার্যাদি


11

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

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

[সম্পাদনা] আমি এখনও পর্যন্ত প্রতিক্রিয়া প্রশংসা করি। যেহেতু আমাকে দেখানো হয়েছে যে এখন অনেকগুলি ভাষা এখন প্রথম শ্রেণির ফাংশনগুলিকে সমর্থন করে তাই আমি প্রশ্নটি পুনরায় বাক্যটি বলব কেন ভাষাগুলি প্রয়োগ করতে এত সময় লাগবে? [/ সম্পাদনা]


3
আমি একমত নই যে সি # "অনুরূপ জিনিস" করতে পারে। আমি বলব এটির সমস্ত উদ্দেশ্য এবং উদ্দেশ্যগুলির জন্য (এটি কোন ধরণের আপনার ভিত্তি নষ্ট করে দেয়) জন্য প্রথম শ্রেণির ফাংশন রয়েছে।
এটিতে

@ লোগান - আমি সি # উদাহরণগুলি অন্তর্ভুক্ত করে কিনা তা নিয়ে বিতর্ক করছিলাম তবে এই উইকিপিডিয়া প্রবেশের ভিত্তিতে সিদ্ধান্ত নিয়েছিলাম । এন্ট্রি অনুসারে, "যেহেতু ফাংশনটির গতিশীল স্থিতি রাখা বস্তুগুলি ম্যানুয়ালি তৈরি করতে হবে" যেহেতু সত্যিকারের প্রথম শ্রেণির ফাংশন নেই। যাইহোক, যদি এটি একটি ভুল বিবৃতি হয়, আমি কেন জানতে আগ্রহী! (সর্বোপরি, আমি এখানে শিখতে এসেছি এবং আমার পথে আটকে যাব না!)
জেটি

2
যে উইকিপিডিয়া এন্ট্রি পুরানো। একটি আধুনিক সি # একটি সঠিক ল্যাম্বদা সরবরাহ করে।
এসকে-যুক্তি

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

1
@ লোগান এবং এসকে-লজিক - আমি আপনার প্রতিক্রিয়া এবং গঠনমূলক থাকার প্রশংসা করি। আমি এখনও শিখছি এবং শিখার জন্য না খুব সুন্দর, তাই আমি এটি প্রশংসা করি। মন্তব্য এবং উত্তরের জন্য অনেক ধন্যবাদ!
জেটি

উত্তর:


5

সি #, ভিবি.এনইটি, পাইথন, জাভাস্ক্রিপ্ট, এখন পর্যন্ত সি ++ 0 এক্সও প্রথম শ্রেণীর ফাংশন সরবরাহ করে।

হালনাগাদ:

ক্লোজারগুলির একটি বাস্তবায়নের জন্য ল্যাম্বদা-উত্তোলন প্রয়োজন - এটি প্রয়োজনীয় প্রযুক্তিগত প্রোগ্রামারদের জন্য মূলত একটি কৌশল। যথাযথ প্রথম শ্রেণির ফাংশন (যার মধ্যে ক্লোজারগুলি অন্তর্ভুক্ত) এর জন্য রানটাইম এবং ভিএম থেকে কমপক্ষে কিছু সমর্থন প্রয়োজন। অপরিহার্য বিশ্বে পুরানো কার্যকরী কৌশলগুলি অবলম্বন করতে কিছু সময় নিয়েছে।

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

এই জাতীয় সমস্ত ধারণাটি শিল্প দ্বারা হজম হতে সময় নেয়।


আমি প্রতিক্রিয়াগুলির উপর ভিত্তি করে মূল প্রশ্নটি সম্পাদনা করেছি।
জেটি

প্রথম শ্রেণির ফাংশন! = ক্লোজার (এবং জিসি পরবর্তীগুলির জন্য আরও বেশি প্রয়োজনীয়)। যদিও, হ্যাঁ, এগুলি নিবিড়ভাবে সম্পর্কিত এবং আপনি খুব কমই, যদি কখনও হন তবে তাদের বিচ্ছিন্ন দেখুন।

@ ডেলান, কমপক্ষে কিছু ধরণের লেজিকাল ক্লোজার ফাংশন ছাড়া রান-টাইমে কম্পোজেবল এবং গঠনযোগ্য নয়, যা প্রথম শ্রেণির ফাংশন সংজ্ঞা জন্য বাধ্যতামূলক।
এসকে-যুক্তি

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

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

5

প্রথম শ্রেণির ফাংশন বন্ধ না করে অনেক কম আকর্ষণীয়।

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

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

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

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

এটি বলেছিল, আমি অনুভব করি যে আমি যখন কোনও বাহু অনুভব করছি যখন সেগুলি ছাড়াই কোড করতে বাধ্য হয়।


আপনি হয় সমস্ত পদ্ধতি সিল হিসাবে বিবেচনা করতে পারেন বা কেবল আপনার সর্বাধিক যত্নশীল সিলটি করতে পারেন এবং আপনি ভাল থাকবেন।
আলেক্সি আভেরচেনকো

@ আলেক্সি অভারেঞ্চকো বলতে পেরে আমি আনন্দিত যে আপনি এর দ্বারা কী বোঝাতে চেয়েছেন আমি 100% নিশ্চিত নই। দুঃখিত আমি আপনার মন্তব্যটি এখনি মিস করেছি। গুগলিং "সিলড পদ্ধতিগুলি"।
এরিক রেপেন

4

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

এটি ভাষার অন্যান্য লক্ষ্যগুলি অর্জন করা আরও শক্ত করে তুলতে পারে:

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

একই শিরাতে, কেউ জিজ্ঞাসা করতে পারেন যে কোনও প্রোগ্রামিং ভাষা L1-এ খুব আলাদা ভাষা L2 এর বৈশিষ্ট্য F কেন নেই।


1

আমি মনে করি প্রথম সমস্যাটি একটি ভুল বোঝাবুঝি যা অবজেক্ট-ওরিয়েন্টেড এবং ফাংশনাল মিশ্রিত হতে পারে না। কমপক্ষে উইকিপিডিয়া উভয় হিসাবে বর্ণিত ভাষার একটি দ্রুত তালিকা: জাভাস্ক্রিপ্ট , অ্যাকশনস্ক্রিপ্ট , পাইথন , সি # , এফ #

দ্বিতীয় সমস্যাটি প্রথম শ্রেণির ফাংশনগুলির সংজ্ঞা বলে মনে হচ্ছে - উদাহরণস্বরূপ, আপনি সি # এগুলি কেন মনে করেন না?

আমি কোনও কার্যনির্বাহী ভাষা বিশেষজ্ঞ নই, তাই দয়া করে আমি ভুল হলে মন্তব্যে আমাকে সংশোধন করুন, তবে আমার বোঝাটি হ'ল প্রথম শ্রেণির ফাংশনগুলির অন্তর্ভুক্তি কোনও ভাষা কার্যকরী দৃষ্টান্তকে সমর্থন করে কিনা সেগুলি কম-বেশি সংজ্ঞায়িত করে

আসল প্রশ্ন কি?

সুতরাং, বুঝতে যে অবজেক্ট ওরিয়েন্টেড ভাষায় পারেন এছাড়াও কার্মিক হতে, এবং এই ভাষায় প্রথম শ্রেণীর ফাংশন রয়েছে, এটা প্রশ্নের তোমাদের জন্য খুঁজছি হয় মত শোনাচ্ছে কেন কিছু অবজেক্ট ওরিয়েন্টেড ভাষায় প্রথম শ্রেণীর ফাংশন ধারণ করে না?

ফাংশন ওভারলোডিং

এর প্রাথমিক কারণগুলির মধ্যে একটি হ'ল প্রথম শ্রেণীর ফাংশনগুলি সংজ্ঞায়িত করতে সমস্যা যখন ভাষাও ফাংশন ওভারলোডিংকে সমর্থন করে (জাভাতে উদাহরণ হিসাবে) বেছে নিয়েছে:

public int dispatchEvent(Event event);
public int dispatchEvent(String event, Object data);

কোন dispatchEventফাংশনটি একটি চলক উল্লেখ করবে?

ক্লাস-ভিত্তিক প্রোগ্রামিং

শ্রেণিভিত্তিক প্রোগ্রামিং কোনও ভাষা প্রথম শ্রেণীর অবজেক্টগুলিকে সমর্থন করা থেকে বিরত রাখে না, তবে এটি আরও বিভ্রান্তিকর করে তুলতে পারে বা উত্তরগুলির প্রশ্নের উত্তর যোগ করতে পারে।

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

আপনি যখন (অ-ডায়নামিক) ক্লাসগুলি যুক্ত করবেন তখন আপনার এমন ফাংশন রয়েছে যা অন্তর্নিহিতভাবে একটি উদাহরণের সাথে আবদ্ধ থাকে, কেবল ক্লাস নিজেই নয়। এটি সুনির্দিষ্টভাবে Function.applyতারা এটির সাথে কীভাবে আচরণ করেছে তা অনুসন্ধান করার জন্য আমি খনন করে নি the


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

@ ডেলানান আপনার তখনই সঠিক উইকিপিডিয়ায় যেতে হবে ... যদি না "কার্যকরী ভাষা" এবং "ভাষা একটি কার্যকরী দৃষ্টান্তকে সমর্থন করে" তবে দুটি ভিন্ন জিনিস।
নিকোল

1
@ রেনসিস: এগুলি আলাদা জিনিস। আপনি সি তে অবজেক্টের মতো (এমনকি ভিটেবল সহ) কিছু তৈরি করতে পারেন তবে এটি সুন্দর নয়। "ফার্স্ট-ক্লাস ফাংশনগুলি" থেকে "ফাংশনাল ল্যাংজ" থেকে যাওয়া মোটেই খারাপ নয়, তবে এটি এখনও একটি পার্থক্য। এছাড়াও, উইকি (সঠিকভাবে) যে পৃষ্ঠায় আপনি লিঙ্ক করেছেন তার উপরে উল্লেখ করেছে "এই বৈশিষ্ট্যগুলি কার্যকরী প্রোগ্রামিং শৈলীর জন্য প্রয়োজনীয়তা [...]"। (যেমন: "সংজ্ঞায়িত বৈশিষ্ট্য" নয়) এবং এফপিতে পৃষ্ঠায় থাকা আরও কয়েকটি বৈশিষ্ট্য তালিকাভুক্ত করে।

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

0

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

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