স্থিতিশীল হিসাবে কোনও পদ্ধতি ঘোষণা করে লাভ কী?


95

আমি সম্প্রতি গ্রহণের ক্ষেত্রে আমার সতর্কবাণীগুলি দেখেছি এবং এটির সামনে এসেছি:

স্থির সতর্কতা

পদ্ধতিটি স্থিতিশীল হিসাবে ঘোষণা করা যেতে পারে তবে এটি একটি সংকলক সতর্কতা দেবে।

[সম্পাদনা] বেসরকারী এবং চূড়ান্ত উপর জোর দিয়ে, ग्रहण সহায়তা মধ্যে সঠিক উদ্ধৃতি:

সক্ষম করা থাকলে, সংকলকটি ব্যক্তিগত বা চূড়ান্ত এবং কেবল স্থিতিশীল সদস্যদের উল্লেখ করে এমন পদ্ধতির জন্য একটি ত্রুটি বা সতর্কতা জারি করবে ।

হ্যাঁ আমি জানি আমি এটি বন্ধ করতে পারি, তবে আমি এটি চালু করার কারণটি জানতে চাই ?

কেন প্রতিটি পদ্ধতিকে স্থিতিশীল হিসাবে ঘোষণা করা ভাল জিনিস হবে?

এটি কি কোনও কার্যকারিতা সুবিধা দেবে? (একটি মোবাইল ডোমেনে)

স্থিতিশীল হিসাবে কোনও পদ্ধতির দিকে ইঙ্গিত করে, আমি মনে করি আপনি দেখিয়ে দিচ্ছেন যে আপনি কোনও উদাহরণের ভেরিয়েবল ব্যবহার করেন না তাই কোনও ব্যবহার শৈলীর শ্রেণিতে স্থানান্তরিত হতে পারে?

দিনের শেষে কি কেবল আমাকে এই 'অগ্রাহ্য' করা বন্ধ করা উচিত বা এটি আমাকে প্রদত্ত 100+ সতর্কতাগুলি ঠিক করা উচিত?

আপনি কি মনে করেন যে এটি কেবল অতিরিক্ত কীওয়ার্ড যা কোডটি নোংরা করে, কারণ সংকলক যেভাবেই এই পদ্ধতিগুলিকে ইনলাইন করবে? ( আপনি যেমন চূড়ান্ত করতে পারেন প্রতিটি পরিবর্তনশীল আপনি যেমন ঘোষণা না করেন তবে আপনি করতে পারেন )।


অনিশ্চিত তবে এটিকে কেবল প্রোগ্রামিং এইড হিসাবে দেখা যেতে পারে। সতর্কতাগুলি কেবল দেখার বিষয়গুলির ইঙ্গিত are
জেমস পি।

4
এই পদ্ধতিগুলি সম্পাদন করে যে ধরণের কার্যকারিতা সম্পর্কে আমি আগ্রহী। এর মধ্যে অনেকগুলি থাকলে খুব সম্ভবত কিছু করা হয় নি।
অর্জুনশঙ্কর

উত্তর:


135

আপনি যখনই কোনও পদ্ধতি লিখেন, আপনি একটি নির্দিষ্ট সুযোগে একটি চুক্তি সম্পাদন করেন। সুযোগটি সঙ্কুচিত হওয়ার সম্ভাবনা তত কম, আপনি একটি বাগ লেখার সম্ভাবনা তত কম।

যখন কোনও পদ্ধতি স্থির থাকে, আপনি অ স্থিতিশীল সদস্যদের অ্যাক্সেস করতে পারবেন না; অতএব, আপনার সুযোগ সংকীর্ণ। সুতরাং, যদি আপনার চুক্তিটি সম্পাদনের জন্য আপনার প্রয়োজন না হয় এবং কখনও কখনও (এমনকি সাবক্লাসেও) অ স্থিতিশীল সদস্যদের প্রয়োজন না হয় তবে কেন আপনার পদ্ধতিতে এই ক্ষেত্রগুলিতে অ্যাক্সেস দিন? staticএই ক্ষেত্রে পদ্ধতিটি ঘোষণা করার ফলে সংকলকটি পরীক্ষা করতে দেবে যে আপনি যে সদস্যদের ব্যবহার করবেন না তা ব্যবহার করছেন না।

এবং তদ্ব্যতীত, এটি আপনার কোড পড়তে লোকদের চুক্তির প্রকৃতি বুঝতে সাহায্য করবে।

যে কারণে staticকোনও স্ট্যাটিক চুক্তি বাস্তবায়িত হওয়ার সময় কোনও পদ্ধতি ঘোষণা করা ভাল বলে বিবেচিত হয় ।

