পাইথনের যোগসূত্রটি ডিজাইনের কারণে রুবি বা স্মলটকের তুলনায়, যোগ দেওয়ার আইটেমগুলিতে নয় বরং প্রতীকটির দিকে মনোযোগ দেবে বলে মনে হচ্ছে?


9

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

সুতরাং এটি স্বাভাবিক মনে হতে পারে যে, আমার কাছে আইটেমগুলির সংকলন রয়েছে এবং এটি করার জন্য আমার এগুলি একটি স্ট্রিংয়ের মধ্যে রাখা দরকার:

  ["x", "o", "o"].join(" | ")    # joining a tic-tac-toe row in Ruby

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

পাইথন যদি এটি ব্যবহার করে থাকে

  " | ".join(["x", "o", "o"])

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

এটি কি বাস্তবায়ন সংরক্ষণ করার জন্য, যাতে আমাদের joinপ্রতিটি সংগ্রহ শ্রেণীর জন্য একটি সংজ্ঞায়িত না করতে হয় ? তবে এটি সত্য নয় যে আমরা কোনও সংগ্রহ শ্রেণীর জন্য যেমন একবার রুবিতে কেবল একবার লিখতে পারি:

module Enumerable
  def my_join(joiner)
    self.inject {|a,b| a.to_s + joiner + b.to_s}
  end
end

(এর মতো কিছু, to_sপ্রতিটি আইটেমে কল করে, to_sপ্রতিটি শ্রেণীর নিজস্ব যথাযথ কাজ করার জন্য, স্ট্রিংয়ে রূপান্তর করতে এবং তারপরে তাদের সাথে যুক্ত করে) on সুতরাং তারপরে আমাদের স্ট্রিং, হ্যাশ বা সেট, বা আমাদের কাছে যে কোনও সংগ্রহের ক্লাস রয়েছে তার প্রত্যেকটির জন্য প্রয়োগ করতে হবে না।

বা পাইথন আউট অবধি OOP রুটে যায় না? এটি পাইথন 3 এর পরিবর্তে বা এমনকি ব্যবহার করে len("abc")এবং এটিও মনে হয়। পাইথন কি ডিজাইনের কারণে এটি এভাবে করে?type([])"abc".len()[].type()


7
পাইথনের জেন থেকে : "এখানে একটি উপায় থাকা উচিত - এবং এটি করার জন্য কেবলমাত্র একটি - স্পষ্ট উপায় Although যদিও আপনি ডাচ না হলে এই পথটি প্রথমে সুস্পষ্ট নাও হতে পারে।"
কেডগ্রিগরি

2
একটি ফর্মের মধ্যে, সংগ্রহটি কীভাবে নিজেকে একটি ডিলিমিটারের সাথে স্ট্রিংয়ে রূপান্তর করতে জানে, অন্যটিতে একটি স্ট্রিং জানে যে কীভাবে নিজেকে একটি সীমানা হিসাবে ব্যবহার করে কোনও সংগ্রহকে সংযুক্ত করতে হয়। এগুলি উভয়ই বস্তু-কেন্দ্রিক, তবে ক্রিয়াটির বিষয় এবং অবজেক্টটি পরিবর্তন করে change
kdgregory

Maybe Python is more procedural?পাইথন হ'ল কয়েকটি কার্যকরী সংযোজন ("পাইথন লাম্বদা অর্জিত, কমিয়ে (), ফিল্টার () এবং মানচিত্র () লিস্প হ্যাকারের সৌজন্যে যিনি সেগুলি মিস করেছিলেন এবং কার্যকরী প্যাচগুলি জমা দিয়েছিলেন") সংস্করণে কোথাও উপস্থিত না দেখা পর্যন্ত ২. এটি প্রথম কাজ করার পরে প্রায় দেড় দশক পরে।

1
আজও পাইথন এমনকি ওওপি ভাষা হওয়ার চেষ্টা করছে না, এটি সম্পূর্ণরূপে বহু-দৃষ্টিকোণ।

সি ++ এর মতো পাইথন এমন একটি ভাষা যা ওওপিকে অনুমতি দেয়। এটি জাভা বা স্মলটালকের মতো কোনও ওওপি ভাষার মতো নয়।
রোবট

উত্তর:


9

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

আরমিন রোনাচার এটি আমার চেয়ে ভাল বলেছেন:

http://lucumr.pocoo.org/2011/7/9/python-and-pola/#seemingly-inverse-logic

"কল্পনা করুন পাইথন সেভাবে কাজ করবে না। আপনাকে পুনরায় স্ট্রিংতে রূপান্তর করার জন্য পুনরাবৃত্তকারীকে একটি আসল তালিকায় রূপান্তর করতে হবে Rub রুবি লোকেরা এখন যুক্তি দেখিয়ে দেবে যে রুবি এই সমস্যাটিকে মডিউলগুলিতে মিশ্রিত করে, এবং তারা অবশ্যই সঠিক যে এটি এই একটি বিকল্প।কিন্তু এটি ভাষাতে একটি কন্সটাস ডিজাইনের সিদ্ধান্ত যা এর মধ্যে অনেকগুলি প্রভাব ফেলে Py পাইথন এই প্রোটোকলগুলি দিয়ে আলগা মিলনকে উত্সাহ দেয় যেখানে প্রকৃত বাস্তবায়ন অন্য কোথাও হতে পারে One একটি বস্তু পুনরাবৃত্তিযোগ্য, সিস্টেমের অন্য একটি অংশ এটি কীভাবে তৈরি করতে জানে knows একটি স্ট্রিং মধ্যে। "


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

আমি রুবি 2.0 খুব চেষ্টা ... Hashএবং Stringআসলে একটি সুপারক্লাস যেমন একটি সংগ্রহ বর্গ নেই ... তাদের সুপারক্লাস শুধু হয় Object। সুতরাং এই দুটি শ্রেণি কেবলমাত্র গণনার মিশ্রণ থাকার উপর নির্ভর করে ... কোনও সংকলনের আচরণের সেট সেট করার অনুমতি দেওয়ার জন্য আমি একটি ইন্টারফেসের মতো এমন কিছু বুঝি
nonopolarity

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