আমি পরিষ্কার কোডটি পড়তে এবং লিখতে পছন্দ করি - যেমন রবার্ট সি মার্টিনের "ক্লিন কোড" তে বর্ণিত। তাঁর ক্রেডো অনুসরণ করার সময় আপনার অ্যারের (অভ্যন্তরীণ) কাঠামোটি জানতে আপনার বিকাশকারী (আপনার API এর ব্যবহারকারী হিসাবে) প্রয়োজন হবে না।
এপিআই ব্যবহারকারী জিজ্ঞাসা করতে পারেন: এটি কি কেবল মাত্র একটি মাত্রার একটি অ্যারে? বস্তুগুলি কি বহু মাত্রিক অ্যারের সমস্ত স্তরে ছড়িয়ে আছে? সমস্ত অবজেক্টে অ্যাক্সেস করার জন্য আমার কতটি নেস্টড লুপ (ফোরচ ইত্যাদি) দরকার? এই অ্যারেতে কোন ধরণের অবজেক্টগুলি "সঞ্চিত" থাকে?
আপনি যেমন উল্লেখ করেছেন আপনি সেই অ্যারেটিকে (যেগুলিতে বস্তু রয়েছে) একটি মাত্রিক অ্যারে হিসাবে ব্যবহার করতে চান।
নিশি দ্বারা বর্ণিত হিসাবে আপনি ব্যবহার করতে পারেন:
/**
* @return SomeObj[]
*/
যে জন্য.
তবে আবার: সচেতন থাকুন - এটি কোনও স্ট্যান্ডার্ড ডকব্লক স্বরলিপি নয়। এই স্বরলিপিটি কিছু আইডিই প্রযোজক প্রবর্তন করেছিলেন।
ঠিক আছে, ঠিক আছে, একজন বিকাশকারী হিসাবে আপনি জানেন যে "[]" পিএইচপি-তে একটি অ্যারের সাথে আবদ্ধ। তবে সাধারণ পিএইচপি প্রসঙ্গে একটি "কিছুর []" অর্থ কী? "[]" এর অর্থ: "কিছু" এর মধ্যে নতুন উপাদান তৈরি করুন। নতুন উপাদান সবকিছু হতে পারে। তবে আপনি যা প্রকাশ করতে চান তা হ'ল: একই ধরণের এবং এটির সঠিক টাইপের সাথে অবজেক্টগুলির অ্যারে। আপনি দেখতে পাচ্ছেন, আইডিই প্রযোজক একটি নতুন প্রসঙ্গ উপস্থাপন করেছেন। আপনার একটি নতুন প্রসঙ্গ শিখতে হবে। একটি নতুন প্রসঙ্গ অন্যান্য পিএইচপি বিকাশকারীদের শিখতে হয়েছিল (আপনার ডকব্লকগুলি বুঝতে)। খারাপ শৈলী (!)।
কারণ আপনার অ্যারের একটি মাত্রা রয়েছে আপনি সম্ভবত সেই "অবজেক্টের অ্যারে" কে একটি "তালিকা" বলতে চান। সচেতন থাকুন যে অন্যান্য প্রোগ্রামিং ভাষায় "তালিকা" এর একটি বিশেষ অর্থ রয়েছে। উদাহরণস্বরূপ এটিকে "সংগ্রহ" বলা ভাল হবে utch
মনে রাখবেন: আপনি এমন একটি প্রোগ্রামিং ভাষা ব্যবহার করেন যা আপনাকে ওওপির সমস্ত বিকল্প সক্ষম করে। একটি অ্যারের পরিবর্তে একটি ক্লাস ব্যবহার করুন এবং আপনার শ্রেণিকে অ্যারের মতো ট্র্যাভারযোগ্যযোগ্য করে তুলুন। উদাহরণ:
class orderCollection implements ArrayIterator
বা যদি আপনি একটি বহুমাত্রিক অ্যারে / অবজেক্ট কাঠামোর মধ্যে বিভিন্ন স্তরে অভ্যন্তরীণ বস্তুগুলি সঞ্চয় করতে চান:
class orderCollection implements RecursiveArrayIterator
এই সমাধানটি "অর্ডার কালেকশন" টাইপের কোনও অবজেক্ট দ্বারা আপনার অ্যারে প্রতিস্থাপন করে, তবে এখনও পর্যন্ত আপনার আইডিই-র মধ্যে কোড সমাপ্তি সক্ষম করে না। ঠিক আছে. পরবর্তী পর্ব:
ডকব্লকস সহ ইন্টারফেসের মাধ্যমে প্রবর্তিত পদ্ধতিগুলি প্রয়োগ করুন - বিশেষত:
/**
* [...]
* @return Order
*/
orderCollection::current()
/**
* [...]
* @return integer E.g. database identifier of the order
*/
orderCollection::key()
/**
* [...]
* @return Order
*/
orderCollection::offsetGet()
টাইপ ইঙ্গিতটি ব্যবহার করতে ভুলবেন না:
orderCollection::append(Order $order)
orderCollection::offsetSet(Order $order)
এই সমাধানটি প্রচুর পরিচয় করিয়ে দেওয়া বন্ধ করে দেয়:
/** @var $key ... */
/** @var $value ... */
আপনার সমস্ত কোড ফাইল (যেমন লুপগুলির মধ্যে) জুড়ে, যেমন জাহেমাকা তার / তার উত্তরটির সাথে নিশ্চিত করেছেন। আপনার এপিআই ব্যবহারকারীর কোড সমাপ্তির জন্য সেই ডকব্লকগুলি প্রবর্তন করতে বাধ্য করা হবে না। কেবলমাত্র এক জায়গায় @ পুনর্বারণ করার ফলে অপ্রয়োজনীয় (@var) যতটা সম্ভব কমছে। "Var "এর সাথে" ডকব্লকগুলি "ছিটিয়ে দেওয়া আপনার কোডটিকে সবচেয়ে খারাপভাবে পঠনযোগ্য করে তুলবে।
ফাইনালি তুমি শেষ কষ্ট পেতে কষ্ট লাগছে? দেখে মনে হচ্ছে বাদাম ফাটাবার জন্য স্লেজহ্যামার নিচ্ছে? বাস্তবের নয়, যেহেতু আপনি সেই ইন্টারফেসের সাথে এবং পরিষ্কার কোডের সাথে পরিচিত। মনে রাখবেন: আপনার উত্স কোডটি একবার লেখা / অনেকগুলি পড়ে read
যদি আপনার আইডিই এর কোড সমাপ্তি এই পদ্ধতির সাথে কাজ না করে, তবে আরও ভাল একটিতে স্যুইচ করুন (যেমন ইন্টেলিজ আইডিইএ, পিএইচপিস্টর্ম, নেটবিয়ানস) বা আপনার আইডিই প্রযোজকের ইস্যু ট্র্যাকারটিতে একটি বৈশিষ্ট্য অনুরোধ ফাইল করুন।
আমার প্রশিক্ষক হওয়ার জন্য এবং আমাকে এ জাতীয় দুর্দান্ত জিনিস শেখানোর জন্য খ্রিস্টান ওয়েইসকে (জার্মানি থেকে) ধন্যবাদ জানাই। পিএস: জিং-এ আমার সাথে তার সাথে দেখা করুন।