গেটর এবং সেটটারের সমন্বয়


16

জাভাস্ক্রিপ্ট লাইব্রেরি যেমন jQuery, প্রোগ্রামিং ইন্টারফেসে 'getters' এবং 'setters' একত্রিত:

 $('element').css({'color','blue'});

রঙ সেট করবে বা

 $('element').css();

একটি উপাদান জন্য সিএসএস পাবেন।

এই জাতীয় নিদর্শনটির জন্য কি কোনও নাম রয়েছে এবং অ্যাপ্লিকেশনগুলিতে এটি ব্যবহার করা ভাল অভ্যাস?

উত্তর:


12

মার্টিন ফওলার সম্প্রতি এই নিবন্ধে এটির নামকরণ ওভারলোডেড গেটর এবং সেটারের নাম দিয়েছেন :

আমি সম্প্রতি জাভাস্ক্রিপ্টে চারপাশে হাঁটছি এবং আমার কাছে আঘাত করা এক জিনিস হ'ল গিটার এবং সেটারের জন্য একই ফাংশনটির নাম ব্যবহার করার অভ্যাস। সুতরাং আপনি যদি jQuery এ আপনার ব্যানারটির উচ্চতা জানতে চান এবং আপনি যে উচ্চতাটি ব্যবহার $("#banner").height()করতে চান তা পরিবর্তন করতে চান $("#banner").height(100)

এই কনভেনশনটি আমার কাছে পরিচিত, যেহেতু এটি স্মলটালক ব্যবহার করেছিল। আপনি এর সাথে একটি মান পেতে banner heightএবং এটি দিয়ে পরিবর্তন করতে পারেন banner height: 100। এটি একটি ছোট্ট কাঙ্ক্ষিত কনভেনশন ছিল তা জানা আমার পক্ষে এটি পছন্দ করার পক্ষে যথেষ্ট, যেহেতু সেই ভাষার প্রতি আমার একটি দূরবর্তী কিন্তু চিরকালীন ভালবাসা রয়েছে। এমনকি সেরা জিনিসেও ত্রুটি রয়েছে এবং আমি এই কোডিং শৈলীর জন্য আমার অপছন্দ লুকিয়ে রাখতে পারি না ...

এই অগ্রাধিকার সত্ত্বেও, আপনি যে ভাষাটি ব্যবহার করছেন সেগুলির সম্মেলনগুলি অনুসরণ করতে হবে। আমি যদি আবার স্মলটালক লিখছিলাম তবে আমি এখনও height:100ভাষাটির সম্মেলনের সাথে ধারাবাহিকতা বজায় রাখতে ব্যবহার করব use জাভাস্ক্রিপ্টটি অবশ্য শক্তিশালী সম্মেলনের জন্য চিহ্নিত নয়, সুতরাং এখানে আমি এই সম্মেলনটি এড়াতে পছন্দ করব, এমনকি এটি jQuery দ্বারা ব্যবহৃত হলেও ...


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

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

2

একে ওও ভাষাগুলিতে "মেথড ওভারলোডিং" বা নন-ওও ভাষাগুলিতে "ফাংশন ওভারলোডিং" বলা হয়।

এটি ভাল অনুশীলন কিনা গ্রাহকরা / সেটার বনাম জনসাধারণের সদস্যদের প্রায় তত বিতর্কের বিষয়। প্রো এবং কন পক্ষের যারা সম্ভবত ভাষাগুলিতে তাদের দাঁত কাটেন যা এই বৈশিষ্ট্যটি ছিল বা নেই এবং তাদের পদ্ধতিতে সেট করা আছে। আমি এটি ব্যবহার করি এবং বিভিন্ন কারণে অনুশীলনের মতো:

  • যে প্রসঙ্গে এটি বেশ ভাল ব্যবহৃত হয়েছে তা একে অপরের থেকে পৃথক করে।
  • প্রস্তুতি getবা setপদ্ধতির নামটি ভার্বোসিটি যুক্ত করে।
  • যদি সেখানে একাধিক getters হয় (যেমন, এক intএবং জন্য এক double), একটি নিয়োগ (এর LHS টাইপ পরিবর্তন int x = foo.bar()বনাম double x = foo.bar()) একটি কোড পরিবর্তন (প্রয়োজন হয় না barAsInteger()বনাম barAsDouble()ডানদিকে) যদি বর্গ উভয় প্রদান করে। এর নীচের দিকটি হ'ল কিছু সময় ঠিক কোডটি দেখে ঠিক কোন পদ্ধতিটি ডাকা হচ্ছে তা সঠিকভাবে জানা মুশকিল হতে পারে।

একে C ++ এ "ফাংশন ওভারলোডিং" বলা হয়।
ডেড এমএমজি

উভয় পদ সি ++ এর জন্য প্রযোজ্য কারণ এর দুটি পদ্ধতি এবং খালি নগ্ন ফাংশন রয়েছে।
blrfl

1

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

সুতরাং, প্রকৃত বৈশিষ্ট্য প্রয়োগকারী ভাষাগুলিতে আপনি এর পরিবর্তে এটি করবেন:

element.css = ...
x = element.css

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


"যেখানে মান সেট করা আসলে কোড চালায়"। এটি আসলে আর সত্য নয়। এটা তোলে ECMA 5 যেহেতু বৈশিষ্ট অংশ হয়েছে
Demian ব্রেখট

@ ডেমিয়ান: তবে, জ্যাকুয়ারি ব্রাউজারগুলিতে কাজ করে যা ইসিএমএ ৫ বাস্তবায়ন করে না
জন ফিশার

আমি ক্রস-ব্রাউজারের সামঞ্জস্যতা সম্পর্কে কিছুই উল্লেখ করিনি, ঠিক যেমনটি উদ্ধৃত হিসাবে লেখা হয়েছে তেমন ভুল।
ডেমিয়ান ব্রেচেট

@ ডেমিয়ান: আপনি যদি ধরে নেন যে এটি জাভাস্ক্রিপ্টের সর্বাধিক উপলভ্য সংস্করণগুলি ব্যবহার করছে তবে "জাভাস্ক্রিপ্টের প্রকৃত বৈশিষ্ট্য নেই" পাঠ্যটি সঠিক। যেহেতু আমরা JQuery প্রয়োগের একটি প্রসঙ্গে আলোচনা করছি, বিবৃতিটি সঠিক হবে। যদিও জাভাস্ক্রিপ্টের নতুন সংস্করণগুলির প্রকৃত বৈশিষ্ট্য রয়েছে তা উল্লেখ করার জন্য ধন্যবাদ।
জন ফিশার

1

আমি সাধারণ কারণে এর সম্পূর্ণ বিরোধিতা করছি: আমার শ্রেণিতে একটি শ্রেণি, পদ্ধতি বা ফাংশনটি কেবল একটি কাজ করা উচিত - getterএবং setterপদ্ধতি এবং পদ্ধতির সমন্বয় করা এই নিয়ম লঙ্ঘন করবে। রেজাল্ট:

  1. returnফাংশনের মান যদি উপর ভিত্তি করে পরিবর্তিত হয় সংগ্রহকারী বা সেটার ব্লক মৃত্যুদন্ড কার্যকর করা হয়। এটি আপনাকে কেবল রক্ষণাবেক্ষণের দুঃস্বপ্নের দিকে নিয়ে যেতে পারে। আপনার পদ্ধতিটি যে কোনও ক্ষেত্রে কেবলমাত্র এক প্রকারের ডেটা / অবজেক্ট - বা ফিরে আসা উচিত null, falseবা exceptionত্রুটির ক্ষেত্রে একটি নিক্ষেপ করা উচিত ।
  2. লিখন ইউনিট টেস্টগুলি আরও শক্ত হবে কারণ ফাংশন দুটি সম্পূর্ণ ভিন্ন কার্যকারিতার জন্য দায়ী।
  3. যেমন একটি পদ্ধতি বা ফাংশন জন্য ডকুমেন্টেশন রচনা স্পষ্ট কারণে কঠিন।
  4. একাধিক গিটার পদ্ধতিগুলির প্রয়োজন হলে এটি সামঞ্জস্যপূর্ণ হবে না - যেমনটি ইতিমধ্যে Blrflউত্তরে উল্লিখিত হয়েছে ।

0

আমার মনে হয় আপনি খুঁজছেন properties


এটি সি # (এবং সম্ভবত অন্যান্য। নেট ভাষাগুলি?) সরবরাহিত কার্যকারিতার নাম যা এর সাথে সাদৃশ্যপূর্ণ তবে এটি আসলে একই জিনিস নয়।
টমাস ওপেনস

উইকিপিডিয়া যদিও তাতে সম্মত:
en.wikedia.org/wiki/Property_

ধন্যবাদ, না সত্যিই আপনি একটি মামলা বলে যেখানে আপনি সেট অথবা একটি অ্যাপ্লিকেশনে একটি ব্যক্তি বেতন পেতে পারে person.salary('10000')বা person.salary()বা অনুরূপ।
ইয়ানিস

1
আমি কিভাবে দেখতে পাচ্ছি না। "সম্পত্তিগুলি ক্ষেত্রের মতো পড়া এবং লিখিত হয়", যা মূল পোস্টে উদাহরণে সত্য নয়। সেখানে, সুস্পষ্ট পদ্ধতি কল করা হয়। এটি খুব মিল, তবে একরকম নয়।
টমাসের মালিক

1
@ অ্যান্নিস এটি সঠিক নয়। জাভাস্ক্রিপ্টের বৈশিষ্ট্যগুলির জন্য একটি বাক্য গঠন রয়েছে এবং আপনি মূল প্রশ্নে যা বর্ণনা করেছেন তা তা নয়। কীভাবে জাভাস্ক্রিপ্টে বৈশিষ্ট্যগুলি প্রয়োগ এবং ব্যবহার করতে যায় সে জন্য en.wikedia.org/wiki/Property_(programming)# জাভা স্ক্রিপ্ট দেখুন ।
টমাসের মালিকানা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.