জাভাতে টেমপ্লেট কি "রূপক" একটি ভাল ধারণা?


29

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

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

আমার বর্তমান পরিকল্পনাটি পরিবর্তে একটি ফাইল লিখতে যা ফাংশনটির 12 অনুলিপি তৈরি করে (একটি ব্যবহারের জন্য কেবল টেমপ্লেট প্রসারণকারী, কার্যত)। আমি অবশ্যই প্রোগ্রামিয়ালি ফাইলটি কেন উত্পন্ন করতে হবে তার জন্য প্রচুর ব্যাখ্যা প্রদান করব।

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

এই পদ্ধতির সুবিধাগুলি কি অসুবিধাগুলি ছাড়িয়ে যায়? পরিবর্তে আমার উচিত:

  • পারফরম্যান্স হিট করুন এবং একটি একক, রক্ষণাবেক্ষণযোগ্য ফাংশন ব্যবহার করুন।
  • ফাংশনটি কেন 12 বার নকল করা উচিত এবং এর জন্য রক্ষণাবেক্ষণের ভার গ্রহণ করুন for
  • জেনেরিকগুলি টেম্পলেট হিসাবে ব্যবহার করার চেষ্টা করুন (তারা সম্ভবত সেভাবে কাজ করে না)।
  • একক ক্রিয়াকলাপের উপর পারফরম্যান্স-নির্ভর কোড তৈরি করার জন্য পুরানো রক্ষণাবেক্ষণকারীকে চিৎকার করুন।
  • পারফরম্যান্স এবং রক্ষণাবেক্ষণের জন্য অন্যান্য পদ্ধতি?

পিএস প্রকল্পের দুর্বল ডিজাইনের কারণে, ফাংশনটির প্রোফাইলিং করা বরং কৃপণ ... তবে প্রাক্তন রক্ষণাবেক্ষণকারী আমাকে বোঝাতে পেরেছেন যে পারফরম্যান্স হিট অগ্রহণযোগ্য। আমি এটি ধরে নিয়েছি তার অর্থ 5% এরও বেশি, যদিও এটি আমার পক্ষ থেকে সম্পূর্ণ অনুমান।


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

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


যদি পারফরম্যান্স হিটটি ফাংশনের 12 টি সংস্করণের ওয়ারেন্ট দেওয়ার পক্ষে যথেষ্ট গুরুতর হয়, তবে আপনি এটির সাথে আটকে থাকতে পারেন। আপনি যদি একটি একক ফাংশনে (বা জেনেরিকগুলি ব্যবহার করে) রিফ্যাক্টর করেন তবে পারফরম্যান্সটি এতটা খারাপ হবে যে আপনি গ্রাহক এবং ব্যবসা হারাবেন?
হতাশ

12
তারপরে আমার মনে হয় আপনার নিজের পরীক্ষা করা দরকার (আমি জানি আপনি বলেছিলেন যে প্রোফাইলিং কৃপণ, তবে আপনি এখনও সিস্টেমের মোটামুটি "ব্ল্যাক-বক্স" পারফরম্যান্স টেস্ট করতে পারেন, ঠিক?) সেখানে কত বড় পার্থক্য রয়েছে তা দেখতে to হয়। এবং যদি এটি লক্ষণীয় হয় তবে আমি মনে করি আপনি কোড জেনারেটরের সাথে আটকে থাকতে পারেন।
হতাশ

1
এটি প্রতিটি শব্দকে আলাদা আলাদা নামে ডাকা না করে কিছু প্যারামেট্রিক পলিমারফিজম (বা এমনকি জেনেরিকগুলি) থেকে উপকৃত হতে পারে বলে মনে হতে পারে।
রবার্ট হার্ভে

2
ফাংশনগুলির নামকরণ ফান 1 ... ফানক 12 উন্মাদ বলে মনে হচ্ছে। কমপক্ষে তাদের নাম রাখুন মোডে 1 পার 2 ইত্যাদি ... অথবা হতে পারে আমার ফানকএম 3 পি 2।
user949300

