জাভাতে কেন "অকার্যকর" পদ্ধতি রয়েছে?


51

জাভাতে কি voidপদ্ধতি থাকতে হবে? তথ্যসূত্র :

শূন্য ঘোষিত যে কোনও পদ্ধতি কোনও মান ফেরায় না।

যতদুর আমি মনে করতে পারেন, প্রতিটি ব্যবহারে voidভাল একটি স্থিতি পতাকা ফিরে পরিবেশন করা হবে, বস্তু প্রার্থনা হচ্ছে, অথবা null

এটি প্রতিটি কলকে নির্ধারিত একটি বিবৃতি দেয় এবং বিল্ডার নিদর্শন এবং পদ্ধতিতে শৃঙ্খলাবদ্ধ করতে সহায়তা করে। কেবলমাত্র তাদের প্রভাবের জন্য অনুরোধ করা পদ্ধতিগুলি সাধারণত একটি বুলিয়ান বা জেনেরিক Successটাইপ ফিরিয়ে দেয় বা ব্যর্থতার ব্যতিক্রম হয় throw


যাতে সাবরুটাইনগুলি লেখার জন্য আমাদের বিশেষ সিনট্যাক্সের প্রয়োজন হয় না। আমরা একই ফাংশন ব্যবহার করতে পারি।
candied_orange

উত্তর:


158

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


10
তবে এটি সফল হয়েছে বা ব্যর্থ হয়েছে তা কোনও ব্যতিক্রম ছোঁড়া বা ছুঁড়ে না দিয়ে প্রকাশ করা, পতাকা প্রত্যাবর্তন নয়। এবং প্রত্যাবর্তন voidপদ্ধতি হিসাবে সঠিকভাবে নিক্ষেপ করতে যথেষ্ট আত্ম-সচেতন কিনা তা সম্পর্কে কিছু বলা হয় না।
ভোলকার সিগেল

12
@ ভোলকারসিগেল: উত্তরের প্রসঙ্গটি হ'ল প্রশ্ন। ওপি পরামর্শ দিয়েছে যে সমস্ত ক্ষেত্রে যেখানে অকার্যকর ব্যবহার করা হয়েছে সেখানে ফাংশনটির পরিবর্তে ব্যর্থতার সাফল্যের ইঙ্গিত সহ স্থিতির পতাকা ফিরিয়ে দেওয়া উচিত। সেই প্রসঙ্গে শূন্য প্রত্যাবর্তন সত্যই বলে যে ফাংশনটির আক্ষরিক অর্থে ফিরে আসার কিছুই নেই। সাফল্যের ইঙ্গিত দিতে এই জাতীয় ফাংশনকে সর্বদা 0-এ ফিরে আসতে বাধ্য করা ফাংশনটির ব্যবহারকারীদের ভ্রান্ত আস্থা প্রদান করবে যে তারা যখন ত্রুটি-চেক করছে বাস্তবে যখন সাফল্য বা ব্যর্থতা নির্বিশেষে রিটার্নের মান সর্বদা 0 থাকে।
slebetman

19
@ ভোলকারসিগেল এমন অনেক সংখ্যক পরিস্থিতি রয়েছে যেখানে ব্যতিক্রমগুলি জিনিসগুলি করার সঠিক উপায় নয়। আসলে আমি এর বিরলটি ভুলের চেয়ে সঠিক হতে ব্যতিক্রম হিসাবে বলব - একটি ব্যতিক্রমের অর্থ হ'ল ভয়ঙ্কর কিছু ঘটেছিল যার জন্য দায়বদ্ধ হওয়া দরকার। প্রত্যাশিত ব্যর্থতার ক্ষেত্রে কখনও ব্যতিক্রম ব্যবহার করা উচিত নয়।
গাবে সেকান

