প্রতিটি জাভাস্ক্রিপ্ট ফাংশন একটি মান ফিরে আছে?


102

আমি প্রতিটি ফাংশনে পেশাদার মত মন্তব্য যুক্ত করতে নেটবিন ব্যবহার করছি, আমি লিখছি। সুতরাং আমি এর প্রতিটিটি দিয়েই শুরু করি /**এবং তারপরে আমি Enterনীচের ফাংশনের জন্য নেটবিন্সকে ডিফল্ট মন্তব্য স্কিমটি পূরণ করতে চাপতে চাই ।

এখনও অবধি আমি কেবল এটি পিএইচপি ভাষার জন্য ব্যবহার করে আসছি এবং এই ক্ষেত্রে নেটবিয়ানরা সর্বদা @returns {type}কেবলমাত্র মন্তব্য স্কিমের অংশ যোগ করছিল , যদি নিম্নলিখিত পিএইচপি ফাংশনটিতে সত্যই returnবিবৃতি অন্তর্ভুক্ত থাকে । তথাকথিত "পদ্ধতিগুলি" (এমন ফাংশন যা কোনও মান ফেরায় না) এই অংশটি অনুপস্থিত ছিল।

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

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


6
যদি কোনও রিটার্ন মান নির্দিষ্ট না করা থাকে, জাভাস্ক্রিপ্ট ফিরে আসবে undefined। অনেক ভাষায় সর্বশেষ বিবৃতিটির ফলাফল ফিরে আসে (আরও দরকারী, আইএমও)। এগুলিকে অন্তর্নিহিত রিটার্ন বলা হয় ।
জাজ

উত্তর:


192

সংক্ষিপ্ত উত্তর হলো 'না'।

বাস্তব উত্তর হবে হ্যাঁ: জাতীয় ইঞ্জিন ঘোষিত হতে যে কিছু ফাংশন তার ব্যবসা, যা কিছু ফিরে ফাংশন দ্বারা সম্পন্ন করা হয় সমাপ্ত হয়েছে হয়েছে। এ কারণেই, "সমাপ্ত" পরিবর্তে একটি ফাংশন "ফিরে এসেছে" বলে বলা হয় ।
একটি ফাংশন যাতে সুস্পষ্ট রিটার্ন স্টেটমেন্টের অভাব থাকে undefined, এমন কোনও সি (++) ফাংশন যেমন ফিরে আসে না বলে ফিরে আসে (এবং তার স্বাক্ষর এটি প্রতিফলিত করে) void:

void noReturn()//return type void
{
    printf("%d\n", 123);
    return;//return nothing, can be left out, too
}

//in JS:
function noReturn()
{
    console.log('123');//or evil document.write
    return undefined;//<-- write it or not, the result is the same
    return;//<-- same as return undefined
}

এছাড়াও, জেএসে, প্রতিটি ভাষার মতোই, আপনি কোনও ফাংশনের রিটার্ন মানকে অবহেলা করতে পারবেন, যা একটি ভয়াবহভাবে সম্পন্ন হয়:

(function()
{
    console.log('this function in an IIFE will return undefined, but we don\'t care');
}());
//this expression evaluates to:
(undefined);//but we don't care

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

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


5
আমি বিশ্বাস করি না যে সি ++ (বা সি) "একটি শূন্যতা দেয়"। "অকার্যকর" ট্যাগটি ইঙ্গিত দেয় যে এটি কোনও কিছুই ফেরায় না। যদিও এটি একটি সামান্য বিষয়, জিজ্ঞাসা করা প্রশ্নের সাথে এর কোনও যোগসূত্র নেই।
জয়

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

সুস্পষ্ট রিটার্ন বনাম অন্তর্নিহিতের জন্য কোনও কার্যকারিতা সুবিধা রয়েছে কি?
4m1r

@ 4 এম 1 আর: আমি জানি না, এটি সম্ভবত ইঞ্জিনের উপর নির্ভর করে। যদি পারফরম্যান্সের পার্থক্য থাকে তবে এটি সম্ভবত নগণ্য। return;প্রারম্ভিক রিটার্ন বনাম সম্ভবত আপনার যদি প্রথম দিকে ফিরে আসতে হয় তবে সম্ভবত এটি কার্যকর। লিখন বিভিন্ন মান নিয়ে আসে return undefined;যদি undefinedভিন্ন মানের সমাধান হয় to
অপরিজ্ঞাতভাবে

4
@ সেবাস্তিয়ানলাস: আমি voidঅন্যান্য ভাষায় (সি এর মতো) উল্লেখ করছিলাম , যেখানে আপনার মতো ফাংশন থাকতে পারে void do_someting(int *arg)তবে এই ধরণের সাথে আপনার কোনও পরিবর্তনশীল থাকতে পারে না void। সি তে, voidআসলে কোনও ধরণের নয়, সুতরাং এই ফাংশনগুলি কোনও কিছুই ফেরায় না , তারা কেবল লাফিয়ে পড়ে
এলিয়াস ভ্যান ওটেজেম

27

না, ফেরার দরকার নেই not

কিন্তু কোন রিটার্ন আসলে ফিরে আসে নাundefined


8

প্রতিটি জাভাস্ক্রিপ্ট ফাংশন একটি মান ফিরে আছে?

না, তারা না। সত্য যে স্পেসিফিকেশন গভীর, এই সব কিছুটা পৃথক:

function foo() {
}
function foo() {
    return;
}
function foo() {
    return undefined;
}

... কিন্তু ফল কলিং তাদের প্রতিটি একই হল: undefined। বাস্তববাদী পদে তাই:

  1. আপনাকে কোনও লিখতে হবে না return, আপনি কেবল কোড এক্সিকিউশনটিকে ফাংশনের "শেষের দিকে" পড়তে পারেন
  2. আপনি যদি ফিরে আসছেন undefined, বিশেষত, আপনি একটি খালি লেখেনreturn;
  3. কোনও ফাংশন কল করার সময়, আপনি (কোডে) বলতে পারবেন না যে মৃত্যুদন্ড কার্যকর শেষের দিকে পড়েছিল, দিয়ে শেষ হয়েছিল return;, বা দিয়ে শেষ হয়েছে কিনা return undefined;; এগুলি সমস্তই আপনার কলিং কোডের মতো দেখতে একই রকম

বৈশিষ্টটি পুনরায়: বিশেষত, যখন কোনও ফাংশনের সম্পাদন শেষের দিকে চলে যায়, সেই অনুমিতিতে যেটি একটি "স্বাভাবিক" সমাপ্তি; তবে return;এবং return value;উভয়ই "রিটার্ন" এর সাথে সম্পর্কিত মান ( undefined), যা (কখনও কখনও সামান্য) আলাদা with তবে পার্থক্যটি কোনও ফাংশন কল করার শব্দার্থ দ্বারা মুছে ফেলা হয় , যা বলে:

...

  1. যদি ফলাফল হয় [[[প্রকার]] return,, ফিরে আসুন সাধারণ কমপ্লিট ( ফলাফল [[[মান]]]।
  2. রিটার্নআইএফআরপ্ট ( ফলাফল )।
  3. রিটার্ন NormalCompletion ( undefined )।

সুতরাং কোডের মধ্যে আপনি কোন পার্থক্য রাখতে পারবেন না।


2

না, আপনাকে প্রতিটি কাজের জন্য কিছু দিতে হবে না। এটি আপনার logচ্ছিক এবং আপনার কোড লজিক কীভাবে লিখবে তা অবধি is

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