নাল নোড উপস্থাপনের জন্য এনআইএল ব্যবহারের উদ্দেশ্য কী?


17

আমার অ্যালগরিদম এবং ডেটা স্ট্রাকচারস কোর্সে, অধ্যাপকগণ, স্লাইড এবং বইটি ( অ্যালগরিদমের পরিচিতি, তৃতীয় সংস্করণ ) শব্দটি ব্যবহার করেছেন NILউদাহরণস্বরূপ নোডের একটি শিশু (গাছের মধ্যে) বোঝাতে যা ব্যবহার করে না।

একবার, বক্তৃতা দেওয়ার সময়, না বলার পরিবর্তে NILআমার সহপাঠী বললেন null, এবং অধ্যাপক তাকে সংশোধন করেছিলেন, এবং কেন প্রফেসররা এই শব্দটির প্রতি জোর দেন তা আমি বুঝতে পারি না।

লোকেরা , বা , বা অন্য কোনও শব্দের NILপরিবর্তে শব্দটি ব্যবহার করার কোনও কারণ আছে ? না কিছু বিশেষ অর্থ যা অন্যদের নেই আছে? কিছু historicalতিহাসিক কারণ আছে?nullnoneNIL

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

উত্তর:


25

যতদুর আমি উদ্বিগ্ন করছি, null, nil, noneএবং nothingএকই ধারণা জন্য প্রচলিত নামগুলির করা হয়: যা "একটি মান অভাবে" প্রতিনিধিত্ব করে একটি মান, এবং যা বিভিন্ন ধরনের উপস্থিত (যাকে বলা হয় nullable ধরনের )। এই মানটি সাধারণত ব্যবহৃত হয় যেখানে মানটি সাধারণত উপস্থিত থাকে তবে এটি বাদ দেওয়া যেতে পারে, উদাহরণস্বরূপ anচ্ছিক পরামিতি। বিভিন্ন প্রোগ্রামিং ল্যাঙ্গুয়েজ এটিকে আলাদাভাবে প্রয়োগ করে এবং কিছু ভাষায় এরকম ধারণা নাও থাকতে পারে। পয়েন্টারযুক্ত ভাষায় এটি একটি নাল পয়েন্টার । অনেকগুলি অবজেক্ট ওরিয়েন্টেড ভাষায় নাল একটি বস্তু নয়: এটিতে যে কোনও পদ্ধতিতে কল করা একটি ত্রুটি। কয়েকটি উদাহরণ দিতে:

  • লিস্পে, nilসাধারণত কোনও মানের অভাবে দাঁড়ানোর জন্য ব্যবহৃত হয়। অন্যান্য অন্যান্য ভাষার মতো নয়, nilএর কাঠামো রয়েছে - এটি একটি প্রতীক যার নাম "NIL"। এটি খালি তালিকাও (কারণ একটি তালিকাটি একটি কনস সেল হওয়া উচিত, তবে কখনও কখনও তালিকাটি খালি থাকায় কোনও কনস সেল নেই)। এটি হুডের নীচে নাল পয়েন্টার দ্বারা প্রয়োগ করা হোক বা অন্য যে কোনও প্রতীক হিসাবে বাস্তবায়ন নির্ভর।
  • পাস্কেলে, nilএকটি পয়েন্টার মান (যে কোনও পয়েন্টারের ধরণের ক্ষেত্রে বৈধ) যা অবধারিত হতে পারে না।
  • সি এবং সি ++ এ, যে কোনও পয়েন্টার টাইপের মধ্যে একটি NULLমান রয়েছে যা কোনও পয়েন্টার থেকে বৈধ অবজেক্টের থেকে আলাদা।
  • স্মলটাল্কে, nilএমন কোনও উপাদান যা কোনও পদ্ধতির সংজ্ঞাযুক্ত নয়।
  • জাভাতে এবং সি # তে, nullকোনও বস্তুর ধরণের মান। কোনও ক্ষেত্র বা পদ্ধতিতে অ্যাক্সেসের যে কোনও প্রচেষ্টা nullব্যতিক্রম ট্রিগার করে।
  • পার্লে, undefঅন্য যে কোনও স্কেলারের মান থেকে পৃথক এবং ভাষা এবং গ্রন্থাগার জুড়ে এটি একটি "আসল" মানের অনুপস্থিতি নির্দেশ করতে ব্যবহৃত হয়।
  • পাইথনে, Noneঅন্য যে কোনও মান থেকে পৃথক এবং ভাষা এবং গ্রন্থাগার জুড়ে এটি একটি "আসল" মানের অনুপস্থিতি নির্দেশ করতে ব্যবহৃত হয়।
  • এমএল (SML, OCaml) সালে Noneটাইপ পদ্ধতি যে কোন ধরনের মান 'a option, যা ধারণ করে Noneএবং Some xকোন xধরনের 'a
  • হাস্কেলে, অনুরূপ ধারণাটি নামগুলি Nothingএবং Just xমানগুলির Maybe aজন্য এবং প্রকারের জন্য ব্যবহার করে।