35
@ গ্যাবেসচান না, পদ্ধতিটি চুক্তিটি পূরণ করতে অক্ষম হলে ব্যতিক্রম ছুঁড়ে ফেলা উচিত। যদি পদ্ধতিটির জন্য অদ্বিতীয় রেফারেন্সের প্রয়োজন হয় তবে এটি একটি হয়ে যায়, এটি প্রত্যাশিত ব্যর্থতা এবং এটি নিক্ষেপ করা উচিত।
অ্যান্ডি

5
এটি ঠিক করার জন্য অনেকগুলি বিকল্প বাক্য গঠন রয়েছে। তারা এটি (বিশ্রী) সমাধানটি বেছে নেওয়ার কারণ হ'ল সি এটি ব্যবহার করে।
মার্কো ভ্যান ডি ভুর্ট

95
  1. কারণ সি এর একটি voidপ্রকার রয়েছে, এবং জাভা সি ভাষা পরিবারের প্রচলিত অনেকগুলি অনুসরণ করার জন্য তৈরি করা হয়েছিল।
  2. এমন অনেকগুলি ক্রিয়া রয়েছে যা আপনি কোনও মান ফেরত নিতে চান না। আপনি Successযাইহোক " জেনেরিক টাইপ" দিয়ে কী করতে যাচ্ছেন ? প্রকৃতপক্ষে, সাফল্য নির্দেশ করতে রিটার্ন মানগুলি সি এর চেয়ে জাভাতে আরও কম গুরুত্বপূর্ণ, কারণ জাভা ব্যর্থতা নির্দেশ করতে ব্যতিক্রম এবং সি তা করে না।

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

9
@ সার্জবার্স জাভার ধরণটি Voidইউনিট প্রকার হিসাবে কাজ করে (যেমন জেনেরিক্সের জন্য) যদিও এটি দুঃখের বিষয়, এটির থেকে আলাদা void(পার্শ্ব দ্রষ্টব্য: আপনি আগের সংস্করণে যে ধরণের গণ্ডগোল ফেলেছিলেন তা ঠিক করার জন্য আপনি যখনই কোনও নতুন ধরণের আবিষ্কার করেন তখন একটি ক্রুদ্ধ বিড়ালছানা মারা যায়)। : কেউ যদি ইউনিট ধরনের সাথে পরিচিত না, এই একটি শালীন ইন্ট্রো হয় en.wikipedia.org/wiki/Unit_type
রাক্ষস Psalm33

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

3
@ মিম্বিস কারণ সংজ্ঞা অনুসারে ইউনিটের ধরণটির অবশ্যই এক মান থাকতে হবে এবং ভয়েডের মান নেই। হ্যাঁ, এটি ব্যবহার করা সম্ভব null(বাস্তবে এটি একমাত্র পছন্দ) তবে নাল একটি বিশেষ বিষয়, জাভাতে রেফারেন্স ধরণের যে কোনও মানই শূন্য হতে পারে (এটি ভাষা নকশার ক্ষেত্রে অন্য একটি ভুল)। এবং যেমনটি আমি আগেই বলেছি, আপনি যদি চিহ্নের Voidপরিবর্তে রিটার্ন টাইপ ব্যবহার করেন তবে voidজাভা সংকলক আপনার বন্ধু নয়।
সার্জে বোর্স

5
@ সার্জবার্স ভয়েডের ঠিক একটি মান রয়েছে, যা হ'ল null। যে বিষয়টি nullবেশিরভাগ ধরণের সদস্য তা Voidইউনিট প্রকারের কিনা তা অপ্রাসঙ্গিক ।
ব্যবহারকারী 253751

65

মূল কারণ ভাষা একটি আছে voidটাইপ কারণ মত C, ভাষা এর নির্মাতাদের না অকারণে সঙ্গে ভাষার সিনট্যাক্স জটিলতা দেখা করতে চাইলেন পদ্ধতি s এবং ফাংশন গুলি পথ পাসকাল করেনি।

এটাই ছিল মূল কারণ।

তোমার মতামত:

একটি স্থিতি পতাকা ফেরত

এটি একটি নো আমরা স্থিতির পতাকা ব্যবহার করি না। যদি কিছু ভুল হয়ে যায় তবে আমরা ব্যতিক্রমের মাধ্যমে এটি প্রতিবেদন করি।

অনুরোধ করা হচ্ছে বস্তু

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

নাল ফিরে

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


3
"আসল কারণ ..." এর জন্য দয়া করে কোনও উত্স সরবরাহ করুন। আমার জ্ঞানের আসল কারণটি হ'ল সি পোর্টেবল এসেমব্লার হওয়ার জন্য ডিজাইন করা হয়েছিল।
থরবজর্ন রাভন অ্যান্ডারসন

6
@ থরবজরনরভানআন্দারসন আপনি কি সত্যই সত্যই আমাকে জাভা সিনট্যাক্স সি সিনট্যাক্স থেকে প্রাপ্ত দাবি দাবি করার জন্য একটি উত্স সরবরাহ করতে বলছেন?
মাইক নাকিস

3
@ থরবজর্ন রাভানএন্ডারসেন ওহ, আমি দেখলাম, আমি ভুল বুঝেছি। সুতরাং, আপনি সি সম্পর্কে আমার দাবির জন্য একটি উত্স চান, জাভা সম্পর্কে নয়। ঠিক আছে, আমি দুঃখিত, এর জন্য আমার কোনও উত্স নেই। তবে আমি মনে করি এটি বরং সুস্পষ্ট। (আমি ১৯৮7 সালে পাসকালে প্রোগ্রাম করতাম, যখন আমি
সি'তে

6
এটা সুস্পষ্ট নয়। সি প্রায় একই সময়ে প্যাসকাল হিসাবে একইভাবে বিকশিত হয়েছিল যারা সম্ভবত এটি জানেন না যে এটির অস্তিত্ব রয়েছে। অনুমানগুলি সত্য হিসাবে বর্ণনা করবেন না দয়া করে।
থোরবজর্ন রাভন অ্যান্ডারসন

12
বাস্তব মূল কারণ করে ডিফল্ট সি ফাংশন ফিরে ছিল int, তাই একটি শব্দ পরবর্তী কে & R যোগ করা হয়েছিল 'না রিটার্ন টাইপ' ইঙ্গিত।
ব্যবহারকারী 207421

20

কিছু পদ্ধতি যেমন System.out.printlnদরকারী কিছু ফিরিয়ে দেয় না তবে এটিকে পার্শ্ব প্রতিক্রিয়া হিসাবে খাঁটি বলা হয়। voidসংকলক এবং কোড পাঠকের জন্য একটি দরকারী সূচক যা কোনও কার্যকর মান ফিরে আসে না।

nullপরিবর্তে ফিরে আসার voidঅর্থ আপনি যে NullPointerExceptionকোনও কিছুর জন্য এই মানটি ব্যবহার করার মুহুর্তটি পাবেন। সুতরাং আপনি রানটাইম ত্রুটির জন্য একটি সংকলন সময় ত্রুটিটি বাণিজ্য করেন যা আরও খারাপ। তদুপরি, আপনাকে রিটার্নের ধরণটি এমন হিসাবে সংজ্ঞায়িত Objectকরতে হবে যা বিভ্রান্তিকর এবং বিভ্রান্তিকর হবে। (এবং শৃঙ্খলা এখনও কাজ করবে না।)

স্থিতি কোডগুলি সাধারণত ত্রুটির শর্তাবলী নির্দেশ করতে ব্যবহৃত হয়, তবে জাভা এই উদ্দেশ্যে ব্যতিক্রম।

thisস্থির পদ্ধতি থেকে ফিরে আসা সম্ভব নয়।

জেনেরিক Successকোনও জিনিস ফেরত দেওয়ার কোনও কার্যকর উদ্দেশ্য হবে না।


1
সবচেয়ে সহজ এবং সংক্ষিপ্ত উত্তর, আপনার সাথে পুরোপুরি একমত।
webo80

11

একটি কারণ হ'ল , বলুন, ব্যতীত অন্য কোনও কিছু ফেরত দেওয়া বিভ্রান্তিকর হতে পারে null। উদাহরণ:

কি Arrays.sort(a)ফিরতে হবে?

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

অন্যদিকে, যদি আপনি তর্ক করেন যে nullএটি ফেরত দেওয়া উচিত, যে প্রশ্নটি উত্থাপন করে যে রিটার্নের মানটি সম্ভবত কলকারী সরবরাহ করে এবং প্রোগ্রামার return nullযখন কোনও তথ্য না জানায় তখন কেন তাকে লিখতে বাধ্য করা উচিত ।

এবং যদি আপনি অন্য কোনও কিছু সম্পূর্ণ অযৌক্তিকভাবে ফিরিয়ে দেন (দৈর্ঘ্যের মতো a) তবে এটি কেবল সেই রিটার্নের মানটি সত্যই বিভ্রান্তিকর করে তোলে - তার int len = Arrays.sort(a)পরিবর্তে বলার চেয়ে আরও কত বিভ্রান্তিকর তা ভাবুন int len = A.length!


1
সমস্ত ন্যায়সঙ্গতভাবে, প্রোগ্রামারটি অগত্যা লেখার প্রয়োজন return null;পড়েনি - জেভিএম ঠিক তেমনি আদেশও দিতে পারে যে যদি কোনও স্পষ্ট returnবা throwবিবৃতি ব্যতীত কোনও ফাংশনের শেষের দিকে নিয়ন্ত্রণ পড়ে, তবে স্পষ্টভাবে nullকলারে ফিরে আসে। আইআইআরসি সি তা করে, রিটার্নের মানটি সেই ক্ষেত্রে অপরিজ্ঞাত করা ব্যতীত (সেই সময়ে রিটার্ন মানের জন্য ব্যবহৃত স্থানে যে পরিমাণ মান হয় তা হবে)।
একটি সিভিএন

2
আপনার সাহসী প্রশ্নের সঠিক উত্তর হ'ল "একটি সাজানো অ্যারে"।
ব্রায়ান বোয়েচার 16

2
@ ব্রায়ানবোটচার: আপনি কি বাকীটি পড়েননি?
মেহরদাদ

1
@ মিশেল কেজারলিং: এ জাতীয় ত্রুটি প্রতিরোধ করার জন্য এটি জাভা ভাষার একটি মৌলিক সম্পত্তি, অর্থাত্ যদি আপনি কোনও returnবিবৃতি ভুলে যান তবে "অপরিবর্তিত আচরণ" না করা । পরিবর্তে, আপনি আপনার ভুল সম্পর্কে বলার একটি সংকলক ত্রুটি পান। অন্তর্নিহিত সন্নিবেশ করা return null;"অপরিজ্ঞাত আচরণ" এর চেয়ে ভাল হবে তবে খুব বেশি নয়। এটি কেবল তখনই কার্যকর হবে যখন রিটার্নের ধরণের কোনও অর্থ নেই, তবে সংকলকটি কোথা থেকে এই উপসংহারটি আঁকবে যে রিটার্ন মানটির কোনও অর্থ নেই, যখন তা নয় void?
হলগার

2
@ মাইকেলকার্জলিং: "যদি returnসত্যই কোনও মান যুক্ত না হয় ...", ঠিক আছে, যেমনটি বলা হয়েছে, সংকলকটির জন্য এমন কোনও সূচক নেই যে কোনও voidপ্রকার না থাকলে কোনও রিটার্ন কোনও মান যুক্ত করবে না । এটি আসলে বিপরীত, প্রথম অনুমানটি যে কোনও পদ্ধতিটি রিটার্ন টাইপ ঘোষণা returnকরে সেই ধরণের দরকারী কিছু চায় । এবং আমরা এখনও আদিম ধরণের সম্পর্কে কথা বলিনি, যার কোনও nullমান নেই, সুতরাং, সংকলক দ্বারা সংক্রামিত কোনও ডিফল্ট মান সম্ভাব্য উপকারের ফেরত মানগুলির পরিসরের সাথে বিরোধ করবে।
হলগার

7

একটি রিটার্নিং booleanযা সবসময় সমান হয় trueযা আপনার প্রস্তাবিত না শুধুমাত্র অর্থহীন (ফেরত মান কোন তথ্য বহন করে), কিন্তু আসলে বিভ্রান্তিকর হতে পারে। বেশিরভাগ সময়ে, এটা প্রত্যাবর্তন ধরনের যা শুধুমাত্র হিসাবে অনেক তথ্য যেমন আসলে পাওয়া যায় বহন ব্যবহার করা সর্বোত্তম - যে কেন জাভা আপনি আছে booleanজন্য true/ falseবরং একটি ফেরার চেয়ে int4 বিলিয়ন সম্ভাব্য মান সঙ্গে। তেমনি, booleanদুটি সম্ভাব্য মান সহ যেখানে একটি মাত্র সম্ভাব্য মান ("জেনেরিক সাফল্য") রয়েছে তা ফিরিয়ে দেওয়া বিভ্রান্তিকর হবে।

এটি অপ্রয়োজনীয় কর্মক্ষমতা ওভারহেড যোগ করবে।

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

একটি জিনিস যা উন্নত হতে পারে, তা voidআসল ধরণের তৈরি করা হবে, যেমন স্কালার Unit। এটি জেনারিকগুলি পরিচালনা করার মতো কিছু সমস্যা সমাধান করবে।


মজাদার ঘটনা: List.addসর্বদা ফিরে আসে true, তবে এটি এর বিস্তৃত চুক্তির সাথে সামঞ্জস্যপূর্ণ হওয়ার জন্য Collection.add, সুতরাং Set.addফিরে আসতে পারে trueবা false
হলগার

4

জাভা তুলনামূলকভাবে পুরানো ভাষা। এবং ১৯৯৫ সালে (এটি কখন তৈরি হয়েছিল) এবং এরপরে প্রোগ্রামাররা প্রসেসরের নিয়ন্ত্রণের পাশাপাশি মেমরির ব্যবহারের পরিমাণ কতটা নিয়ন্ত্রণ করে তা নিয়ে খুব উদ্বিগ্ন হয়ে পড়েছিল। শূন্যতা ফিরে ফাংশন কল থেকে কয়েক ঘড়ির চক্র এবং কিছুটা মেমরির খরচ মুছে ফেলবে কারণ আপনাকে রিটার্নের মানটি স্ট্যাকের উপর চাপাতে হবে না এবং পরবর্তীকালে আপনাকে এটি অপসারণ করতে হবে না।

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


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

8
@ সার্জবার্শ আমাকে 20 বছর আগের একটি পুরানো প্রোগ্রামিং জোকের কথা মনে করিয়ে দেয়। "খট খট." "কে ওখানে?" ... ... ... ... খুব দীর্ঘ বিরতি ... ... "" জাভা "
ড্যান নীলি

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

2
@ সার্জবার্শ যা আপনার একটি ইংরেজী শ্লেষ হিসাবে কাজ করে যা তা অনুবাদে কিছুটা অস্তিত্ব হারিয়ে ফেললেও। পাং অনুবাদ করা সম্ভবত কবিতার চেয়ে শক্ত।
ড্যান নীলি

3
ভাল প্রোগ্রামাররা এখনও কর্মক্ষমতা এবং মেমরির খরচ নিয়ে উদ্বিগ্ন, যা আজও অযথা লোককে আবর্জনা ফিরিয়ে আনতে বলছে relevant
Sklivvz

2

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

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


2
@ কোডি গুড পয়েন্ট, এটি স্থির পদ্ধতিতে প্রযোজ্য হবে না।
জিমি জেমস

14
@ marisbest2 কোন যুক্তি?
বিট্রি

3
ঠিক আছে, যদি nullভাষার অংশ না হত তবে লোকেরা সমস্ত প্রকার সেন্ডিনেল মান ব্যবহার করত যার অর্থ "দয়া করে এই যুক্তি / প্রত্যাবর্তনের মানটিকে উপেক্ষা করুন, এতে কোনও বোধগম্য মান নেই"। সমস্যাটি nullজিনিসটি নিজেই নয়, কেবল এটি ভুলভাবে ব্যবহার করতে ঝোঁক। আমি বাজি রেখেছিলাম যে এই সমস্যাটি কেবলমাত্র অতিরঞ্জিত হবে যদি মানককে nullকাস্টম সলিউশনগুলির একটি অগণিত স্থানের সাথে প্রতিস্থাপন করা হবে, যেখানে প্রতিটি প্রয়োগটি নীরবে ব্যবহার উপেক্ষা করে বা স্ট্যান্ডার্ড নাল পয়েন্টার ব্যতিক্রম ইত্যাদির পরিবর্তে বিশেষ ব্যতিক্রম ছুঁড়ে দেওয়ার মতো আচরণ করবে
cmaster

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

2
@ সার্জবার্চ আমি এর সাথে একমত :-) আমার আপত্তি একটি "দয়া করে এই মানটিকে উপেক্ষা করুন" প্রকাশ করার মানক উপায় ছাড়াই কোনও ভাষার বিরুদ্ধে against nullএটির জন্য সূক্ষ্ম কাজ করে (জরিমানা = সহজ), তবে কঠিন শব্দার্থবিজ্ঞানের সাথে মানকযুক্ত .চ্ছিক মানগুলি অবশ্যই আরও একটি সূক্ষ্ম বিকল্প (সূক্ষ্ম = নিরাপদ)।
মাস্টার

