ডেটা স্ট্রাকচারগুলি কি ভাষায় (পাইথনের মতো) সংহত করা উচিত বা স্ট্যান্ডার্ড লাইব্রেরিতে (জাভা হিসাবে) সরবরাহ করা উচিত?


21

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

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

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


1
আমরা কি বস্তু এবং হ্যাশম্যাপ বাদ দিচ্ছি?
এয়ার্বলিং

3
@ এন্টো: ভাল অনেক ভাষায় মিশ্র অ্যারে, পার্ল, পিএইচপি, জেএস (প্রযুক্তিগতভাবে এখানে কোনও বস্তু) ইত্যাদি
আকারে হ্যাশম্যাপ রয়েছে

1
অ্যারে, তালিকা, হ্যাশম্যাপস / এসোসিয়েটিভ অ্যারেগুলি বাদ দিয়ে আপনি কোন ডেটা স্ট্রাকচারের কথা ভাবছেন সে সম্পর্কে আপনি আরও নির্দিষ্ট হতে পারেন?
হতাশিত

1
"জটিল ডেটা স্ট্রাকচার" হিসাবে হ্যাশম্যাপস, তালিকাগুলি এবং আরও উন্নত কিছু অন্তর্ভুক্ত করুন এবং অ্যারেগুলিকে খুব সহজ হিসাবে ফেলে দিন।
Anto

1
আমি মনে করি আরও বোধগম্য শিরোনাম এমন কিছু হবে: "ভাষাতে কোন ডেটা কাঠামো অন্তর্ভুক্ত করা উচিত এবং লাইব্রেরিতে কী থাকতে হবে?" একটি অর্থবহ উত্তরটি ভাষার উপর যদিও বেশি নির্ভর করে: লাইব্রেরিটি যত পরিষ্কারভাবে ভাষায় একীভূত হবে তত বেশি যুক্তিসঙ্গত কাঠামোগুলি লাইব্রেরিতে স্থানান্তরিত করা।
জেরি কফিন

উত্তর:


13

এটি নির্ভর করে ভাষা কী জন্য।

কিছু উদাহরণ (অন্য উত্তর থেকে কিছুটা চুরি):

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

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

আমার কাছে, আবর্জনা সংগ্রহ একই যুক্তি অনুসরণ করে: আপনার ভাষার শ্রোতাগুলি কখন এবং কী স্মৃতি বরাদ্দ করা হয় বা মুক্তি দেওয়া ঠিক তা জানার বিষয়ে চিন্তা করে না? যদি হ্যাঁ, ম্যালোক / ফ্রি; যদি না হয় তবে আবর্জনা সংগ্রহ করুন।


6
এটি "সি / সি ++" শব্দটি ব্যবহার করার জন্য একটি খারাপ জায়গা, কারণ সি ++ তে উচ্চ-স্তরের টেম্পলেট ধরণের উপস্থিতি দুটি ভাষার মধ্যে একটি প্রধান পার্থক্য।
dan04

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

@ এডুয়ার্ডো লেইন, যদিও আপনি একটি জৈবিক সংগ্রহ স্থিতিরোধক পর্যায়ে কল করতে পারেন, তবে আমি মনে করি না এটি কতক্ষণ চলবে তা নির্বোধবাদী (একই কারণে mallocএবং newসি / সি ++ তে অ-নিরস্ত্রীক) are
আর্নলেমলেস

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

5

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

ভুলে যাবেন না যে আপনি যদি বাইনারি-ট্রিগুলির মতো অন্যান্য কাঠামোর জন্য নেটিভ সিনট্যাক্স সমর্থন যুক্ত করেন তবে সেগুলিও কাঠামোগত ভাষা সমর্থনকারী সরঞ্জামগুলি (সংকলক / রানটাইম / ইত্যাদি) প্রয়োগ করে। আপনি কয়টি স্ট্রোকুটারের জন্য সমর্থন তৈরি করতে চান?

কম সাধারণ স্থানীয়ভাবে সমর্থিত কাঠামোর জন্য আপনাকে নতুন স্বরলিপি উদ্ভাবন করতে হবে ... এটি সাধারণ রাখুন !.


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

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

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