2
"যদি তারা পরিবর্তে প্রোগ্রামগতভাবে উত্পন্ন ফাইলটি পরিবর্তন করে" ... কেবলমাত্র " Makefile" (অথবা আপনি যে কোনও সিস্টেম ব্যবহার করেন) থেকে বিল্ডিং করার সময় ফাইলটি তৈরি করুন এবং সংকলন শেষ হওয়ার পরে এটিকে সরান । এভাবে তারা কেবল না ভুল সোর্স ফাইল পরিবর্তন করতে একটি সুযোগ আছে।
বাকুরিউ

উত্তর:


23

এই প্রযুক্তিগত ঋণ এটা খারাপ হয় - - আপনি এমনকি কত গুরুত্বপূর্ণ কোড জানেন না এটি একটি খুব খারাপ অবস্থা আপনি এই যত শীঘ্র সম্ভব refactor প্রয়োজন হয়, সত্যিই হয় - শুধুমাত্র ফটকা এটি গুরুত্বপূর্ণ।

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

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

সম্পাদনা

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

সোজা কথায়: এটি হয় না।

আপনার নিজস্ব মিনি-ভাষা তৈরির, এর জন্য একটি কোড-জেনারেটর লেখার এবং এটি বজায় রাখার অতিরিক্ত বোঝা, এটি ভবিষ্যতের রক্ষণাবেক্ষণকারীদের শেখানোর উল্লেখ না করা দীর্ঘকালীন সময়ে নরকীয়। আপনি দীর্ঘমেয়াদী সমাধানে কাজ করার সময় উপরেরগুলি কেবলমাত্র সমস্যাটিকে পরিচালনা করার জন্য একটি নিরাপদ উপায়ে অনুমতি দেয় । যা নেবে তা আমার উপরে।


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

6
রবার্টের মন্তব্যকে বাড়াবাড়ি করা যায় না। যে কোনও সময় আপনার কাছে "শর্ক" নামে পরিচিত একটি অবৈধ বুকি দ্বারা পরিচালিত চেক-নগদকরণ স্টোরের সমতুল্য "প্রযুক্তিগত equivalentণ" সমপরিমাণ একটি "ফাইলটি সংশোধন না করার ব্যাখ্যা" অস্বীকার করেছেন।
কর্সিকা

8
অবশ্যই স্বয়ংক্রিয়ভাবে উত্পন্ন ফাইল উত্স সংগ্রহস্থলের অন্তর্ভুক্ত নয় (এটি উত্স নয়, সর্বোপরি, এটি সংকলিত কোড) এবং এটি ant cleanআপনার সমতুল্য যা কিছু দ্বারা মুছে ফেলা উচিত । এমন কোনও ফাইলে দাবি অস্বীকার করার দরকার নেই যা সেখানে নেই!
জার্গ ডব্লু মিট্টাগ

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

2
@ করসিকা আমি কখনও বলিনি যে এটি একটি স্থায়ী সমাধান। এটি আসল পরিস্থিতি হিসাবে debtণ হিসাবে অনেক হবে। নিয়মিত সমাধান না পাওয়া পর্যন্ত কেবলমাত্র এটিই অস্থিরতা হ্রাস করে। যার মধ্যে সম্ভবত পুরোপুরি কোনও নতুন প্ল্যাটফর্ম / ফ্রেমওয়ার্ক / ভাষায় সরানো অন্তর্ভুক্ত থাকবে যেহেতু আপনি যদি জাভাতে এ জাতীয় সমস্যাগুলি মারছেন - আপনি হয় অত্যন্ত জটিল বা চূড়ান্ত কিছু করছেন।
সাধারণ

16

রক্ষণাবেক্ষণটি কি সত্যই আঘাত পেয়েছে, না এটি কেবল আপনাকে বিরক্ত করে? এটি যদি আপনাকে বিরক্ত করে তবে এটিকে একা ছেড়ে দিন।

