কোনও কনস্ট্রাক্টরের বিপরীত কোনও ফাংশনের জন্য উপযুক্ত শব্দটি কী - কোনও ডেটা টাইপ থেকে কোনও মান আন-র্যাপ করতে?


13

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

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

newtype Wrap = Wrap { unwrap :: Int }

এখানে Wrapকনস্ট্রাক্টর আর unwrapকি?

প্রশ্নগুলি হ'ল:

  • unwrapফাংশনাল প্রোগ্রামিংয়ে আমরা কীভাবে কল করব ? Deconstructor? বিনাশকারী? নাকি অন্য কোনও পদ দ্বারা?
  • এবং স্পষ্ট করে বলতে কি, এই / অন্যান্য পরিভাষাগুলি কি অন্যান্য কার্যকরী ভাষার ক্ষেত্রে প্রযোজ্য , বা এটি কেবল হাস্কেলটিতে ব্যবহৃত হয়েছে?
  • সম্ভবত এছাড়াও, অ-কার্যকরী ভাষায় সাধারণভাবে এটির জন্য কোনও পরিভাষা আছে ?

আমি উভয় পদ দেখতে পেয়েছি, উদাহরণস্বরূপ:

... প্রায়শই, কেউ তাদের সাথে কাজ করা সহজ করার জন্য স্মার্ট কনস্ট্রাক্টর এবং ডেস্ট্রাক্টর সরবরাহ করে। ...

Haskell, উইকি , অথবা

... এখানে সাধারণ থিমটি হল কনস্ট্রাক্টর - ডিকনস্ট্রাক্টর জোড়া যেমন ...

জন্য Haskell উইকিবুক ইন (এখানে এটা সম্ভবত একটি বিট আরো সাধারণ অর্থে বোঝানো হচ্ছে), অথবা

newtype DList a = DL { unDL :: [a] -> [a] }

ইউএনডিএল ফাংশনটি হ'ল আমাদের ডিকনস্ট্রাক্টর , যা ডিএল নির্মাণকারীকে সরিয়ে দেয়। ...

মধ্যে রিয়াল পৃথিবী Haskell,


3
ধ্বংসকারী সবচেয়ে বেশি ব্যবহৃত শব্দ হিসাবে মনে হয়
জাভিওর

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

1
আমি আপনাকে পরামর্শটি দিয়েছি যে প্রশ্নটি থেকে "ডেস্ট্রাক্টর" শব্দটি সরিয়ে দিন, তার পরিবর্তে "আনপ্র্যাপার" ব্যবহার করুন এবং জিজ্ঞাসা করুন যে ভাষাগুলিতে এই ধরণের কোনও সাধারণ নাম আছে কিনা :)
Andres F.

1
.অন্যাপলি, বা "এক্সট্র্যাক্টর" স্কালায় একটি মোটামুটি এনালগ, তবে সম্ভবত এর কোনও নাম নেই কারণ বেশিরভাগ ক্ষেত্রে আপনি কেবল ম্যাচের প্যাটার্ন করেন
জিন টি

উত্তর:


5

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


1
আকর্ষণীয় কিভাবে একই জিনিস একটি ভিন্ন মেয়াদে এক ভাষা থেকে পরবর্তী, সি # নির্বাচিত মধ্যে মানচিত্র পালাক্রমে মত পায়, Haskell ভাঁজ পাতার মর্মর / জাভা কমাতে হয়েছে এবং রুবি উদ্বুদ্ধ করেছে, Haskell বেঁধে Scala হয়েছে flatmap C # এর selectmany করেছে
জিমি Hoffa

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

8

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

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


1
নোট করুন যে সি ++ / সি # / জাভা "ডেস্ট্রাক্টর" শব্দটির ব্যবহার হাস্কেলের সাথে মেলে না। একই শব্দ, বিভিন্ন ধারণা।
আন্দ্রেস এফ

1
@AndresF। হ্যাঁ, এজন্যই আমি এই বাক্যটি যুক্ত করেছি:Maybe in Haskell this does not translate really well but I don't know the language.
মার্কো ফিসেট

1
যথেষ্ট ভাল, আমি আমার ডাউনটোট সরিয়েছি। আমার মনে হয় যা ভুল পথে চালিত তা হ'ল আসল প্রশ্ন, যা মনে হয় একটি জিনিস জিজ্ঞাসা করছে, তবে আসলে অন্যটিকে জিজ্ঞাসা করছে! :)
আন্দ্রেস এফ

@AndresF। হ্যাঁ প্রশ্নটি বিভ্রান্তিকর। ওপি জিজ্ঞেস করল: What's the proper term for a function inverse to a constructor?। প্রশ্নটি কিছু হাস্কেল ধারণার সাথে সুনির্দিষ্ট হওয়ার জন্য সম্পাদনা না করা অবধি আমি আমার উত্তরটি যেমন রেখেছি ততক্ষণ রেখে দেব।
মার্কো ফিসেট

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

6

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

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

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

আমি নিজে কখনও হাসকল প্রসঙ্গে ব্যবহৃত 'ডেস্ট্রাক্টর' (বা 'ডিকনস্ট্রাক্টর') শব্দটি শুনিনি; অ্যান্ড্রেস এফ. নোট হিসাবে, তবে এটি কখনও কখনও কোনও ফাংশনকে বোঝাতে ব্যবহৃত হয় যা কোনও নির্মাণকারীর দ্বারা প্রবর্তিত মোড়কে পূর্বাবস্থায় ফিরে আসে। আমার বোঝার জন্য, একটি রেকর্ড প্রাপ্তি একজন ডেস্ট্রাক্টর হিসাবে কাজ করতে পারে তবে নিয়মিত ফাংশন করতে পারে, তবে তারা আরও জটিল ডেটা টাইপ থেকে কোনও মান ফিরে পেল। উদাহরণগুলি অন্তর্ভুক্ত করে maybeএবং eitherপ্রিলিওড থেকে।