@ ডেলানন: ... এবং তারপরে এলআইএসপি তালিকা এবং অ্যারেগুলি (সাধারণভাবে) বাদ দিয়ে চলেছে "... এলআইএসপি'র সমন্বিত তালিকার বাক্যবিন্যাসকে আলাদা করে রাখুন, আমি জানি এমন অন্য কোনও ভাষা সম্পর্কে আমি ভাবতে পারি না যা কিছু প্রকারের সরবরাহ করে অ্যারের উপরে ডেটা স্ট্রাকচার তাদের সিনট্যাক্সের একীভূত অংশ হিসাবে "... তাই আমি ভেবেছিলাম তারা অ্যারে / তালিকার চেয়ে ডেটা স্ট্রাকচারকে আরও বিদেশী বিবেচনা করছে ...
হতাশ

হ্যাঁ (আমি "অ্যারেগুলির উপরে" "অন্যান্য সাধারণ ডেটা স্ট্রাকচার" হিসাবে ব্যাখ্যা করেছি), তবে প্রশ্নের মধ্যে কিছুতেই "আসুন আমরা যে প্রতিটি ডেটা স্ট্রাকচারের জন্য আক্ষরিক তৈরি করি" তে ইঙ্গিত দেয় না। এটি যুক্তিযুক্ত ঠিক আছে যে এটি যুক্তিসঙ্গত কিছুর মধ্যে সীমাবদ্ধ হওয়া উচিত, তবে আমি মনে করি না কেবল এই অনুমানের কারণে আমরা "খারাপ ধারণা" বলতে পারি ।

5

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

লুয়া এমন আশ্চর্যরকম একটি সহজ ভাষা, তবে টেবিলের ডেটা কাঠামোর নমনীয়তা এটি বেশ শক্তিশালী করে তোলে।


2
জাভাস্ক্রিপ্ট অবজেক্টস আসলে একইভাবে - উদাহরণস্বরূপ অ্যারে হ'ল সংখ্যাসূচক বৈশিষ্ট্য এবং দৈর্ঘ্য সহ সত্যই অবজেক্ট।
টিখন জেলভিস

1
লুয়া টেবিলগুলি জাভাস্ক্রিপ্ট অবজেক্টের থেকে পৃথক: জাভা স্ক্রিপ্টে {}নয় [], লুয়ায় আপনার {}উভয়ের জন্য রয়েছে। লুপা টেবিলগুলি লিস্পের তালিকার তুলনায় আরও ভাল তুলনা করে।
জাকব

আমি জাভাস্ক্রিপ্টে অনুমান করি, "সবকিছুই একটি বস্তু" - অ্যারে সহ - তবে সমস্ত কিছুই অ্যারে নয়। লুয়ায়, সমস্ত কিছুই একটি টেবিল।
ডিন হার্ডিং

3

আপনার প্রতিটি উচ্চ-স্তরের ডেটা টাইপের জন্য ডেডিকেটেড সিনট্যাক্স লাগবে না । উদাহরণস্বরূপ, এর set([1, 2, 3])পরিবর্তে (পাইথন ২.x যেমনটি করা) এটি সহ্যযোগ্য {1, 2, 3}

গুরুত্বপূর্ণ বিষয়টি হ'ল উচ্চ-স্তরের ডেটা কাঠামো তৈরির জন্য কিছু সুবিধাজনক উপায় have আপনি যা এড়াতে চান তা হল কোডের মতো:

s = set()
s.add(1)
s.add(2)
s.add(3)

যা আমাকে ব্যাপকভাবে প্রস্তাবে রেগে যখন আমি ব্যবহার std::vector, std::setএবং std::mapC ++। ধন্যবাদ, নতুন মান হবে std::initializer_list