2

আরেকটি দিক:

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

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

এই চিন্তাভাবনাটি ভাষায় অনুভূত হয়, উদাহরণস্বরূপ, কোনও পদ্ধতি ফেলতে পারে এমন সম্ভাব্য ব্যতিক্রমগুলির বলবত ঘোষণা, অস্পষ্ট একাধিক উত্তরাধিকার এড়ানোর জন্য পৃথক প্রকারের interfaceবনাম classইত্যাদি। এটি কীসের জন্য (সংকলনের সময় ত্রুটি পরিচালনার ক্ষেত্রে দৃ focus় ফোকাসযুক্ত একটি স্থিতিশীল অপরিহার্য ওওপি বাস্তব-ভাষা) সেই জিনিসগুলি আসলে বেশ মার্জিত এবং শক্তিশালী powerful এগুলি তাত্ত্বিক (বিজ্ঞান) ভাষাগুলির নিকটবর্তী হয় যা উদ্দেশ্যমূলকভাবে কেবলমাত্র অন্য কোনও বাস্তব-ভাষার ভাষার চেয়ে আগে এই বিষয়গুলি অন্বেষণ করার জন্য তৈরি করা হয়েছিল (সেই সময়, মনে রাখবেন)।

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

(এবং এনবি, রুবি (উদাহরণস্বরূপ)) এটি অন্যরকমভাবে পরিচালনা করে এবং এর সমাধানটি এখনও জাভার মতো ঠিক গ্রহণযোগ্য , কারণ এটির সম্পূর্ণ ভিন্ন দর্শন রয়েছে example উদাহরণস্বরূপ এটি একটি বিশাল ফোকাস দেওয়ার সময় উইন্ডো থেকে পুরোপুরি সম্ভাব্যতা এবং যুক্তিবাদকে ছুঁড়ে ফেলে while ভাষার অত্যন্ত উচ্চতর প্রকাশ্যতা ive)

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