অ্যালগরিদম উপস্থাপনাগুলিতে, কোন নামটি ব্যবহৃত হয় তা উপস্থাপকের পটভূমি বা কোড উদাহরণগুলিতে ব্যবহৃত ভাষা থেকে উদ্ভূত হয়।

NULLএনআমি

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

কোনও নামকরণের স্কিম নেই। অন্য প্রভাষক বা পাঠ্যপুস্তকের বিভিন্ন নাম ব্যবহার করা যেতে পারে।


আরও দুটি উদাহরণ। উদ্দেশ্য সিতেNULL (সি সামঞ্জস্যের জন্য) এবং উভয়ই রয়েছে nil; কল করার পদ্ধতিগুলি nilকোনও অপ-অপশন। জাভাস্ক্রিপ্টের উভয়ই রয়েছে null(মানটি কিছুই উপস্থাপন করে না) এবং undefined(মানটি সেটও করা হয় না)।
200_সুকেস

1
"অবজেক্ট-ওরিয়েন্টেড ভাষায় নাল একটি বস্তু নয়: এটিতে যে কোনও পদ্ধতিতে কল করা একটি ত্রুটি" " - আপনি তালিকাভুক্ত কয়েকটি ভাষাসহ এটি সমস্ত ভাষার ক্ষেত্রে সত্য নয়। রুবি এবং স্মলটাল্কে nilঅন্য যে কোন একটি বস্তু এটির উদাহরণ NilClass, "নাল-নেস" এর অন্য কোনও ধারণা নেই এবং বিশেষত কোনও নাল-পয়েন্টার নেই। স্কালায়, Nilএকেবারে পৃথক null, nullনাল-পয়েন্টারের মতো কিন্ডা-সাজ্টা, তবে এটির আসলে একটি টাইপ ( Null) থাকে, Nilনিয়মিত পুরানো অবজেক্ট হয়, EmptyListক্লাসের সিঙ্গলটন দৃষ্টান্ত যদি আপনি চান, এবং আরও আছে…
জার্গ ডব্লু মিট্টাগ

1
Nothingযা নীচের ধরণের এবং এর কোনও উদাহরণ নেই এবং Unitযা হ'ল সাবরুটাইনগুলি এমন কোনও ধরণের যা কোনও মান দেয় না এবং সিঙ্গলটন উদাহরণ রয়েছে ()nullএটি কোনওভাবে "নাল পয়েন্টার" বা "নাল রেফারেন্স" ধারণাটি বহন করে, কারণ এটি কোনওভাবে এই শব্দটির অন্তর্নিহিত নয়, কেবল সি, সি ++, ডি, জাভা, সি # এর মতো ভাষার সর্বব্যাপীতার কারণে এটি এটি ব্যবহার করে বইতে দেবেন। NILযদিও বাস্তবে এটি প্যাসকেল, মডিউলা -২ এবং ওবেরন-তে ব্যবহৃত হয়, যদিও এই অভিব্যক্তিটি বহন করে না। রুবি সালে nilঅনেক দরকারী পদ্ধতি আছে: nil.to_i # => 0, nil.to_s # => '', ...
Jörg ডব্লিউ Mittag

1
... nil.to_a # => [], nil.to_h # => {}, nil.to_f # => 0.0, nil.inspect # => 'nil', ইত্যাদি। আপনি এখানে সম্পূর্ণ তালিকা দেখতে পারেন ।
জার্গ ডব্লু মিট্টাগ

3

আমি উভয় ব্যবহারের কারণ বিশ্বাস করি শূন্য এবং নাল যে সাবেক প্রাথমিকভাবে একটি বিশেষ্য, এবং পরবর্তীটি প্রাথমিকভাবে একটি বিশেষণ (আমি চেক করা হয় ওয়েবে এবং আমার কাগজ dictionnary মধ্যে: আমেরিকান হেরিটেজ 1992)।

অর্থ এবং ইতিহাস সম্পর্কে, এনআইএল হ'ল ল্যাটিন "নিহিল" থেকে সংকোচনের অর্থ যার অর্থ "কিছুই নয়"।

আমার জানা মতে, নামের ব্যবহার nil মতে, নাল পয়েন্টারটি বোঝাতে প্রোগ্রামিং ভাষা লিস্প (1958) এর সাথে চালু হয়েছিল ।