3

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

  • কোনও ভাষায় যুক্ত করা সস্তা। এটি আপনার সেই মূল্যবান জটিলতার বাজেটের খুব বেশি খরচ করে না:
    • ব্যাকরণটি মূলত someBracket {expr ','} someBracketবা someBracket {expr ':' expr ','} someBracket, যদি আপনি alচ্ছিক ট্রেলিং কমাগুলির মতো জিনিস চান তবে কিছু মৃত সাধারণ অতিরিক্ত s ভাসা লিটারেল সহজে ব্যাকরণ আর হতে পারে না।
    • অনেক ভাষায়, জনপ্রিয় আক্ষরিকর কোনওটিই বিদ্যমান সিনট্যাক্সের সাথে সংঘর্ষে নয় (একটি ব্যতিক্রম যা আমি ভাবতে পারি যে ব্রেস-জাতীয় ব্লকগুলির সাথে এক্সপ্রেশন, একটি কমা অপারেটর এবং কোনও সেমিকোলন হিসাবে নেই {1, 2})
    • শব্দার্থবিজ্ঞান পাঁচটি কম বাক্যে সংজ্ঞায়িত করা যেতে পারে, অনানুষ্ঠানিক সংস্করণটি "নতুন Inst সংগ্রহ ইনস্ট্যান্ট করে, তারপরে .add/ .append/ .setItemএকবার প্রদত্ত অভিব্যক্তি (গুলি) দিয়ে আর্গুমেন্ট হিসাবে কল করুন"।
  • পূর্ববর্তী তৃতীয় পয়েন্টের কারণে এটি কার্যকর করাও খুব সহজ।
  • এটি যখন আপনার প্রয়োজন হয় তখন এটি অবিশ্বাস্যরূপে কার্যকর হয়, এবং অন্যান্য উপাদানগুলির সিনট্যাক্সকে প্রভাবিত করার প্রয়োজন হয় না (অর্থাত্) এটি ব্যবহার না করার সময় আপনি তার জন্য "অর্থ প্রদান" করেন না don't

3

ক্লোজার একটি লিসপ তবে সমর্থন করে

Lists: (x1 x2)
Vectors: [x1 x2]
Maps: {k1 v1 k2 v2}
Sets: #{x1 x2}

2

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

নির্দিষ্ট ক্ষেত্রগুলির জন্য ডিজাইন করা ভাষা কখনও কখনও মতলব ভাষাতে অন্তর্নির্মিত নির্দিষ্ট ডেটা স্ট্রাকচারের মাধ্যমে উপকৃত হতে পারে। কিন্তু অনেক আপনাকে অভিভূত করতে পারে।


2

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

সুতরাং আমি মনে করি প্রোগ্রামিং ভাষাগুলি ভাষাটি যে কাজগুলির জন্য ডিজাইন করা হয়েছে তার জন্য সিনট্যাক্সে সর্বাধিক ব্যবহৃত ব্যবহৃত ডেটা স্ট্রাকচারের জন্য সমর্থন প্রেরণ করা উচিত।


2

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

আমি একটি ভাষা প্রকাশের একটি মানদণ্ড হিসাবে গ্রহণ করি যে এটি গ্রন্থাগার হিসাবে তার নিজস্ব ডেটা স্ট্রাকচার কত ভাল লিখতে পারে এবং সেগুলি ব্যবহার করা কতটা সুবিধাজনক।

উদাহরণস্বরূপ, স্কালা বিভিন্ন বাস্তবায়ন এবং কার্য সম্পাদনের গ্যারান্টি সহ বিভিন্ন সংগ্রহ সরবরাহ করে। এগুলি সমস্তই স্কেলে প্রয়োগ করা হয়েছে এবং সেগুলি ব্যবহারের বাক্য গঠনটি যদি সেগুলি অন্তর্নির্মিত ছিল এবং রানটাইম সমর্থন ছিল তার চেয়ে সামান্য জটিল।

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


1

এপিএল (এবং সম্পর্কিত আধুনিক রূপগুলি, এ +, জে এবং কে) এর প্রথম শ্রেণীর ডেটা স্ট্রাকচার হিসাবে স্কেলার, ভেক্টর এবং ম্যাট্রিক্স রয়েছে।

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


এপিএলে অ্যারেগুলিও রেখেছে, এবং অ্যারেগুলিতে একজাতীয় ডেটা টাইপ থাকতে হবে না, যা সমস্ত খুব শক্তিশালী ডেটা কাঠামোর জন্য তৈরি করে।
আরএফ্ল্যাক

1

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

তালিকাগুলি এবং মানচিত্রের আক্ষরিক এবং একটি সুবিধাজনক ক্লোজার সিনট্যাক্স হ'ল উচ্চ-স্তরের ভাষার প্রয়োজনীয় বৈশিষ্ট্য।

