খালি ফাংশন কেন প্রয়োজন হয়


9

আমি পাইথন শিখতে শুরু করেছি এবং আমি ভাবছি কেন প্রোগ্রামিং ভাষায় খালি ফাংশন প্রয়োজন

যেমন পাইথনে:

def empty_func():
    pass

এমনকি শেল স্ক্রিপ্টে খালি ফাংশন খালি ফাংশন উপলব্ধ।

আমার বোঝাপড়া এবং প্রশ্ন:

  1. প্রোগ্রামিং ভাষার খালি ফাংশনগুলির প্রয়োজন কেন? এটি কি কেবল প্রোগ্রামিং ল্যাঙ্গুয়েজ নিয়ে ঘুরে দেখার জন্য বা অন্য কিছু যা সত্যই গুরুত্বপূর্ণ?

  2. যদি এর কোনও উদ্দেশ্য থাকে তবে কেউ কি ব্যবহারের ক্ষেত্রে বর্ণনা করতে পারেন বা খালি ফাংশন ব্যবহারের প্রকৃত উদাহরণ দিতে পারেন?

  3. বা প্রোগ্রামিং ভাষার কোনও emptyতিহ্য কি খালি ফাংশনকে অনুমতি দেয়?


সম্পাদনা করুন (আপনার উত্তরগুলি পড়ে আমি যে জিনিসগুলি পেয়েছি):

  • স্কেচিং অ্যালগরিদমগুলির জন্য বা বিমূর্ত ফাংশন সহ
  • কোনও ক্রিয়া ছাড়াই ফর্ম জমা দেওয়ার জন্য সম্পাদন করা দরকার
  • কিছু বাধ্যতামূলক ক্রিয়াকলাপের জন্য স্থানধারক

1
প্রোগ্রাম বাস্তবায়ন তাদের সন্ধান / ব্যবহারের প্রত্যাশা করে তবে সেগুলি স্টাবস হিসাবে ব্যবহার করা যেতে পারে, তবে আপনি তাদের মাধ্যমে কিছু পরিবর্তন করতে চান না।
জি.রাসভস্কি

উত্তর:


5

বোর্ন পরিবারের শেল ভাষায়, :কমান্ডটি, যা মোটেও কিছুই করে না, সাধারণত দুটি পরিস্থিতিতে ব্যবহৃত হয়:

  • কিছু যখন বাধ্যতামূলক আদেশের প্রত্যাশা করে তার জন্য স্থানধারক

    while some_condtion
    do :
    done
    

    যেহেতু doকমপক্ষে একটি কমান্ড প্রয়োজন।

  • আর্গুমেন্টগুলি বাতিল করা হচ্ছে, তবে যুক্তি তালিকার অভ্যন্তরীণ পার্শ্ব প্রতিক্রিয়াগুলি করা, যেমন eg

    : ${myvar=foo}

আমি নিশ্চিত যে অন্যান্য অ্যাপ্লিকেশন সম্ভবত রয়েছে যা শেল বিশেষজ্ঞরা জানতে পারবেন :)

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

def submit(callback=empty_func):
    ...

এইভাবে, callbackসরবরাহ না করা থাকলে, জমাটি এখনও চলবে তবে পরবর্তী কোনও পদক্ষেপ নেওয়া হবে না। যদি আপনি Noneডিফল্ট মান হিসাবে ব্যবহার করে থাকেন তবে আপনাকে কোডব্যাকটি Noneকোডে বিশৃঙ্খলা যুক্ত করে স্পষ্ট করে পরীক্ষা করতে হবে the


1

এটি নির্ভর করে আপনি বিকাশের চক্রে কোথায় দাঁড়িয়েছেন, তবে কখনও কখনও অ্যালগরিদমকে স্কেচ করার সময় আপনি এখনই বাস্তবায়ন ছাড়াই জটিল ব্লকগুলি সম্পর্কে বিমূর্ততা তৈরি করতে চান।

def full_algo():
  init_stuff()
  process_stuff()
  ...

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

প্রকাশিত অ্যাপ্লিকেশনগুলির জন্য অন্য ব্যবহার হ'ল উত্তরাধিকার ব্যবহার করার সময়। মনে করুন যে আপনার কাছে একটি বৃহত শ্রেণি রয়েছে যা প্ল্যাটফর্ম নির্দিষ্ট কোডের আচরণকে সংজ্ঞায়িত করে। আপনি এটির মতো একটি যুক্তি দিয়ে শেষ করতে পারেন:

init_filesystem();
access_files();
release_filesystem();

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

class FileSystem{
  virtual void init_filesystem() = 0;
  virtual void access_files() = 0;
  virtual void release_filesystem() = 0;
};

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

অবশেষে (এবং লজ্জাজনকভাবে), কখনও কখনও আপনি খুব পুরানো অ্যাপ্লিকেশন বজায় রাখেন। আপনি আশঙ্কা করছেন যে মোছার পদ্ধতিগুলি জিনিসগুলিকে ভেঙে দেবে। আপনার যখন জটিল উত্তরাধিকার থাকে যা সঠিকভাবে বোঝা যায় না বা যখন আপনার অনেক ফাংশন পয়েন্টার (কলব্যাকস) থাকে তখন এটি ঘটে। আপনি কেবল সেগুলির মধ্যে কোড মুছুন যাতে তারা কিছু না ভেঙে যেভাবেই কল করতে পারে।


0

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

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


1
অসম্পূর্ণ কোডের জন্য, নিক্ষেপ NotImplementedErrorকরা একটি পর্যাপ্ত সমাধান, যেহেতু "ত্রুটিগুলি কখনই নিঃশব্দে কাটানো উচিত নয়" এবং লাইভ প্রোগ্রামে একটি অযুহিত ফাংশন কল করা একটি ত্রুটি।
ivan_pozdeev

যা নির্ভর করে. কোড জন্য আপনি শিপ, হ্যাঁ। তবে যদি এটি কোড হয় আপনি এক ঘন্টার মধ্যে বাস্তবায়নের প্রত্যাশা করছেন এবং ইউনিট পরীক্ষায় কাজ করার সময় আপনি এটিকে অযৌক্তিকভাবে রেখে যাচ্ছেন, কেবল কোনও বাস্তবায়ন না রেখেই আরও ভাল বিকল্প হতে পারে। প্রায়শই আমার ওয়ার্কফ্লো 1) স্টাব পদ্ধতিটি pass 2 সহ লিখুন) ইউনিট পরীক্ষা লিখুন যা পরীক্ষার মান ফেরত দেয় 3) পরীক্ষার ব্যর্থতা যাচাই করুন (পদ্ধতিটি অপরিবর্তিত হিসাবে 4) পদ্ধতি প্রয়োগ করুন 5) পরীক্ষা এখন পাস করে যাচাই করুন
রোবট

0

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

আপনি এটি কলব্যাক সহ সিতেও দেখতে পাবেন। মাঝে মধ্যে, আপনি কোডটি দেখতে পাবেন যে কেবলমাত্র আপনি একটি কলব্যাক সরবরাহ করেছেন এবং এটি একটি নাল পয়েন্টারের ঝুঁকি উপেক্ষা করে কল করার চেষ্টা করে। সেক্ষেত্রে আপনি যা করতে পারেন তা হ'ল একটি খালি কলব্যাক রুটিন সরবরাহ করা। (হ্যাঁ, আমার মনে একটি নির্দিষ্ট বিক্রেতা রয়েছে have)


passকোড লেখার সময় আমি একটি স্থানধারক হিসাবে প্রচুর ব্যবহার করেছি , বিশেষত ক্লাসে, যখন আমি সবকিছু শেষ হওয়ার আগে রান্নেবল কিছু চাই। এটি সত্যই পাইথনের সমতুল্য {}, যা ধনুর্বন্ধনী ব্যবহার না করে পাইথন এটি করতে পারে না। এই অর্থে, আমি যে সকল ভাষাগুলি সম্পর্কে সচেতন সেগুলি এটির অনুমতি দেয়, কেবলমাত্র একটি দম্পতির মতো pythonএকটি কীওয়ার্ডের প্রয়োজন। এমনকি সমাবেশের দিনগুলিতেও আমাদের ছিল NOP
রোবট

@ স্টিভেন বার্নাপ, সাধারণত যখন আমি এরকম কিছু করি তখন আমি প্রিন্টফের স্থানীয় সমতুল্য অন্তর্ভুক্ত করি (">>> রুটিন এক্সএক্সএক্স called n");
জন আর স্ট্রোহম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.