দীর্ঘ পরামিতি তালিকা বনাম দীর্ঘ রাষ্ট্রের পরিবর্তনশীল তালিকা


10

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


মূল বইটি কি সি ++ তে মন্তব্য করে একটি কার্যকরী ভাষা ছিল?
মার্টিন ইয়র্ক

উত্তর:


7

আপনি কোনও proceduralবা functionalদৃষ্টান্তে প্রোগ্রামিং করছেন তা নির্ভর করে । প্রাক্তন এবং পরবর্তীকালের জন্য পঙ্গু করার জন্য পারস্পরিক পরিবর্তন প্রয়োজন। এটি আপেল এবং কমলা। তারা উভয়ই বেইলিউইকে সঠিক!

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


: ধন্যবাদ! << 97 টি বই যা প্রতিটি প্রোগ্রামারকে জানতে হবে >> তে বলেছে আমাদের পার্শ্ব-প্রতিক্রিয়া এড়ানোর মতো কার্যকরী প্রোগ্রামিং নীতিগুলি প্রয়োগ করা উচিত। আমরা কী আবশ্যক কোড প্রসঙ্গে কার্যকরী প্রোগ্রামিং নীতিগুলি প্রয়োগ করতে পারি না?
টমক্যাপস

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

@ মারজান যা কিছু অপরিবর্তনীয় ভেরিয়েবল রয়েছে তা হল রাষ্ট্র

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

@ মারজানভেনেমা: হ্যাঁ, পরিবর্তনযোগ্য পরিবর্তনগুলি থাকা রাষ্ট্র। প্রক্রিয়াভিত্তিক এবং কার্যকরী প্রোগ্রামিংয়ের মধ্যে রাষ্ট্র পরিচালনার ক্ষেত্রে পার্থক্যটি সেই প্রো.গ্রোগ নয়। রাষ্ট্র আছে, এবং কার্যকরী হয় না - পরিবর্তে, পার্থক্যটি হ'ল প্রকল্পটি। খাবার। হয়েছে চপল রাষ্ট্র সবসময় (খাঁটি) কার্মিক প্রোগ্রামিং অপরিবর্তনীয় হয় যেহেতু, রাষ্ট্র। উদাহরণস্বরূপ দেখুন en.wikedia.org/wiki/Purely_functional , যা ব্যাখ্যা করে যে খাঁটি কার্যকরী ভাষা আপডেটগুলি এড়ায়
সেলেসেকে

1

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

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

এছাড়াও:

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

0

না, প্রতি সেটের রাষ্ট্রীয় পরিবর্তনশীলগুলি পার্শ্ব প্রতিক্রিয়া সৃষ্টি করে না

একটি সেটার পদ্ধতিতে কল করা (যে কোনও ডেটা স্ট্রাকচারে যা অন্য কোথাও দৃশ্যমান) কল করা একটি পার্শ্ব প্রতিক্রিয়া।

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

class ManyParams {
    final String theName = null;
    final int    theAge = 0:
    ManyParams() {}
    ManyParams(String a, int b) { theName=a; theAge = b; }
    public withName(String n) {
        return new ManyParams(n, this.theAge);
    }
    public withAge(int i) {
         return new ManyParams(theName, i);
    }
}
/// to be used like this
foo(new ManyParams.withName("John").withAge(42));

অবশ্যই, মনিপ্যারামগুলির নির্মাণকারীর এখনও এইভাবে একটি দীর্ঘ প্যারামিটারের তালিকা থাকবে। তবে এটি গোপন।

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