এই জাভা কোডের মধ্যে পার্থক্য:

Thing t = new Thing();
t.setFoo(3);
t.setBar(6.3);
t.setBaz(true);

এবং এই গ্রোভি কোড:

t = new Thing(foo: 3, bar: 6.3, baz: true)

প্রচুর। এটি 40,000 লাইনের প্রোগ্রাম এবং 10,000 টি লাইনের প্রোগ্রামের মধ্যে পার্থক্য। সিনট্যাক্স বিষয়।


সি # এ একজন করতে পারেন: var t = new Thing(foo: 3, bar: 6.3, baz: true);- আরও 4 টি অক্ষর।
চাকরি

এটি আসলে একই সংখ্যা; গ্রোভি কোডটি 'ডিফ টি = ...' পড়তে হবে
কেভিন ক্লিইন

1

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

  • আদেশযুক্ত ক্রম (1-মাত্রিক): অ্যারে, সারি, স্ট্যাক, তালিকাগুলি ...
  • মাল্টি-ডাইমেনশনাল স্ট্রাকচার অর্ডার করেছে : টেবিল, ভেক্টর, ম্যাট্রিস ..
  • মানচিত্র : হ্যাশম্যাপ, অভিধান, সেট, মাল্টিম্যাপ ... (1-মাত্রিক)
  • বহুমাত্রিক মানচিত্র : ফাংশন, মানচিত্রের মানচিত্র ...
  • গ্রাফের ধরন : গাছ, নির্দেশিত গ্রাফ ...

আপনি যে কোনও কাঠামো অন্য যে কোনও কাঠামোর সাথে অনুকরণ করতে পারেন - এটি কেবলমাত্র প্রোগ্রামিং ভাষাটিকে কতটা সহজ এবং পরিষ্কার করে তা নির্ভর করে। এই ক্ষেত্রে:

  • সারি এবং স্ট্যাকগুলি অ্যারে বা তালিকার সাহায্যে সহজেই অনুকরণ করা যায়, পরেরগুলির মধ্যে পুশ, পপ, শিফট ইত্যাদির মতো ক্রিয়াকলাপ সরবরাহ করে provide
  • আদেশযুক্ত সিকোয়েন্সগুলিতে সংখ্যাসূচক কী রয়েছে এমন মানচিত্র দিয়ে অনুকরণ করা যায়
  • সেটগুলি মানচিত্রে মানচিত্রের মাধ্যমে অনুকরণ করা যায় যা কোনও বুলিয়ানকে মান দেয়
  • বেশিরভাগ গ্রাফের ধরণগুলি নেস্টিং সিকোয়েন্স বা মানচিত্রের মাধ্যমে অনুকরণ করা যায়
  • আপনি যদি তাদের সংজ্ঞাটি সহজেই সংশোধন করতে পারেন তবে ফাংশনগুলি মানচিত্রের অনুকরণ করতে ব্যবহৃত হতে পারে

বেশিরভাগ ভাষাগুলি আদেশযুক্ত ক্রমগুলির জন্য কমপক্ষে এক ধরণের প্রদান করে, একটি 1-মাত্রিক মানচিত্রের জন্য এবং একধরণের বহুমাত্রিক মানচিত্রের জন্য, কেবলমাত্র ক্রিয়ায় সীমাবদ্ধ। ব্যক্তিগতভাবে, আমি প্রায়শই পার্ল, পিএইচপি, জাভাস্ক্রিপ্ট, লুয়ার মতো ভাষায় সেটগুলি মিস করে বহু-মাত্রিক কাঠামোগুলি অর্ডার করি ... কারণ সেগুলি অনুকরণ করা যথেষ্ট সুবিধাজনক নয়।


1

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

খুব অল্প সংখ্যক অতি সাধারণ ডেটা স্ট্রাকচার ধরণের সংখ্যার জন্য ব্যতিক্রম করা ঠিক আছে। আমি সম্ভবত সর্বাধিক অনুমতি দিতে হবে:

  • স্থির দৈর্ঘ্যের অ্যারে
  • সেট
  • হ্যাশ-ম্যাপের বিকল্প
  • অনুক্রম / তালিকা
  • রেকর্ডস / স্ট্রাক্ট / ক্লাস

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

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

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