নেমস্পেস / প্যাকেজগুলির মেধা


14

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

উত্তর:


16

না তো উপসর্গ নাম একই জিনিস namespacing ছাড়া এটি একটি উপায় যে কম দরকারী এবং আরো কঠিন / পার্স পড়া মধ্যে সম্পন্ন হচ্ছে? প্রশ্ন নিজেই উত্তর দেয় না?


শনাক্তকারীর নামের শুরুতে একটি উপসর্গ স্থাপন করা নেমস্পেসের মতো কোনও ভাষা বৈশিষ্ট্য ব্যবহার করার মতো নয়। উদাহরণস্বরূপ, সি ++ এ আপনি বলতে পারেন যে আপনি usingএকটি নির্দিষ্ট নেমস্পেস এবং তারপরে সেই নামস্থানে সনাক্তকারীদের শুরুতে উপসর্গটি লাগাতে হবে না।
compman

2
@ ব্যবহারকারী 9521 - এটি আমার বক্তব্য ...
নিকোল

+1 নেমস্পেসের একটি বড় সুবিধা হ'ল আপনি যখন প্রয়োজন নেই তখন উপসর্গটি এড়িয়ে যেতে / ছোট করতে পারবেন - যে নেমস্পেসে নির্দিষ্ট জিনিসটি রেফার করা হয়েছে, দ্বারা using, দ্বারা import xxxxxxxxx as yyyইত্যাদি সংজ্ঞায়িত করা হয়েছে

1
যেহেতু বেশিরভাগ প্রোগ্রামার অলস, আপনি বরং এটির বদলে ঘোষণা করবেন using SDL;বা SDL_*সমস্ত জায়গায় টাইপ করতে হবে?
বেরিন লরিটস্ক

2
+1, তবে আমি মনে করি আপনি সত্যিকার অর্থেই "কম দরকারী, পড়া আরও কঠিন এবং সংকলক দ্বারা যাচাই করা হয়নি" meant
ল্যারি কোলেম্যান

5

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

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

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


হাস্কেলের নেমস্পেস (মডিউল) রয়েছে এবং অবজেক্ট ওরিয়েন্টেড নয়।
জেরেমি হিলার

3

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


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

1
জাভা কনভেনশন আপনার প্রতিষ্ঠানের ক্ষেত্রে প্রযোজ্য, যেখানে এটি হোস্ট করা হয়েছে তা নয়। আপনি কেবল নিজেকে একটি সংস্থা হিসাবে ঘোষণা করতে পারেন এবং এটি দিয়েই হয়ে উঠতে পারেন। ইউআরএলগুলির এমন অক্ষরগুলির মঞ্জুরি দেওয়ার সমস্যা রয়েছে যা প্যাকেজের নামগুলিতে ব্যবহার করা যায় না। তবে আমরা সেখানে যাব না। সুতরাং আপনার জন্য, কেবল আপনার প্যাকেজের নাম হিসাবে "me.user9521" ব্যবহার করুন এবং আপনি সেট হয়ে গেছেন।
বেরিন লরিটস

1
কনভেনশন ওয়েব নামগুলি সম্পর্কে নয়, তবে ডোমেনের নামগুলি সম্পর্কে। আপনার ওয়েবসাইট ছাড়া কোনও ডোমেইন থাকতে পারে।
ডেভিড থর্নলি

1

নাম বিরোধগুলি এড়ানোর জন্য নেমস্পেস / মডিউল / প্যাকেজগুলি কার্যকর। নেম প্রিফিক্সিংও তবে নেমস্পেসগুলিতে বর্তমান নামস্থানটিতে প্রতীক আমদানি করতে সক্ষম হওয়ার অতিরিক্ত সুবিধা রয়েছে যাতে আপনাকে পুরো নেমস্পেস :: * নিয়ে বিরক্ত করতে হবে না।

কিছু ভাষা (পাইথনের মতো) আপনাকে আপনার বর্তমান মডিউলে নির্দিষ্ট চিহ্নগুলি আমদানি করার বা চিহ্ন হিসাবে আলাদা নাম হিসাবে আমদানি করার মাধ্যমে এই ক্ষমতাটি প্রসারিত করে। আপনি যদি কয়েকটি শ্রেণি / ক্রিয়াকলাপ / ধ্রুবকগুলিতে আগ্রহী হন বা কিছু চিহ্ন আপনার নামের জায়গাতে চিহ্নগুলির সাথে দ্বন্দ্ব করেন তবে কিছু না তা কার্যকর হয়।

কিছু ভাষা (যেমন রুবি) আপনাকে মডিউলের পদ্ধতিগুলি আপনার শ্রেণিতে অন্তর্ভুক্ত করার অনুমতি দেয়। এটি পলিমারফিজম এবং জেনেরিকগুলির জন্য দরকারী। উদাহরণস্বরূপ, যদি আপনার বেশ কয়েকটি ক্লাস থাকে যা একই পদ্ধতিতে কাজ করে এমন পুনরাবৃত্ত থাকে তবে আপনি এই শ্রেণীর সমস্তগুলিতে একটি পৃথক মডিউল থেকে পদ্ধতিগুলি মিশ্রণ করতে পারেন যা বস্তুটিতে ডেটা বাছাই এবং ফিল্টার করার পদ্ধতি সরবরাহ করে। এটি has aসম্পর্কের পাশাপাশি সম্পর্কের is a(উত্তরাধিকার) মঞ্জুরি দেয় ।

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