কিছু ক্ষেত্রে, আপনার পদ্ধতিটি কেবল আপনার শ্রেণীর উদাহরণের সাথে সম্পর্কিত কিছু বোঝায় এবং এটি ঘটে যে এর বাস্তবায়ন আসলে কোনও অ স্থিতিশীল ক্ষেত্র বা উদাহরণ ব্যবহার করে না। এই জাতীয় ক্ষেত্রে, আপনি পদ্ধতিটি চিহ্নিত করবেন না static

আপনি staticকীওয়ার্ডটি ব্যবহার করবেন না তার উদাহরণ :

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

4
+1 এটি নিজেকে পায়ে গুলি করার সুযোগগুলি হ্রাস করার এবং কোনও পদ্ধতি বোঝার জন্য আপনার কতটুকু জানতে হবে তা হ্রাস করার বিষয়ে।
পিটার লরি

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

4
সুতরাং অন্যান্য পৃথিবীতে, যে কোনও পদ্ধতি যা ইনস্ট্যান্স ভেরিয়েবল ব্যবহার করে না সেগুলি স্থিতিশীল হিসাবে ঘোষণা করা উচিত? আমি সর্বদা ভেবেছিলাম যে পদ্ধতিগুলি কেবল তখনই পছন্দসই (স্থলতার পদ্ধতিগুলির মতো) স্ট্যাটিক হওয়া উচিত।
পেটর মেনসিক

18
@ পেটারমেনসিক যদি কোনও privateপদ্ধতি স্থির হিসাবে ঘোষণা করা যায় তবে প্রায় অদ্যাবধি এটি হওয়া উচিত। অন্য যে কোনও অ্যাক্সেস স্তরের জন্য, গতিশীল প্রেরণের মতো অন্যান্য বিষয়গুলিও বিবেচনা করা উচিত।
মার্কো তোপোলনিক

4
@ জেমসপলসন, আমি ডায়নামিক মেথড প্রেরণ বলতে চাইছি, object.method()কল করার পদ্ধতিটি বেছে নেওয়ার জন্য উত্সাহ দেওয়ার সময় ঘটে যাওয়া বিষয়টি ।
মার্কো তোপোলনিক

17

এখানে অপ্টিমাইজেশন সহ কোনও ধারণা নেই।

একটি staticপদ্ধতি হ'ল staticকারণ আপনি স্পষ্টভাবে ঘোষণা করেন যে পদ্ধতিটি কোনও প্রয়োজনের উপর নির্ভর করে না বদ্ধ ক্লাস কোনও অবস্থার উপর নির্ভর করে না। যাতে ডকুমেন্টেশনে বর্ণিত গ্রহটির সতর্কতা:

সক্ষম করা থাকলে, সংকলকটি ব্যক্তিগত বা চূড়ান্ত এবং কেবল স্থিতিশীল সদস্যদের উল্লেখ করে এমন পদ্ধতির জন্য একটি ত্রুটি বা সতর্কতা জারি করবে।

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


7

পারফরম্যান্স সম্পর্কে আমার কোনও তথ্য নেই, আমি মনে করি এটি বেশিরভাগ ক্ষেত্রেই প্রান্তিকভাবে ভাল, যেহেতু কোডটির ধরণের ভিত্তিতে গতিশীল প্রেরণ করার দরকার নেই।

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

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


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

5
টেস্টিবিলিটি মন্তব্যটি সম্ভবত স্ট্যাটিক পদ্ধতির দিকে সরাসরি প্রস্তুত করা হয়নি, তবে স্থির পদ্ধতিগুলি উপহাস করা আরও বেশি কঠিন, তাই তারা স্ট্যাটিক পদ্ধতিগুলিকে কল করে এমন পদ্ধতির পরীক্ষাকে জটিল করে তোলে।
বুহব

4
স্ট্যাটিক পদ্ধতি যদি আপনি চান একটি শক্তিশালী বিদ্রূপকারী ফ্রেমওয়ার্ক ব্যবহার উপহাস করা সহজ হয় JMockit , PowerMock , অথবা খাঁজকাটা
জেফ ওলসন

এই private staticপদ্ধতিগুলি যাতে আপনার তাদের উপহাস করার প্রয়োজন হবে না
ব্লুন্ডেল

3

