কোনও ফাংশন / পদ্ধতি বর্ণনা করার জন্য ব্যবহৃত শব্দটি কী বলে যা তাকে বলা বস্তুটি সংশোধন করে?


12

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

আমার এক বন্ধু প্রোগ্রামিং শিখছে, বিশেষত জাভাস্ক্রিপ্ট, এবং তিনি আমাকে জিজ্ঞাসা করলেন কেন এটি কাজ করছে না:

var a = "Hello World";
a.replace("Hello", "Goodbye");

console.log(a)  // Logs "Hello World"

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

var a = "Hello World";
a = a.replace("Hello", "Goodbye");

console.log(a);  // Logs "Goodbye World"

যাইহোক, বিকল্পটি জাভাস্ক্রিপ্টের মতো একটি ফাংশন reverse(), কারণ এটি যাকে বলে তা পরিবর্তন করে। উদাহরণ স্বরূপ:

var fruits = ["Apples", "Oranges", "Bananas"];
fruits.reverse();

console.log(fruits)  // ["Bananas", "Oranges", "Apples"]

আমার বন্ধু যখন আমাকে জিজ্ঞাসা করল কেন তিনি কেন replaceকাজ করছেন না, আমি বুঝতে পেরেছিলাম যে আমি এমন একটি শব্দ পৌঁছে যাচ্ছি যা আমি জানি না (যতদূর আমি অবগত আছি) ...

"আপনাকে স্ট্রিংটি" স্ট্রিং ডট রিপ্লেস "এ সেট করতে হবে, কারণ প্রতিস্থাপনের কাজটি ________।"

আপনাকে "অ্যারে ডট বিপরীত" এর সমান আরে সেট করার দরকার নেই , কারণ বিপরীতটি ________ ""

আমি প্রোটোটাইপ ফাংশনগুলির সাথে পরিচিত যদিও আমি বিশ্বাস করি না যে এই শব্দটি আমি সন্ধান করছি। কেউ কি আমাকে এই শূন্যস্থান পূরণ করতে সহায়তা করতে পারে?


6
শব্দটি কি "মিউটর"? হিসেবে: You don't need to set an array equal to "array dot reverse", because reverse is a mutator function। আমি মনে করি যে আমি এই পরিভাষাটি এমন ফাংশনগুলিকে বোঝাতে শুনেছি যা তাদের কল করে "রূপান্তর" করে। তবে আপনার সম্ভবত এটি অন্য কোথাও ডাবল-চেক করা উচিত।
হতাশ

এটা প্রশংসা করি! আমি কেবল মিউটর পদ্ধতিতে কিছু পাঠ করেছি এবং আমি মনে করি এটি অবশ্যই এই কথোপকথনে বেশ ভালভাবে ফিট করে। অবশ্যই আমি যা খুঁজছি তার রাজ্যে।
সান্তি

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

ভাল অবশ্যই 30 টি বিস্তারিত লাইনে ব্যাখ্যা করা হয়েছে। আমি শিরোনামটি নির্ভুল হতে সংশোধন করব, মাথা উঁচু করার জন্য ধন্যবাদ!
সান্তি

উত্তর:


12

আপনি যে জোড় ধারণাগুলির সন্ধান করছেন তা হ'ল পরিবর্তনযোগ্য / পরিবর্তনযোগ্য পরামিতি এবং স্থানে / ফলাফলগুলি ফেরত।

আপনার উদাহরণগুলিতে:

কারণ প্রতিস্থাপন ফাংশন একটি স্ট্রিং যা, পাইথন এ, উপর পরিচালনা আপনি "STRING প্রতিস্থাপন ডট" স্ট্রিং সেট করতে অপরিবর্তনীয় তাই ফাংশন প্রতিস্থাপন আয় একটি নতুন স্ট্রিং।

কোনও সি / সি ++ প্রোগ্রামারের ক্ষেত্রে এটি "রেফারেন্স দ্বারা পাস" না হয়ে "মান দ্বারা পাস" হিসাবে পরামিতি হিসাবে বেশি পরিচিত, যা তাদেরকে অস্থির করে তোলে এবং ফলাফলটি ফেরত দেয়।

আপনাকে "অ্যারে ডট বিপরীত" সমান অ্যারে সেট করার দরকার নেই, কারণ বিপরীত একটি অ্যারেতে পরিচালিত হয়, যা পরিবর্তনীয় , তাই ফিরে আসার আগে জায়গায় স্থান পরিবর্তন করতে সক্ষম ।

