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