একটি নাল পয়েন্টার হল একটি পয়েন্টার মান যা কিছুই নির্দেশ করতে পারে বলে মনে করা হয়, এবং এইভাবে অবহেলা করা উচিত নয়। বেশিরভাগ ক্ষেত্রে, পয়েন্টারগুলি কেবল মেমরি ঠিকানা are যে কোনও চলক (যেমন, কোনও অবস্থান) যা এই জাতীয় পয়েন্টার ধারণ করার উদ্দেশ্যে করা হয়েছে সেটিতে সর্বদা বিটের কিছু কনফিগারেশন থাকবে এবং এ জাতীয় কোনও কনফিগারেশন একটি মেমরি ঠিকানা হিসাবে পড়তে পারে। সুতরাং প্রায়শই এটি nilঘটে থাকে যে মানটি এমন কোনও মেমরির জায়গার ঠিকানা হবে যা প্রোগ্রামটির জন্য নিষিদ্ধ, সুতরাং প্রোগ্রামটি কিছুটা ব্যর্থতার কারণ হতে পারে (সম্ভবত বাধাগ্রস্ত হয়) যদি প্রোগ্রামটি অবজ্ঞানের চেষ্টা করে nilযা কেবল একটি ত্রুটি হতে পারে।

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

এটি খালি তালিকা হিসাবে তালিকার পুনরাবৃত্ত সংজ্ঞাটির সাথে মিলে যায় বা তালিকার সাথে তাল মিলিয়ে একটি তালিকা উপাদান থাকে। সুতরাং কোনও উপাদান ছাড়াই একটি তালিকা প্রতিনিধিত্ব করেnil । এই খালি তালিকাটি তালিকার একচেটিয়া পরিচয় হিসাবে দেখা যায়।

যেহেতু তালিকাগুলি সেটগুলি উপস্থাপন করতে ব্যবহার করা যায়, খালি সেটটি সে ক্ষেত্রেও প্রতিনিধিত্ব করতে পারে nil

এইভাবে nil historতিহাসিকভাবে একটি বিশেষ পয়েন্টার মান ছিল, তবে তালিকাগুলি বা সেটগুলির মতো অন্যান্য বিমূর্ত ডোমেনের জন্য একটি বিশেষ পরিচয় মান হিসাবে বোঝা গেল।

সমান পয়েন্টার nil একটি নাল পয়েন্টার ছিল, নাল একটি সংযোজন (যেমন একটি বিশেষ্য) এর চেয়ে বিশেষণ হওয়া।

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

প্রোগ্রামিং ভাষার ভাষার লেখক এবং আইডিসিএনক্র্যাসির উপর নির্ভর করে এই শব্দগুলির ব্যবহারের ক্ষেত্রে অন্যরা যেমন প্রচলিত হয় না তেমন অনেকগুলি।

উপরোক্ত ব্যাখ্যা হিসাবে দুটি প্রধান অভিব্যক্তি হ'ল

  • একটি স্ট্যান্ডার্ড "অপরিজ্ঞাত মান" হিসাবে, আসলে কোনও ব্যবহারযোগ্য মানের অনুপস্থিতি উপস্থাপন করে।

  • কিছু ডোমেন পরিচয় মান হিসাবে

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

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

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


0

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

দু'বারের সাথে সংযুক্ত তালিকার মতো ক্ষেত্রে আপনি NIL ব্যবহার করতে পারেন, এটি মাথা এবং লেজ উভয়কেই লক্ষ্য রাখতে তালিকার শুরু এবং শেষ হতে পারে এবং নিশ্চিত করুন -> পরবর্তী এবং -> পূর্ব পয়েন্টারগুলি কখনই NUL- কে রেফারেন্স দেয় না।


আমি যতদূর দেখতে পাচ্ছি, এটি কেবল ভুল। সি ++ তে কোনও "NIL" নেই
ডেভিড রিচারবি

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

আপনি লিখুন "NIL হয় (আমার জোর) বদলে বলতে তোলে চেহারা মত আপনি বরং প্রোগ্রামিং এর একটি শৈলীর চেয়ে একটি ভাষা বৈশিষ্ট্য বর্ণনা করছি," NIL একটি বস্তু হিসাবে সংজ্ঞায়িত করা যায় "একটি বস্তু"। তবে, যদি আপনার উত্তরটি পুরোপুরি কোনও প্রোগ্রামিং শৈলীর বিষয়ে হয় তবে এটি এখানে আসলে বিষয়টিতে নেই।
ডেভিড রিচার্বি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.