যেমন সি / সি হিসাবে ভাষায় ++, এই পরামিতি মানে ওই "রেফারেন্স দ্বারা পাস" ঠিকানাটি যা ক্ষণস্থায়ী হিসাবে পরিচিত হয় যদি অপরিবর্তিত দ্বারা const, পরিবর্তন, এর ফাংশন পারবেন পরিবর্তন ঘটান , যে ঠিকানা ফলাফল পরিবর্তনের বিষয়বস্তু ইন-জায়গা ফেরার আগে।

অবশ্যই কোনও ফাংশন থাকা অস্বাভাবিক কিছু নয় যা উভয় প্রক্রিয়া দ্বারা ফলাফল দেয়, উদাহরণস্বরূপ int SomeFn(int p1, int p2, int *ErrCode), সম্ভাব্যভাবে প্রত্যাবর্তন মূল্যে এবং এর বিষয়বস্তুগুলি সংশোধন করে ফলাফলগুলি ফিরিয়ে আনতে পারে ErrCode

একটি তৃতীয় পদ্ধতি

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


আহ, আমি এই পদগুলির সাথে পরিচিত, যদিও আমি নিশ্চিত ছিলাম না যে কোনও আসল শব্দ আছে যা নিজেই ফাংশনটি বর্ণনা করে । যেমনটি (The reverse function is a _______ function.বলা হচ্ছে) এটি আমার বন্ধুকে দেওয়া শেষের মতো প্রায় একই রকম প্রতিক্রিয়া, তাই আমি আপনার নিশ্চিতকরণের প্রশংসা করি - যদিও আমি এখনও ভাবছি যে এখানে নির্দিষ্ট শর্তাবলী রয়েছে কিনা। আমি প্রশ্নটি কিছুটা সময়ের জন্য উন্মুক্ত রাখতে যাচ্ছি তবে এই শব্দগুলির সহজ অস্তিত্ব না থাকলে ঘটনাটির উত্তর হিসাবে অবশ্যই এটি গ্রহণ করব।
সান্তি

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

-1। স্ট্রিংগুলি অপরিবর্তনীয় বা অপরিবর্তনীয় কিনা সেটির সাথে কাজ করা ফাংশনের সাথে কোনও সম্পর্ক নেই। ফাংশনটি পরিবর্তনীয় বা পরিবর্তনযোগ্য নয় এবং এটি "প্রত্যাবর্তন বা স্থানে থাকা" নয়। ফাংশনগুলি তাদের যুক্তিগুলি সংশোধন করতে পারে এবং এখনও ফিরে আসতে পারে।
মাইলস রাউট

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

4

এটি প্রকাশ করার জন্য আমার পছন্দের উপায়টি হ'ল:

  • অ্যারে reverseপদ্ধতিটি পরিবর্তন করছে । এটি একটি মিউটর । একটি সাধারণ বিশেষ ক্ষেত্রে একটি হল সেটার

  • স্ট্রিং replaceপদ্ধতিটি নন-মিউটেশন । এটি কোনও মিউটর নয় । এটি পরিবর্তন না হয়, তাহলে কিছু , এটা পার্শ্ব প্রতিক্রিয়া বিনামূল্যে । একটি সাধারণ বিশেষ কেস একটি গ্রাহক

  • যেহেতু জাভাস্ক্রিপ্ট স্ট্রিং হয় অপরিবর্তনীয় , স্ট্রিং পদ্ধতি mutating হতে পারে না।

    "হ্যালো ওয়ার্ল্ড"। রিপ্লেস ("হ্যালো", "বিদায়");

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

  • যেহেতু জাভাস্ক্রিপ্ট অ্যারেগুলি পরিবর্তনযোগ্য , তাই অ্যারে পদ্ধতিগুলি পরিবর্তন হতে পারে। জাভাস্ক্রিপ্ট সহজেই সংশোধিত এবং অনুলিপি করে অনুলিপি করা হয় স্থানীয় স্টোরেজ বিন হিসাবে অ্যারে ব্যবহার করার ঝোঁক।

2

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

আপনার ক্ষেত্রে, আপনি বলবেন:

আপনাকে স্ট্রিংটি "স্ট্রিং ডট রিপ্লেস" এ সেট করতে হবে, কারণ প্রতিস্থাপনের কার্যটি ধ্বংসাত্মক নয় ।

আপনার "অ্যারে ডট বিপরীত" সমান অ্যারে সেট করার দরকার নেই, কারণ বিপরীত ধ্বংসাত্মক


1

আপনি যে শব্দটির সন্ধান করছেন তা সম্ভবত বিশুদ্ধ ?