পারফরম্যান্সের সমস্যাটি কি বাস্তব, না কি পূর্ববর্তী বিকাশকারীরা কেবল এটিই মনে করেছিলেন? পারফরম্যান্সের সমস্যাগুলি, প্রায়শই না হওয়া সত্ত্বেও, যেখানে প্রোফাইলার ব্যবহার করা হয়, সেগুলি সেগুলি নয় বলে মনে করা হয়। (আমি এই কৌশলটি নির্ভরযোগ্যতার সাথে খুঁজে পেতে ব্যবহার করি ))

সুতরাং আপনার অ-সমস্যার একটি কুৎসিত সমাধান রয়েছে এমন একটি সম্ভাবনা রয়েছে তবে এটি একটি বাস্তব সমস্যার কুৎসিত সমাধানও হতে পারে। সন্দেহ হলে এটিকে একা ছেড়ে দিন।


10

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

এছাড়াও, যদি আপনি কি করতে আবিষ্কার যে আপনি সব ফাংশন, আপনি ব্যবহার করতে চাইতে পারেন Javassist programatically কোড জেনারেট করতে। অন্যরা যেমন উল্লেখ করেছে, আপনি মাভেনের সাথে এটি স্বয়ংক্রিয় করতে পারেন ।


2
এছাড়াও, যদি দেখা যায় যে পারফরম্যান্সের সমস্যাগুলি বাস্তব, তবুও সেগুলি অধ্যয়ন করার অনুশীলন আপনাকে আপনার কোড দিয়ে কী কী সম্ভব তা আরও ভালভাবে জানতে সহায়তা করবে।
কার্ল ম্যানাস্টার

6

এই সিস্টেমের জন্য কোনও ধরণের টেমপ্লেট প্রিপ্রোসেসর \ কোড জেনারেশন কেন অন্তর্ভুক্ত করবেন না? একটি কাস্টম অতিরিক্ত বিল্ড স্টেপ যা বাকী কোডটি সংকলনের আগে অতিরিক্ত জাভা উত্স ফাইলগুলি কার্যকর করে এবং নির্গত করে। ডাব্লুএসডিএল এবং এক্সএসডি ফাইল বন্ধ থাকা ওয়েব ক্লায়েন্ট সহ এটি প্রায়শই কাজ করে।

আপনার অবশ্যই অবশ্যই সেই প্রিপ্রসেসর কোড কোড জেনারেটরের রক্ষণাবেক্ষণ থাকবে তবে আপনার ডুপ্লিকেটেড কোর কোড রক্ষণাবেক্ষণটি ভেবে চিন্তিত হবে না।

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

জাভা জেনেরিকগুলি ভাষায় টাইপ ইরেজরের কারণে কোনও পারফরম্যান্স সুবিধা দেয় না, তার জায়গায় সাধারণ ingালাই ব্যবহৃত হয়।

সি ++ টেমপ্লেটগুলি সম্পর্কে আমার বোঝা থেকে তারা প্রতিটি টেম্পলেট অনুরোধে বেশ কয়েকটি ফাংশনে সংকলিত হয়। উদাহরণস্বরূপ আপনি একটি স্টাড :: ভেক্টর এ সঞ্চয় প্রতিটি প্রকারের জন্য নকল মিড-কম্পাইল টাইম কোডটি সরিয়ে ফেলবেন।


2

কোনও বৈজ্ঞানিক জাভা পদ্ধতিতে 12 টি বৈকল্পিক দীর্ঘায়িত হতে পারে না ... এবং JITC দীর্ঘ পদ্ধতিগুলি ঘৃণা করে - এটি কেবল তাদের যথাযথভাবে অপ্টিমাইজ করতে অস্বীকার করে। আমি দু'টির গতি বাড়ানোর ফ্যাক্টরটি দেখেছি কেবল কোনও পদ্ধতিকে দুটি খাটো করে বিভক্ত করে। হয়তো এই পথেই যেতে হবে।

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

আমি বলব যে কোড জেনারেট করা কোনও বড় বিষয় নয়, ধরে নিলাম এটি একটি ভাল কারণ রয়েছে। ওভারহেড বরং কম, এবং নামযুক্ত ফাইলগুলি তত্ক্ষণাত তাদের উত্সে নিয়ে যায়। কিছু দিন আগে আমি উত্স কোড উত্পন্ন করার সময়, আমি // DO NOT EDITপ্রতিটি লাইনে রেখেছি ... আমার ধারণা এটি যথেষ্ট পরিমাণে সাশ্রয় করেছে।