1. ঘোষণা পদ্ধতিstaticসামান্য পারফরম্যান্স বেনিফিট দেয়, তবে আরও কার্যকর কী, এটি কোনও বস্তুর উদাহরণ হাতে না পেয়ে এটি ব্যবহারের অনুমতি দেয় (উদাহরণস্বরূপ ফ্যাক্টরি পদ্ধতি বা সিঙ্গলটন পাওয়ার বিষয়ে চিন্তা করুন)। এটি পদ্ধতির প্রকৃতিটি বলার নথিগত উদ্দেশ্যও সরবরাহ করে। এই ডকুমেন্টেশনাল উদ্দেশ্যটিকে উপেক্ষা করা উচিত নয়, কারণ এটি কোডের পাঠকদের এবং এপিআই-র ব্যবহারকারীদের পদ্ধতির প্রকৃতি সম্পর্কে তাত্ক্ষণিক ইঙ্গিত দেয় এবং মূল প্রোগ্রামারকে চিন্তার হাতিয়ার হিসাবেও কাজ করে - উদ্দেশ্যযুক্ত অর্থ সম্পর্কে স্পষ্ট হওয়া সাহায্য করে আপনি সোজাও ভাবেন এবং আরও ভাল মানের কোড উত্পাদন করুন (আমার ব্যক্তিগত অভিজ্ঞতার ভিত্তিতে আমি মনে করি, তবে লোকেরা আলাদা)। উদাহরণস্বরূপ, এটি যৌক্তিক এবং তাই কোনও প্রকারের মধ্যে পরিচালিত পদ্ধতি এবং প্রকারের উদাহরণগুলিতে কাজ করে এমন পদ্ধতিগুলির মধ্যে পার্থক্য করা বাঞ্ছনীয় (যেমন নির্দেশিত হিসাবেজন স্কিটি একটি সি # প্রশ্নে তার মন্তব্যে )।

staticপদ্ধতিগুলির জন্য আরেকটি ব্যবহারের ক্ষেত্রে প্রক্রিয়াগত প্রোগ্রামিং ইন্টারফেসের নকল করা। চিন্তা করুন java.lang.System.println()শ্রেণী এবং পদ্ধতি এবং বৈশিষ্ট্যাবলী গণনা কর। ক্লাসটি java.lang.Systemঅস্থায়ী বস্তুর পরিবর্তে গ্রুপিং নাম জায়গার মতো ব্যবহৃত হয়।

2. কিভাবে Eclipse করতে পারেন (বা অন্য কোন প্রোগ্রাম বা অন্য ধরনের - biocomposable বা অ- biocomposable - সত্তা) নিশ্চিত যা পদ্ধতি স্ট্যাটিক হিসেবে ঘোষণা করা যেতে পারে জন্য জানেন? এমনকি যদি কোনও বেস শ্রেণি ইনসারেন্সের ভেরিয়েবলগুলি অ্যাক্সেস না করে বা অ স্থিতিশীল পদ্ধতিগুলি কল না করে, উত্তরাধিকার ব্যবস্থার মাধ্যমে জিনিসগুলি পরিবর্তন করতে পারে। কেবল যদি সাবক্লাস উত্তরাধিকার সূত্রে পদ্ধতিটি ওভাররাইড করা না যায় তবে আমরা 100% নিশ্চিতভাবে দাবি করতে পারি যে পদ্ধতিটি সত্যই ঘোষণা করা যেতে পারে static। দুটি পদ্ধতির ক্ষেত্রে কোনও পদ্ধতির ওভাররাইড করা ঠিক অসম্ভব

  1. private (কোনও সাবক্লাস এটি সরাসরি ব্যবহার করতে পারে না এবং এমনকি নীতিগতভাবে এটি সম্পর্কে জানে না), বা
  2. final (সাবক্লাস দ্বারা অ্যাক্সেসযোগ্য এমনকি, উদাহরণ ডেটা বা ফাংশনগুলি উল্লেখ করার জন্য পদ্ধতিটি পরিবর্তন করার কোনও উপায় নেই)।

সুতরাং Eclipse অপশনের লজিক।

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

এটি খুব কার্যকর একটি বিকল্প, যা আমি ব্যক্তিগতভাবে সক্ষম করতে নিশ্চিত করেছিলাম, আমি যদি গ্রহচিত্র ব্যবহার করতাম এবং আমি জাভাতে প্রোগ্রাম করতাম।


1

পদ্ধতির সুযোগ কীভাবে পরিবর্তিত হয় সে সম্পর্কে শমূয়েলের উত্তর দেখুন। আমার ধারণা, কোনও পদ্ধতিকে স্ট্যাটিক করার এটিই মূল দিক aspect

আপনি কর্মক্ষমতা সম্পর্কে জিজ্ঞাসা করেছেন:

একটি সামান্য পারফরম্যান্স লাভ হতে পারে, কারণ একটি স্ট্যাটিক পদ্ধতিতে কল করার জন্য প্যারামিটার হিসাবে অন্তর্নিহিত "এই" রেফারেন্সের প্রয়োজন হয় না।

যাইহোক, এই কর্মক্ষমতা প্রভাব সত্যিই খুব ক্ষুদ্র। অতএব, এটি সমস্ত সুযোগ সম্পর্কে।


1

অ্যান্ড্রয়েড পারফরম্যান্স নির্দেশিকা থেকে:

ভার্চুয়াল উপর স্ট্যাটিক পছন্দ করুন আপনার যদি কোনও বস্তুর ক্ষেত্র অ্যাক্সেস করার প্রয়োজন না হয় তবে আপনার পদ্ধতিটি স্থির করুন। আমন্ত্রণগুলি প্রায় 15% -20% দ্রুত হবে। এটিও ভাল অনুশীলন, কারণ আপনি পদ্ধতিটির স্বাক্ষর থেকে বলতে পারেন যে পদ্ধতিটি কল করা অবজেক্টের অবস্থার পরিবর্তন করতে পারে না।

http://developer.android.com/training/articles/perf-tips.html#PreferStatic


"যে পদ্ধতিটি কল করা অবজেক্টের অবস্থার পরিবর্তন করতে পারে না" - এটি অবিশ্বাস্যভাবে বিভ্রান্তিকর। আমি আপনার সম্পর্কে জানি না, তবে আমি অবশ্যই কোনও শ্রেণীর স্থির বৈশিষ্ট্যগুলিকে কোনও অবজেক্টের রাজ্যের অংশ হিসাবে বিবেচনা করি।
অ্যাডাম পার্কিন 21

0

ঠিক আছে, Eclipse ডকুমেন্টেশন প্রশ্নে সতর্কতা সম্পর্কে বলে:

পদ্ধতি অচল হতে পারে

সক্ষম করা থাকলে, সংকলকটি ব্যক্তিগত বা চূড়ান্ত এবং কেবল স্থিতিশীল সদস্যদের উল্লেখ করে এমন পদ্ধতির জন্য একটি ত্রুটি বা সতর্কতা জারি করবে

আমি মনে করি এটি বেশ কিছু বলছে। যদি পদ্ধতিটি ব্যক্তিগত এবং চূড়ান্ত হয় এবং কেবল স্থিতিশীল সদস্যদের বোঝায়, প্রশ্নে পদ্ধতিটি ঠিক সেই সাথে স্থির হিসাবে ঘোষণা করা যেতে পারে এবং এর মাধ্যমে স্পষ্ট করে দিতে পারে যে আমরা কেবল এ থেকে স্থিতিশীল সামগ্রীটি অ্যাক্সেস করার ইচ্ছা করি।

আমি সত্যই মনে করি না এর পিছনে অন্য কোনও রহস্যজনক কারণ রয়েছে।


0

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

অবশেষে আমি ক্যালিপার ব্যবহার করেছি এবং ফলাফলগুলি আমার হাতে টেস্ট চালানোর মতোই:

স্থির / গতিশীল কলগুলির জন্য কোনও পরিমাপযোগ্য পার্থক্য নেই। কমপক্ষে লিনাক্স / এএমডি 64 / জাভা 7 এর জন্য নয়।

ক্যালিপার ফলাফলগুলি এখানে রয়েছে: https://microbenchmark.appspot.com/runs/1426eac9-36ca-48f0-980f-0106af064e8f#r:scenario.benchmarkSpec.methodName , scenario.vmSpec.options.CMSLargeCoalSurpluspvarsurpluspv.sparspluspv.sparspluspv.svarspluspv.spar.plpc.sparsplus.png । সিএমএসলার্জস্প্লিটসর্প্লাস পারসেন্ট, সিভিনিউস.ভিএমএসপেক.প্পশনস.সিএমএস ম্যাসলকোয়েলসরাসপ্লাস পার্সেন্ট, সিভিনিউস.ভিএমএসপেক.পোশনস.সিএমএসম্যাসলস্প্লিটসর্প্লাসপ্রসেন্ট, সিভনস.ভিএমস্পেক.পোশনস.ফ্ল্যাসলার্জব্লকস্লাইসক্লিকসিসিভিশনসিসিভিশন, ক্রিসমিসিটি

এবং আমার নিজস্ব ফলাফল:

Static: 352 ms
Dynamic: 353 ms
Static: 348 ms
Dynamic: 349 ms
Static: 349 ms
Dynamic: 348 ms
Static: 349 ms
Dynamic: 344 ms

ক্যালিপার টেস্ট ক্লাসটি ছিল:

public class TestPerfomanceOfStaticMethodsCaliper extends Benchmark {

    public static void main( String [] args ){

        CaliperMain.main( TestPerfomanceOfStaticMethodsCaliper.class, args );
    }

    public int timeAddDynamic( long reps ){
        int r=0;
        for( int i = 0; i < reps; i++ ) {
            r |= addDynamic( 1, i );
        }
        return r;
    }

    public int timeAddStatic( long reps ){
        int r=0;
        for( int i = 0; i < reps; i++ ) {
            r |= addStatic( 1, i );
        }
        return r;
    }

    public int addDynamic( int a, int b ){

        return a+b;
    }

    private static int addStatic( int a, int b ){

        return a+b;
    }

}

এবং আমার নিজের টেস্ট ক্লাসটি ছিল:

public class TestPerformanceOfStaticVsDynamicCalls {

    private static final int RUNS = 1_000_000_000;

    public static void main( String [] args ) throws Exception{

        new TestPerformanceOfStaticVsDynamicCalls().run();
    }

    private void run(){

        int r=0;
        long start, end;

        for( int loop = 0; loop<10; loop++ ){

            // Benchmark

            start = System.currentTimeMillis();
            for( int i = 0; i < RUNS; i++ ) {
                r += addStatic( 1, i );
            }
            end = System.currentTimeMillis();
            System.out.println( "Static: " + ( end - start ) + " ms" );

            start = System.currentTimeMillis();
            for( int i = 0; i < RUNS; i++ ) {
                r += addDynamic( 1, i );
            }
            end = System.currentTimeMillis();
            System.out.println( "Dynamic: " + ( end - start ) + " ms" );

            // Do something with r to keep compiler happy
            System.out.println( r );

        }

    }

    private int addDynamic( int a, int b ){

        return a+b;
    }

    private static int addStatic( int a, int b ){

        return a+b;
    }

}

বিভিন্ন অ্যান্ড্রয়েড ডিভাইস এবং সংস্করণে ফলাফলগুলি দেখতে আকর্ষণীয় হবে
ব্লুন্ডেল

হ্যাঁ আমি ভেবেছি আপনি আগ্রহী হবেন :) তবে যেহেতু আপনি অ্যান্ড্রয়েড সফ্টওয়্যার তৈরি করছেন এবং সম্ভবত আপনার অ্যান্ড্রয়েড ডিভাইসটি আপনার দেব স্টেশনের সাথে সংযুক্ত রয়েছে আমি আপনাকে পরামর্শ দিচ্ছি যে কেবল কোডটি বেছে নিন, এটি চালান এবং ফলাফলগুলি ভাগ করুন?
স্কিনডড

