আসুন কল্পনা করুন আমাদের কিছু সদস্য ফাংশন সহ 3 ডাবল রাখার জন্য একটি কাঠামো রয়েছে:
struct Vector {
double x, y, z;
// ...
Vector &negate() {
x = -x; y = -y; z = -z;
return *this;
}
Vector &normalize() {
double s = 1./sqrt(x*x+y*y+z*z);
x *= s; y *= s; z *= s;
return *this;
}
// ...
};
এটি সরলতার জন্য কিছুটা স্বীকৃত, তবে আমি নিশ্চিত যে আপনি সম্মত হন যে অনুরূপ কোডটি এখানে রয়েছে। পদ্ধতিগুলি আপনাকে সুবিধার্থে চেইন করতে দেয়, উদাহরণস্বরূপ:
Vector v = ...;
v.normalize().negate();
অথবা এমনকি:
Vector v = Vector{1., 2., 3.}.normalize().negate();
এখন যদি আমরা শুরু () এবং শেষ () ফাংশন সরবরাহ করি তবে আমরা আমাদের ভেক্টরকে লুপের জন্য একটি নতুন স্টাইলে ব্যবহার করতে পারি, 3 টি স্থানাঙ্ক x, y এবং z এর উপর লুপ করতে বলতে পারি (আপনি সন্দেহাতীতভাবে আরও "দরকারী" উদাহরণ তৈরি করতে পারবেন না ভেক্টরকে উদাহরণস্বরূপ স্ট্রিং দিয়ে প্রতিস্থাপন করে):
Vector v = ...;
for (double x : v) { ... }
আমরা এমনকি করতে পারেন:
Vector v = ...;
for (double x : v.normalize().negate()) { ... }
এবং আরো:
for (double x : Vector{1., 2., 3.}) { ... }
তবে, নিম্নলিখিতগুলি (এটি আমার কাছে মনে হচ্ছে) নষ্ট হয়েছে:
for (double x : Vector{1., 2., 3.}.normalize()) { ... }
এটি আগের দুটি ব্যবহারের যৌক্তিক সংমিশ্রণের মতো মনে হলেও, আমি মনে করি এই শেষ ব্যবহারটি একটি ঝুঁকির রেফারেন্স তৈরি করে যখন আগের দুটি সম্পূর্ণ সূক্ষ্ম।
- এটি কি সঠিক এবং ব্যাপকভাবে প্রশংসিত?
- উপরের কোন অংশটি "খারাপ" অংশ, তা এড়ানো উচিত?
- লুপটির জন্য পরিসর-ভিত্তিক সংজ্ঞা পরিবর্তনের মাধ্যমে ভাষার উন্নতি হবে যে লুপের সময়কালের জন্য প্রকাশের জন্য তৈরি টেম্পোরারিগুলি বিদ্যমান?