1

আপনার উল্লিখিত 'সমস্যা' নিয়ে কোনও ভুল নেই। আমি যা জানি তা থেকে ডিবি সার্ভারের ভাল পারফরম্যান্সের জন্য এটি সঠিক ধরণের ডিজাইন এবং পদ্ধতির ব্যবহার।

সমস্ত ধরণের ক্রিয়াকলাপের জন্য তারা কার্যকারিতা সর্বাধিকতর করতে পারে তা নিশ্চিত করার জন্য তাদের কাছে প্রচুর বিশেষ পদ্ধতি রয়েছে: নির্দিষ্ট শর্তাবলী প্রযোজ্য হলে যোগ দিন, নির্বাচন করুন, সমষ্টি, ইত্যাদি ...

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


1

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


0

স্কেল ভাষা ব্যবহার করে আপনি বিশেষায়িত পদ্ধতির সমস্যা সমাধান করতে পারেন।

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

তবে এছাড়াও, স্কালায় সিনট্যাকটিক ম্যাক্রোগুলি রয়েছে, যা টাইপ-নিরাপদ পদ্ধতিতে সংকলন সময়ে কোড সহ অনেক কিছু করা সম্ভব করে তোলে।

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

এছাড়াও, স্কালা অন্যান্য অনেক উপায়ে দুর্দান্ত। এবং আপনাকে সমস্ত কোড স্কালায় পুনর্লিখন করতে হবে না, কারণ স্কালা <-> জাভা আন্তঃব্যবযোগিতা দুর্দান্ত। প্রকল্পটি নির্মাণের জন্য কেবল এসবিটি (স্কেল বিল্ড সরঞ্জাম) ব্যবহার নিশ্চিত করুন ।


-1

যদি প্রশ্নে থাকা ফাংশনটি বড় হয় তবে "মোড / প্যারাডিজম" বিটগুলিকে একটি ইন্টারফেসে পরিণত করে এবং তারপরে এমন কোনও বস্তু পাস করে যা সেই ইন্টারফেসটিকে প্যারামিটার হিসাবে ফাংশন হিসাবে প্রয়োগ করে কাজ করতে পারে। GoF এটিকে "কৌশল" প্যাটার্ন বলে, iirc। যদি ফাংশনটি ছোট হয় তবে বর্ধিত ওভারহেড উল্লেখযোগ্য হতে পারে ... কেউ কি এখনও প্রোফাইলিংয়ের কথা উল্লেখ করেছেন? ... আরও বেশি লোকের প্রোফাইলের উল্লেখ করা উচিত।


এটি আরো একটি উত্তর চেয়ে একটি মন্তব্য দেখে মনে পড়লো
মশা

-2

প্রোগ্রামটির বয়স কত? সম্ভবত সম্ভবত নতুন হার্ডওয়্যার বাধাটি সরিয়ে ফেলবে এবং আপনি আরও রক্ষণাবেক্ষণযোগ্য সংস্করণে যেতে পারেন। তবে রক্ষণাবেক্ষণের একটি কারণ থাকতে হবে, সুতরাং যদি আপনার কাজটি কোডবেসকে উন্নত না করা হয় তবে এটি যেমন কাজ করছেন তেমনি রেখে দিন।


1
এই নিছক পুনরাবৃত্তি পয়েন্ট হয়েছে ও একটি ব্যাখ্যা বলে মনে হয় পূর্বে উত্তর পোস্ট কয়েক ঘন্টা আগে
মশা

1
অন্য উত্তরে যেমন উল্লেখ করা হয়েছে - কেবলমাত্র কোনও বাধা কোথায় তা নির্ধারণের একমাত্র উপায় profile সেই মূল তথ্য ব্যতিরেকে পারফরম্যান্সে কোনও প্রস্তাবিত সমাধান হ'ল খাঁটি জল্পনা।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.