replace()খাঁটি (বা বলে মনে হচ্ছে) খাঁটি কারণ এটির মতো কোনও পার্শ্ব-প্রতিক্রিয়া রয়েছে (যেমন, স্ট্রিংটি সংশোধন করে) reverse()এমনটি মনে হচ্ছে না যদিও এটি অশুচি কারণ এটি অ্যারের অবস্থার পরিবর্তন করে।


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

1

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

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে, প্রসঙ্গটি হ'ল ফাংশনটি অপারেটিং চলছে।


0

আমি জানি না যে একটি সরকারী উত্তর আছে, তবে এখানে দুটি আপনার পছন্দ হতে পারে।

কার্যপ্রণালী

কেবল এই প্রশ্নের উত্তরের মত মনে হচ্ছিল, এটি আপনার প্রশ্নের মতো দেখতে অনেকটা BTW-- আপনার এটি পরীক্ষা করা উচিত।

ইন-প্লেস ইউনারি অপারেশন

এই পৃষ্ঠাটি পর্যালোচনা করুন: java.util.function । এটি বিভিন্ন প্রোটোটাইপগুলির প্রতিনিধিদের (ইনপুট / আউটপুট স্বাক্ষর) জন্য এক ধরণের তৈরি নাম সরবরাহ করে, উদাহরণস্বরূপ একটি প্রতিনিধি যা যুক্তি গ্রহণ করে এবং কিছুই ফিরিয়ে দেয় না তাকে গ্রাহক বলা হয় ।

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

এই জাভা ছেলেদের মতে (এবং তারা বেশ স্মার্ট বলে মনে হচ্ছে), এমন একটি প্রতিনিধি যা একক ইনপুট গ্রহণ করে এবং একই ধরণের মান ফেরত দেয় তাকে অ্যানারি অপারেটর বলে

এখন এর ক্ষেত্রে array::Reverse(), একটি অ্যারে অপরিবর্তনীয় নয় এবং সম্ভাব্যভাবে প্রচুর জায়গা নিতে পারে, তাই স্থানে অপারেশন করা আরও দক্ষ এবং সুবিধাজনক। অতএব Reverse()একটি ইন-প্লেস ইউনিারি অপারেটর

কিন্তু আমার কাছে একটি "অপারেটর" একটি বিশেষ চিহ্ন (সংযোজন অপারেটর, নামেও পরিচিত মত হল +বা একটি গাণিতিক শব্দ মত) mod। অতএব আমি এটিকে অপারেট আয়ন বলতে পছন্দ করি , স্থানে অবিচ্ছিন্ন অপারেশন প্রদান করে


আপনি ধারণার মিশ্রণ করছেন। Reverse()একটি অপারেটর নয়, একটি ইউনারী অপারেটর একই ধরণের কোন মান ফিরিয়ে করার প্রয়োজন নেই (যেমন !, delete, typeof), এবং অপারেটরদের প্রতিনিধিরা নয়। তবে "ইন-প্লেস" এমন একটি পদ্ধতির জন্য একটি সূক্ষ্ম শব্দ যা এটির উদাহরণটি পরিবর্তন করে। [আমি ভোটটি
নিইনি

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

আচ্ছা বুঝলাম! নোট করুন যে জাভাতে ল্যাম্বডাসকে পুনঃনির্মাণ করতে তারা একটি কার্যকরী ইন্টারফেস (শুধুমাত্র 1 পদ্ধতিযুক্ত একটি জাভা ইন্টারফেস) এর ধারণার উপর ভিত্তি করে তৈরি করেছিল যাতে আমরা "জাফল্য" হিসাবে প্রয়োগ করার জন্য সাধারণ জাভা অবজেক্টগুলির চারপাশে যেতে পারি। (ব্রায়ান গোয়েটসের ল্যাম্বডাস যুক্ত করার বিষয়ে একটি প্রযুক্তিগত আলাপ রয়েছে Multi একাধিকবার তিনি বলেছিলেন "সুস্পষ্ট পদ্ধতিটি চুষতে হবে" ") স্ট্রিম প্রসেসিং অবজেক্টের জন্য কার্যকরী ইন্টারফেস তৈরি করার সময় তারা" অপারেটর "এর মতো পদক্ষেপের মতো আপত্তিজনক শব্দের ব্যবহার করে। বিভ্রান্তিকর! তাদের অবশ্যই ভাল নাম শেষ হয়ে গেছে। আমি মনে করি না যে এটি ওওপি পদ্ধতিগুলির জন্য পদগুলির একটি ভাল উত্স যা প্রাপক অবজেক্টটি করে / পরিবর্তন করে না।
জেরি 101
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.