-2

আপনি যে পদ্ধতিগুলিকে স্থির হিসাবে ঘোষণা করতে পারেন সেগুলি হ'ল তত্ক্ষণাত প্রয়োজন হয় না, যেমন

public class MyClass
{
    public static string InvertText(string text)
    {
        return text.Invert();
    }
}

যা আপনি তার পরিবর্তে সেই ক্লাসটি প্রশমিত না করে অন্য কোনও ক্লাসে কল করতে পারেন।

public class MyClassTwo
{
    public void DoSomething()
    {
        var text = "hello world";
        Console.Write(MyClass.InvertText(text));
    }
}

... তবে এটি এমন কিছু যা আপনি ইতিমধ্যে জানেন। এটি আপনাকে প্রতি সেয়ে কোনও আসল সুবিধা দেয় না, এটি আরও পরিষ্কার করে দেওয়া যে পদ্ধতিটি কোনও উদাহরণ ভেরিয়েবল ব্যবহার করে না।

অন্য কথায়, আপনি সর্বাধিক সুরক্ষিতভাবে এটিকে পুরোপুরি বন্ধ করে দিতে পারেন। আপনি যদি জানেন যে আপনি কখনই অন্যান্য ক্লাসে কোনও পদ্ধতি ব্যবহার করবেন না (এই ক্ষেত্রে এটি কেবল ব্যক্তিগত হওয়া উচিত), আপনার এটিকে স্থির করার দরকার নেই।


4
সেই ভাষাটি কী? এই উদাহরণটি কি সংকলন করে? এখানে কিছুই স্থির নয়।
পাইওটার পেরাক

প্রকৃতপক্ষে, মনে হচ্ছে আমি ইনভার্টটেক্সট পদ্ধতি থেকে 'স্ট্যাটিক' ভুলে গিয়েছি। এবং এটি সি #
নিরোস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.