দ্রুত পাঠকদের সম্মান জানাতে, আমি প্রথমে সুনির্দিষ্ট সংজ্ঞা দিয়ে শুরু করি, দ্রুত আরও "সরল ইংরাজী" ব্যাখ্যার সাথে চালিয়ে যাই এবং তারপরে উদাহরণগুলিতে চলে যাই।
এখানে সংক্ষিপ্ত এবং সুনির্দিষ্ট সংজ্ঞা উভয়ই দেওয়া হয়েছে :
একটি মোনাড (কম্পিউটার বিজ্ঞানে) আনুষ্ঠানিকভাবে একটি মানচিত্র যা:
X
প্রদত্ত প্রোগ্রামিং ভাষার প্রতিটি প্রকারকে একটি নতুন প্রকারে প্রেরণ করে T(X)
("ধরণের T
মানগুলির সাথে X
" -কম্প্যাটেশন "বলা হয় );
ফর্মের দুটি ফাংশন রচনা করার জন্য f:X->T(Y)
এবং g:Y->T(Z)
একটি কার্যক্রমে একটি বিধি দ্বারা সজ্জিত
g∘f:X->T(Z)
;
একটি উপায়ে যা স্পষ্টভাবে অর্থে সংঘবদ্ধ এবং একটি প্রদত্ত ইউনিট ফাংশন সম্পর্কে সম্মতিহীন pure_X:X->T(X)
, খাঁটি গণনার যে একটি মূল্য গ্রহণ করে যা কেবল সেই মান ফেরায় বলে মনে করা হয়।
সুতরাং সহজ কথায়, একটি মোনাড হ'ল একটি বিধি যা কোনও প্রকার X
থেকে অন্য প্রকারে যাওয়ারT(X)
, এবং দুটি ফাংশন থেকে পাস করার নিয়ম f:X->T(Y)
এবং g:Y->T(Z)
(যা আপনি রচনা করতে চান তবে পারছেন না) একটি নতুন ফাংশনেh:X->T(Z)
। যা অবশ্য কড়া গাণিতিক অর্থে রচনা নয়। আমরা মূলত ফাংশনটির রচনা "নমন" করছি বা কীভাবে কার্যগুলি রচনা করা হয়েছে তা পুনরায় সংজ্ঞায়িত করছি।
এছাড়াও, "স্পষ্ট" গাণিতিক অক্ষগুলি সন্তুষ্ট করার জন্য আমাদের মোনাডের রচনার নিয়ম প্রয়োজন:
- সহযোগিতা : এর সাথে কমপোজ
f
করা g
এবং তারপরে h
(বাইরে থেকে) রচনা g
করা h
এবং তারপরে f
(ভিতর থেকে) সমান হওয়া উচিত ।
- একজাতীয় সম্পত্তি : উভয় পক্ষের পরিচয় ফাংশনটি রচনা
f
করলে ফলন পাওয়া উচিত ।f
আবার সহজ কথায়, আমরা আমাদের ফাংশন রচনাটিকে আমাদের পছন্দ মতো পুনরায় সংজ্ঞায়িত করতে পাগল হতে পারি না:
- আমাদের প্রথমে সংঘবদ্ধতা প্রয়োজন যাতে একটি সারিতে বেশ কয়েকটি ফাংশন রচনা করতে সক্ষম হয়
f(g(h(k(x)))
, এবং ক্রম জোড়ের ক্রম সংশ্লেষ নির্দিষ্ট করে দেওয়ার বিষয়ে চিন্তা করার দরকার নেই। যেহেতু মোনাড নিয়মটি কেবলমাত্র কোনও জোড়া ফাংশন রচনা করবেন তা নির্ধারণ করে , সেই অক্ষিপ্ত ব্যতীত, আমাদের জানতে হবে কোন জোড়াটি প্রথমে রচনা করা হয়েছে ইত্যাদি ইত্যাদি। (নোট যে commutativity সম্পত্তি যে থেকে ভিন্ন f
সঙ্গে স্থিরীকৃত g
একই মত ছিল g
সঙ্গে স্থিরীকৃত f
, যা প্রয়োজন হয় না)।
- এবং দ্বিতীয়ত, আমাদের একচেটিয়া সম্পত্তি প্রয়োজন, যা সহজভাবে বলতে গেলে পরিচয়গুলি তুচ্ছভাবে রচনা করে যা আমরা তাদের প্রত্যাশা করি। সুতরাং যখনই এই পরিচয়গুলি বের করা যায় আমরা নিরাপদে ফাংশনগুলি রিফেক্টর করতে পারি।
আবার সংক্ষেপে: একটি মোনাড হ'ল প্রকারের সম্প্রসারণ এবং রচনা ফাংশনগুলির নিয়ম যা দুটি অক্ষরকেই সন্তুষ্ট করে - সংস্থান এবং একক সম্পত্তি।
ব্যবহারিক শর্তে, আপনি চান যে ভাষা, সংকলক বা কাঠামো যা আপনার জন্য রচনামূলক ক্রিয়াকলাপের যত্ন নেবে সেই মোনাদ আপনার জন্য প্রয়োগ করা হোক। সুতরাং তাদের কার্যকারিতা কীভাবে কার্যকর করা হয় তা চিন্তা করার চেয়ে আপনি নিজের ফাংশনের যুক্তি লেখার দিকে মনোনিবেশ করতে পারেন।
সংক্ষেপে এটি মূলত এটি।
পেশাদারী গণিতজ্ঞ হচ্ছে, আমি কলিং এড়ানোর জন্য পছন্দ করা h
এর "রচনা" f
এবং g
। গাণিতিক কারণ, এটি না। এটিকে "রচনা" বললে ভুলভাবে অনুমান করা h
যায় এটিই আসল গাণিতিক রচনা, যা তা নয়। এমনকি এটি দ্বারা f
এবং অনন্যভাবে নির্ধারিত হয় না g
। পরিবর্তে, এটি আমাদের মোনাডের নতুন "রচনা রচনা" ফাংশনগুলির ফলাফল। যা পরেরটি উপস্থিত থাকলেও প্রকৃত গাণিতিক রচনা থেকে সম্পূর্ণ আলাদা হতে পারে!
এটিকে কম শুকনো করার জন্য, আমি এটি উদাহরণ দিয়ে উদাহরণ দিয়ে বোঝানোর চেষ্টা করি যে আমি ছোট বিভাগগুলি দিয়ে মন্তব্য করছি, যাতে আপনি ঠিক বিন্দুতে এড়াতে পারেন।
ব্যতিক্রম মোনাড উদাহরণ হিসাবে নিক্ষেপ
মনে করুন আমরা দুটি ফাংশন রচনা করতে চাই:
f: x -> 1 / x
g: y -> 2 * y
তবে f(0)
সংজ্ঞায়িত করা হয় না, সুতরাং একটি ব্যতিক্রম e
ছুঁড়ে দেওয়া হয়। তাহলে আপনি কম্পোজিশনাল মানটি কীভাবে সংজ্ঞায়িত করতে পারেন g(f(0))
? আবারও ব্যতিক্রম ছুঁড়ে ফেলুন অবশ্যই! সম্ভবত একই e
। হতে পারে একটি নতুন আপডেট ব্যতিক্রম e1
।
এখানে ঠিক কী ঘটে? প্রথমত, আমাদের নতুন ব্যতিক্রমের মান (বিভিন্ন বা একই) প্রয়োজন। আপনি তাদেরকে কল করতে পারেন nothing
বা null
বা যাই হোক না কেন কিন্তু সারাংশ অবশেষ একই - তারা নতুন মান, যেমন হওয়া উচিত তা করা উচিত হবে না number
আমাদের উদাহরণে এখানে। null
যে null
কোনও নির্দিষ্ট ভাষায় কীভাবে প্রয়োগ করা যেতে পারে সে সম্পর্কে বিভ্রান্তি এড়াতে আমি তাদের ফোন না করার পছন্দ করি । সমানভাবে আমি এড়াতে পছন্দ করি nothing
কারণ এটি প্রায়শই যুক্ত হয় null
যা নীতিগতভাবে যা করা null
উচিত তা হল, যাইহোক, যে নীতিটি প্রায়শই ব্যবহারিক কারণেই বেঁকে যায়।
ব্যতিক্রম ঠিক কি?
এটি যে কোনও অভিজ্ঞ প্রোগ্রামারের কাছে একটি তুচ্ছ বিষয় তবে আমি যে কোনও বিভ্রান্তির কীট নিঃশেষ করতে কয়েকটা শব্দ ফেলে দিতে চাই:
ব্যতিক্রম হ'ল মৃত্যুদন্ড কার্যকর করার অকার্যকর ফলাফলটি কীভাবে ঘটে সে সম্পর্কে তথ্য encapsulating object
এটি কোনও বিবরণ ছুঁড়ে ফেলা এবং একক বিশ্বব্যাপী মান (যেমন NaN
বা null
) প্রত্যাবর্তন করা বা দীর্ঘ লগ তালিকা তৈরি করা বা ঠিক কী ঘটেছিল তা কোনও ডাটাবেসে প্রেরণ এবং বিতরণকৃত ডেটা স্টোরেজ স্তরটিতে অনুলিপি করা থেকে শুরু করে;)
ব্যতিক্রমের এই দুটি চরম উদাহরণগুলির মধ্যে গুরুত্বপূর্ণ পার্থক্যটি হ'ল প্রথম ক্ষেত্রে কোনও পার্শ্ব প্রতিক্রিয়া নেই । দ্বিতীয়টিতে আছে। যা আমাদের (হাজার ডলার) প্রশ্নে নিয়ে আসে:
খাঁটি ফাংশনে ব্যতিক্রম অনুমোদিত?
সংক্ষিপ্ত উত্তর : হ্যাঁ, তবে কেবল তখনই যখন তারা পার্শ্ব-প্রতিক্রিয়া দেখায় না।
দীর্ঘ উত্তর। খাঁটি হতে, আপনার ফাংশনটির আউটপুট অবশ্যই তার ইনপুট দ্বারা স্বতন্ত্রভাবে নির্ধারণ করা উচিত। সুতরাং আমরা আমাদের ব্যতিক্রমটিকে যে নতুন বিমূর্ত মানকে f
পাঠিয়ে আমাদের সংশোধন করি। আমরা নিশ্চিত করে নিই যে মানটিতে বাইরের কোনও তথ্য নেই যা আমাদের ইনপুট দ্বারা অনন্যভাবে নির্ধারিত হয় না, যা । তাই পার্শ্ব-প্রতিক্রিয়া ব্যতীত ব্যতিক্রমের উদাহরণ এখানে:0
e
e
x
e = {
type: error,
message: 'I got error trying to divide 1 by 0'
}
এবং এখানে পার্শ্ব-প্রতিক্রিয়া সহ একটি:
e = {
type: error,
message: 'Our committee to decide what is 1/0 is currently away'
}
প্রকৃতপক্ষে, কেবলমাত্র যদি সেই বার্তাটি ভবিষ্যতে পরিবর্তিত হতে পারে তবে এর কেবলমাত্র পার্শ্ব-প্রতিক্রিয়া রয়েছে। তবে যদি এটি কখনই পরিবর্তিত না হওয়ার গ্যারান্টিযুক্ত হয় তবে সেই মানটি অনন্যভাবে অনুমানযোগ্য হয়ে যায় এবং তাই কোনও পার্শ্ব-প্রতিক্রিয়া নেই।
এটি আরও সিলিয়ার করতে। কোনও ফাংশন ফিরে আসা 42
পরিষ্কারভাবে খাঁটি। তবে যদি ক্রেজি 42
কোনও মান পরিবর্তন করতে পারে এমন পরিবর্তনশীল করার সিদ্ধান্ত নেয় , তবে একই শর্তটি নতুন অবস্থার অধীনে খাঁটি হওয়া বন্ধ করে দেয়।
নোট করুন যে সারটিটি প্রদর্শনের জন্য আমি বস্তুর আক্ষরিক স্বরলিপি ব্যবহার করছি। দুর্ভাগ্যক্রমে জাভাস্ক্রিপ্টের মতো ভাষাগুলিতে জিনিসগুলি গণ্ডগোলিত হয়, যেখানে error
ফাংশন রচনার ক্ষেত্রে আমরা এখানে যা চাই তার সাথে আচরণ করে এমন কোনও ধরণ নেই, যেখানে প্রকৃত প্রকারগুলি এইভাবে আচরণ করে না null
বা NaN
বরং কিছু কৃত্রিম এবং সর্বদা স্বজ্ঞাত নয় through রূপান্তর টাইপ করুন।
প্রকার প্রসারিত করুন
যেহেতু আমরা আমাদের ব্যতিক্রমের ভিতরে বার্তাটি পৃথক করতে চাই, আমরা সত্যই E
পুরো ব্যতিক্রম বস্তুর জন্য একটি নতুন ধরণের ঘোষণা করছি এবং maybe number
তার বিভ্রান্তিকর নাম বাদে এটিই করে যা কোনও প্রকারের number
বা নতুন ব্যতিক্রম প্রকারের E
, তাই এটি সত্যিই ইউনিয়নের number | E
এর number
এবং E
। বিশেষত, এটি নির্ভর করে যে আমরা কীভাবে নির্মাণ করতে চাই E
, যা নামটিতে প্রস্তাবিত বা প্রতিফলিত হয় না maybe number
।
ক্রিয়ামূলক রচনা কি?
এটি গাণিতিক অপারেশন ফাংশন গ্রহণ করে
f: X -> Y
এবং g: Y -> Z
তাদের রচনাটি কার্যকরী h: X -> Z
সন্তোষজনক হিসাবে তৈরি করে h(x) = g(f(x))
। এই সংজ্ঞাটি নিয়ে সমস্যাটি তখন ঘটে যখন ফলাফলকে f(x)
যুক্তি হিসাবে অনুমোদিত করা হয় না g
।
গণিতে সেই কাজগুলি অতিরিক্ত কাজ ছাড়া রচনা করা যায় না। আমাদের উপরোক্ত উদাহরণগুলির কঠোরভাবে গাণিতিক সমাধান f
এবং এর সংজ্ঞা সেট থেকে g
সরিয়ে 0
দেওয়া f
। সেই সংজ্ঞায়নের নতুন সেট (নতুন আরও নিয়ন্ত্রিত ধরণের ধরণের x
) সাথে, f
এটি কম্পোজেবল হয়ে ওঠে g
।
যাইহোক, এটির f
মতো সংজ্ঞা সেটকে সীমাবদ্ধ করার জন্য প্রোগ্রামিংয়ে এটি খুব ব্যবহারিক নয় । পরিবর্তে, ব্যতিক্রম ব্যবহার করা যেতে পারে।
অথবা অন্য পদ্ধতির যেমন, কৃত্রিম মান মত নির্মিত NaN
, undefined
, null
, Infinity
ইত্যাদি সুতরাং আপনি মূল্যায়ন 1/0
করার Infinity
এবং 1/-0
করতে -Infinity
। এবং তারপরে ব্যতিক্রম ছোঁড়ার পরিবর্তে নতুন অভিব্যক্তিটিকে আপনার অভিব্যক্তিতে ফিরিয়ে আনতে বাধ্য করুন। আপনি ভবিষ্যদ্বাণীযোগ্য বা নাও পেতে পারে ফলাফলের দিকে পরিচালিত:
1/0 // => Infinity
parseInt(Infinity) // => NaN
NaN < 0 // => false
false + 1 // => 1
এবং আমরা নিয়মিত সংখ্যায় ফিরে এসেছি এগিয়ে যাওয়ার জন্য প্রস্তুত;)
জাভাস্ক্রিপ্ট আমাদের উপরের উদাহরণ হিসাবে ত্রুটি না ছুঁড়ে দিয়ে যে কোনও মূল্যে সংখ্যাসূচক এক্সপ্রেশন চালিয়ে যেতে দেয়। এর অর্থ এটি ফাংশন রচনা করতে দেয়। কোনটি মোনাদ সম্পর্কে ঠিক তাই - এটি এই উত্তরের শুরুতে সংজ্ঞায়িতভাবে অক্ষগুলি সন্তুষ্ট করে ফাংশন রচনা করার নিয়ম।
তবে একটি সংখ্যার ত্রুটিগুলি মোকাবেলার জন্য জাভাস্ক্রিপ্টের প্রয়োগ থেকে উদ্ভূত ফাংশন রচনা করার নিয়মটি কী?
এই প্রশ্নের উত্তর দেওয়ার জন্য আপনার কেবলমাত্র অ্যাকিয়মগুলি পরীক্ষা করা (এখানে প্রশ্নের অংশ হিসাবে ব্যায়াম হিসাবে রেখে দেওয়া হয়েছে) পরীক্ষা করা উচিত।
একটি ছদ্মরূপ নির্মাণের জন্য কি ছোঁড়া ব্যতিক্রম ব্যবহার করা যেতে পারে?
প্রকৃতপক্ষে, আরও কার্যকর মোনাডের পরিবর্তে নিয়মটি হ'ল যদি কারও f
জন্য ব্যতিক্রম ছুঁড়ে ফেলা হয় x
, তবে এর রচনাটি যে কোনওটির সাথেও রয়েছে g
। E
প্লাসটি শুধুমাত্র একমাত্র সম্ভাব্য মান ( শ্রেণির তত্ত্বের টার্মিনাল অবজেক্ট ) দিয়ে ব্যতিক্রমটিকে বিশ্বব্যাপী অনন্য করে তুলুন । এখন দুটি অক্ষর তাত্ক্ষণিকভাবে চেকযোগ্য এবং আমরা একটি খুব দরকারী মনাদ পেয়েছি। এবং ফলাফলটি সম্ভবত মোনাদ হিসাবে সুপরিচিত ।