মনে রাখবেন যে unwrap, আপনার উদাহরণে কয়েকটি জিনিস হতে পারে:

  • একটি ফাংশন (ঠিক অন্য যেমন:) আপনি করতে পারেন, উদাহরণস্বরূপ, করতে পারেন map unwrap [ Wrap 23, Wrap 42 ]; এই ব্যবহারটি ওওপি-তে মোটামুটি একটি পদ্ধতির সমতুল্য।
  • একটি রেকর্ড নির্মাণে একটি রেকর্ড ক্ষেত্র নির্দিষ্টকরণকারী: let w = Wrap { unwrap = 23 }
  • রেকর্ড আপডেটে একটি রেকর্ড ক্ষেত্র সুনির্দিষ্টভাবে উল্লেখ করা: let w' = w { unwrap = 23 }; এটি ওওপি-তে সেটার পদ্ধতির মতো (যদি আপনি অনেক কিছু নিচু করেন)।
  • প্যাটার্ন মিলে একটি রেকর্ড ক্ষেত্র নির্দিষ্টকারী: f Wrap { unwrap = a } = a

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


2
হাস্কেল সম্প্রদায়ের "ডেস্ট্রাক্টর" শব্দটির ব্যবহারের প্রমাণ: haskell.org/pipermail/beginners/2010- এপ্রিল / 003946 . html এবং মেইল-আর্কাইভ . com/haskell-cafe@haskell.org/msg26463.html । হাস্কেল লিঙ্গোর একটি "ডেস্ট্রাক্টর" হ'ল একটি "আনপ্রাপ্ত", এটি মেমরির পরিচালনা বা অবজেক্টের চূড়ান্তকরণের সাথে সম্পূর্ণ সম্পর্কিত নয়।
আন্দ্রেস এফ

3
আমার থিসিস ডিরেক্টর, যিনি হাস্কেলের একচেটিয়াভাবে প্রোগ্রাম করেন তিনিও একজন অপ্রাপ্তদের জন্য "ডেস্ট্রাক্টর" শব্দটি ব্যবহার করেন।
আন্দ্রেস এফ

ঠিক আছে, আমি এই শব্দটি পেলাম না। আপনি একেবারে ঠিক বলেছেন যে, যখন এটি ব্যবহার করা হয়, তখন এটি ওওপি-তে ডেস্ট্রাক্টর ধারণার সাথে একেবারেই কোনও সম্পর্ক রাখে না।
টিডামাররা

@ অ্যান্ড্রেসএফ .: আপনার মন্তব্যকে সম্মান জানাতে সম্পাদিত।
টিডামার্স

@AndresF। এটি আকর্ষণীয় যেহেতু আমি এটি কখনও ধ্বংসাত্মক হিসাবে উল্লেখ করতে শুনিনি, যদিও সেটিকে বাদ দিলে, এটি কেবল একটি রেকর্ড ক্ষেত্র হিসাবে উল্লেখ করাও সঠিক হবে না এবং আমি যে কৌশলটি "ডেস্ট্রাক্টর" বলে দেখি সেখানে কেবল একটি প্যাটার্ন ম্যাচ হিসাবে দেখায়? ? আমি যখন বুঝতে পারি যে আপনার ম্যাচটি তালিকার বাইরে চলে আসলে এটি "ডেস্ট্রাকচারিং" বলা হয়, এটি সম্ভবত কোনও সম্পর্কিত শব্দ তবে কোনও এডিটি-র রেফারেন্সে? সমস্ত তালিকা তৈরির পরে কেবলমাত্র একটি এডিটি-তে অভিনয় করা যেমন তালিকাটি ঠিক তেমনই
জিমি হোফা

2

আমি মনে করি যে ধ্বংসকারীই বিস্তৃত শব্দ term জাভা এবং ভিবি.এনইটের মতো কিছু ভাষার একটি ফাইনালাইজার রয়েছে। /programming/171952/is-there-a-destructor-for-java


সি ++ - এ থাকা কোনও ডেস্ট্রাক্টর যেমন বরাদ্দকৃত মেমোরি প্রকাশের আগে ক্লিনআপ ক্রিয়া করে languages হাস্কেলের একজন ডেস্ট্রাক্টরেক্টর তার "বাইরের স্তর" থেকে কোনও মান সজ্জিত করে (আপনি এটি কোনও কিছু পরিষ্কার করার জন্য ব্যবহার করেন না)। এগুলি সত্যিকারের সম্পর্কিত ধারণা নয়।
আন্দ্রেস এফ

2
আমার ধারণা আমি বুঝতে পারি নি যে এটি হাস্কেল প্রশ্ন kel
জেফো

এটা আসলে পরিষ্কার ছিল না। প্রশ্নটি এখন আবার ফিরিয়ে আনা হয়েছে এবং সংস্কার করা হয়েছে :)
আন্দ্রেস এফ

2

যেহেতু কোনও ক্রস-ল্যাঙ্গুয়েজ কনভেনশন বলে মনে হয় না, তাই আমি সাধারণত তাদের আহ্বায়ক বলে থাকি , কারণ এটি সেই শব্দটি যা স্ক্যালা সেই সাধারণ ধারণার জন্য ব্যবহার করে এবং কারণ এটি কোনও বিদ্যমান ব্যবহারের সাথে বিভ্রান্ত হওয়ার সম্ভাবনা নেই।

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