একটি ভেরিয়েবল আরম্ভ করা কতটা গুরুত্বপূর্ণ


9

ভেরিয়েবল আরম্ভ করা কতটা গুরুত্বপূর্ণ?

সঠিকভাবে আরম্ভ করা কি মেমরি ফাঁস এড়ায় বা পারফরম্যান্স সুবিধা দেয়?


14
এটি ভাষার উপর নির্ভর করে। কিছু ভাষায় বাগগুলি প্রতিরোধ করা বেশ গুরুত্বপূর্ণ, বাকী অংশে এটি পঠনযোগ্যতার জন্য সহায়তা করার জন্য কেবল ভাল জিনিস।
তেলস্তিন

আপনার ইনপুট জন্য ধন্যবাদ টেলাস্টিন। ভাষার উপর নির্ভর করে আপনি এমন একটি মামলা রাখতে পারেন যেখানে এটি গুরুত্বপূর্ণ হয়ে ওঠে?
বিবেক

4
সি ++ এখানে কুখ্যাত। ডিবাগ-এ, স্থানীয় ভেরিয়েবলগুলি nullসাধারণ সংকলকগুলি 0 (বা ) থেকে শুরু করে তবে মুক্তির জন্য সংকলন করার সময় এলোমেলো আবর্জনা হয় are (যদিও আমার সি ++ জ্ঞান এখন থেকে 10 বছর পূর্বে, তবে জিনিসগুলি পরিবর্তিত হতে পারে)
টেলাস্টিন

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

1
@ টেলাস্টিন এর চেয়ে খারাপ। অপরিজ্ঞাত আচরণ আবর্জনা রাজ্যে সীমাবদ্ধ নয়, কিছু ঘটতে পারে। সংকলকটি ধরে নিতে পারে যে অচিরাচরিত ভেরিয়েবলগুলি পড়ে এমন পাথগুলি অ্যাক্সেসযোগ্য নয়, এবং "অপ্রস্তুত" প্রভাবগুলি দূর করে যা পথে চলে।
ক্যালথ

উত্তর:


7

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

যেহেতু ত্রুটিটির প্রজনন পরীক্ষার পরিবেশে অসম্ভবের পাশে হতে পারে, এটির অনুসন্ধান এবং সংশোধন করা অসম্ভবের পাশে।

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

ভেরিয়েবলগুলি সূচনা করার একটি বিশাল কর্মক্ষমতা সুবিধা রয়েছে, কেবলমাত্র এটি নয় যে কোনও প্রোগ্রাম যা সঠিকভাবে কাজ করে তা অনন্তের চেয়ে দ্রুত গতিতে হয় না, তবে বিকাশকারীরা সেখানে থাকা উচিত না এমন ত্রুটিগুলি খুঁজে পেতে এবং ঠিক করতে কম সময় ব্যয় করেন এবং "সত্য" কাজ করতে আরও সময় ব্যয় করেন time

ভেরিয়েবলগুলি আরম্ভ করার অন্যান্য উল্লেখযোগ্য সুবিধা হ'ল কোডটির মূল লেখক তাদের কী শুরু করতে হবে তা সিদ্ধান্ত নিতে হবে। এটি সর্বদা তুচ্ছ ব্যায়াম হয় না এবং যখন তুচ্ছ না হয় তবে এটি একটি দুর্বল নকশার ইঙ্গিত হতে পারে।

মেমরি ফাঁস একটি ভিন্ন সমস্যা, তবে সঠিক সূচনাটি কেবল তাদের প্রতিরোধে সহায়তা করতে পারে না, এটি তাদের সনাক্তকরণ এবং উত্স সন্ধানেও সহায়তা করতে পারে - এটির উচ্চতর ভাষা নির্ভর এবং এটি সত্যিকার অর্থে আলাদা অনুসন্ধান যা আমি দিতে সক্ষম তার চেয়ে আরও অনুসন্ধানের যোগ্য question এই উত্তরে।

সম্পাদনা করুন: কিছু ভাষায় (যেমন সি #) অবিচ্ছিন্ন ভেরিয়েবলগুলি ব্যবহার করা সম্ভব নয়, কারণ প্রোগ্রামটি সংকলন করবে না, বা সম্পাদিত হলে একটি ত্রুটি রিপোর্ট করা হবে done যাইহোক, এই বৈশিষ্ট্যগুলির সাথে বহু ভাষার সম্ভাব্য অনিরাপদ কোডের ইন্টারফেস রয়েছে, তাই অবিচ্ছিন্ন ভেরিয়েবলগুলি প্রবর্তন করতে এই জাতীয় ইন্টারফেস ব্যবহার করার সময় যত্ন নেওয়া উচিত।


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

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

4
@ ম্যাটনজ - মূল কথাটি হ'ল যে ভাষাগুলি সি # (বা জাভা) এর মতো আচরণ করে, তাদের এই পরামর্শগুলির মধ্যে কয়েকটি বিভ্রান্তিকর বা সম্পূর্ণ ভুল। একটি ভাষা অজ্ঞাব্যত্তিক প্রশ্ন হিসাবে এটির একটি ভাষা অজ্ঞাবলিক প্রতিক্রিয়া থাকা উচিত, যার অর্থ এমন ভাষাগুলি সম্বোধন করা উচিত যা নিরাপদে প্রাথমিক ভেরিয়েবলগুলি পরিচালনা করে এবং সেইসাথে না এমনগুলিও পরিচালনা করে।
ববসন

1
আমি আরও যোগ করব যে অবিচ্ছিন্ন ভেরিয়েবল ইস্যুটি খুঁজে পাওয়া কঠিন নয় কারণ কোনও অর্ধসংশ্লিষ্ট সংকলক / স্ট্যাটিক বিশ্লেষক তাদের সম্পর্কে সতর্ক করবে
জে.কে।

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

7

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

নন নাল ডিফল্ট থাকা যে কোনও প্রকারের একটি ভেরিয়েবল ডিফল্ট মান সঞ্চয় করতে কিছু মেমরি গ্রহণ করবে।


6

অবিচ্ছিন্ন ভেরিয়েবলটি ব্যবহার করার চেষ্টাটি সর্বদা একটি বাগ হয়, সুতরাং সেই বাগটি হওয়ার সম্ভাবনা হ্রাস করা বুদ্ধিমান হয়ে যায়।

সম্ভবত সমস্যাটি কমাতে সবচেয়ে সাধারণ পদ্ধতির প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি হ'ল স্বয়ংক্রিয়ভাবে একটি ডিফল্ট মান থেকে আরম্ভ করা হয়, সুতরাং কমপক্ষে যদি আপনি কোনও ভেরিয়েবলটি আরম্ভ করতে ভুলে যান তবে এটি এমন কিছুর 0পরিবর্তে কিছু হবে 0x16615c4b

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

কার্যকরী প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি কেবল অস্বীকারহীন মানগুলিকেই অস্বীকার না করে পুনরায় নিযুক্তকরণকে পুরোপুরি অস্বীকার করে এই সমস্যাটি সমাধান করে। এটি সমস্যাটি সরিয়ে দেয় এবং ভাবতে পারে এমন তীব্র বাধা না হয়ে দাঁড়ায়। এমনকি অ-কার্যকরী ভাষায়ও যদি আপনি এটির আরম্ভ করার জন্য সঠিক মান না পাওয়া পর্যন্ত কোনও ভেরিয়েবল ঘোষণার অপেক্ষায় থাকেন তবে আপনার কোডটি আরও দৃ rob় হতে থাকে।

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

মেমরি ফাঁস পুরোপুরি সম্পর্কিত নয়, যদিও সঠিকভাবে-সূচনাযুক্ত ভেরিয়েবলগুলি একটি স্বল্প সময়ের জন্য সুযোগে থাকে এবং তাই কোনও প্রোগ্রামারের দুর্ঘটনাক্রমে ফাঁস হওয়ার সম্ভাবনা কিছুটা কম হতে পারে।


সর্বদা? আপনার অর্থ হ'ল "সর্বদা" হিসাবে "কীভাবে একটি স্থির ভালগ্র্যান্ড বার্তা ওপেনএসএসএলকে বেহুদা" marc.info/?t=114651088900003&r=1&w=2 উপস্থাপন করে ? বা আপনি কি অন্যটিকে বোঝায়, "প্রায় সর্বদা" একটি?
জেনসজি

1
আমি তিনটি ভাষা সম্পর্কে ভাবতে পারি যা ত্রুটি ছাড়াই অবিচ্ছিন্ন ভেরিয়েবলগুলিকে মঞ্জুরি দেয়, যার মধ্যে একটি ভাষাগত উদ্দেশ্যে এই জাতীয় ব্যবহার করে।
ডগএম

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

5

আরম্ভ করা, সূচিত করে যে প্রাথমিক মানটি গুরুত্বপূর্ণ। প্রাথমিক মানটি যদি বিবেচিত হয়, তবে হ্যাঁ, স্পষ্টতই আপনাকে অবশ্যই এটি নিশ্চিত করা উচিত is যদি এটি কোনও বিষয় না রাখে তবে বোঝায় যে এটি পরে শুরু করা হবে।

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

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


-1 আপনি এই প্রসঙ্গে আরম্ভের অর্থ কী পুনরায় সংজ্ঞায়িত করছেন।
পিটার বি

@ পিটার বি, আমি আপনার মন্তব্য বুঝতে পারি না। দয়া করে, আপনি যদি করেন তবে আমি কেমন আছি বলুন, "এই প্রসঙ্গে আরম্ভের অর্থ কী তা বোঝানো হচ্ছে"। আপনাকে ধন্যবাদ
উপবৃত্তাকার দর্শন

আপনার নিজের বাক্যটি পড়ুন, এটি বিজ্ঞপ্তিযুক্ত যুক্তি: "সূচনা করা, সূচিত করে যে প্রাথমিক মান বিবেচনা করে If পরে শুরু করা। "
পিটার বি

@ পিটার বি, কিছু লোক প্রোগ্রামগত কারণে নয় বরং সাধারণ নিয়ম হিসাবে সূচনা করে, অর্থাত তারা প্রাথমিক মূল্য বিবেচনা করে কিনা তা সূচনা করে। এটি কি ওকিউ এর হৃদয় নয়: ভেরিয়েবলটি আরম্ভ করা কতটা গুরুত্বপূর্ণ? যাইহোক, আপনি এখানে ভোট পেয়েছেন।
উপবৃত্তাকার ভিউ 14

2

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

ধ্রুবক এবং শ্রেণি ভেরিয়েবল

ক্লাস ভেরিয়েবলগুলি - staticজাভাতে চিহ্নিত - ধ্রুবকের মতো। =ক্লাস ইনিশিয়ালাইজার ব্লকের মধ্যে থেকে এই পরিবর্তনগুলি সাধারণত সংজ্ঞায়নের পরে চূড়ান্ত এবং প্রাথমিক করা উচিত static { // initialize here }

ক্ষেত্রসমূহ

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

nullকিছু ধরণের পতাকা বা বিশেষ মান হিসাবে ব্যবহার করার তাগিদটি প্রতিহত করুন এবং প্রতিরোধ করুন । রাজ্য ধরে রাখার জন্য একটি নির্দিষ্ট ক্ষেত্র অন্তর্ভুক্ত করা ভাল। নামের সাথে একটি ক্ষেত্র stateযা একটি Stateগণনার মান ব্যবহার করে তা ভাল পছন্দ হবে।

পদ্ধতি পরামিতি

যেহেতু প্যারামিটারের মানগুলিতে পরিবর্তনগুলি (এটি অবজেক্টগুলির সাথে উল্লেখযোগ্য বা মৌলিক ধরণের মতো পূর্ণসংখ্যার মতো ইত্যাদি) কলার দ্বারা দেখা যাবে না, পরামিতিগুলি চিহ্নিত করা উচিত final। এর অর্থ হ'ল ভেরিয়েবলের মানগুলি পরিবর্তন করা যায় না। নোট করুন যে পরিবর্তনীয় অবজেক্টের উদাহরণগুলির মান পরিবর্তন করা যেতে পারে, রেফারেন্সটি অন্য কোনও অবজেক্টে চিহ্নিত করতে বা পরিবর্তন করা যায় না nullthough

স্থানীয় পরিবর্তনশীল

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

আপনার ভেরিয়েবলটি যেখানে প্রয়োজন সেখানে কেবল তাত্ক্ষণিকভাবে সংজ্ঞায়িত করা আরও ভাল। যদি ভেরিয়েবলটি কেবলমাত্র একটি একক মান নিতে হয় (যা ভাল কোডের মধ্যে বেশিরভাগ ভেরিয়েবলের ক্ষেত্রে সত্য) তবে আপনি ভেরিয়েবলটি চিহ্নিত করতে পারেন final। এটি নিশ্চিত করে যে স্থানীয় ভেরিয়েবলটি একবারে শূন্য বার বা দু'বার নয় একবার বরাদ্দ করা হয়েছে। একটি উদাহরণ:

public static doMethod(final int x) {
    final int y; // no assignment yet, it's final so it *must* be assigned
    if (x < 0) {
        y = 0;
    } else if (x > 0) {
        y = x;
    } else {
        // do nothing <- error, y not assigned if x = 0
        // throwing an exception here is acceptable though
    }
}

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


1

ভেরিয়েবলগুলি অনির্দিষ্টকরণে কোনও সমস্যা নেই।

সমস্যা কেবল তখনই যখন আপনি এমন একটি ভেরিয়েবলটি পড়েন যা এখনও লেখা হয়নি।

সংকলক এবং / অথবা পরিবর্তনশীল ধরণের উপর নির্ভর করে, অ্যাপ্লিকেশন শুরুতে আরম্ভ হয়। অথবা না.

স্বয়ংক্রিয় আরম্ভের উপর নির্ভর না করা এটি সাধারণ ব্যবহার।


0

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

সত্যিই আকর্ষণীয় প্রশ্নটি হচ্ছে কোনও ভেরিয়েবলটি স্বয়ংক্রিয়ভাবে আরম্ভ হয় বা আপনাকে এটি ম্যানুয়ালি করতে হবে কিনা। এটি ব্যবহৃত ভাষার উপর নির্ভর করে। উদাহরণস্বরূপ সি # তে ক্ষেত্রগুলি, অর্থাৎ শ্রেণি স্তরের "ভেরিয়েবল" সর্বদা স্বয়ংক্রিয়ভাবে সেই পরিবর্তনশীল ধরণের জন্য ডিফল্ট মানটিতে স্বয়ংক্রিয়ভাবে আরম্ভ হয় default(T)। এই মানটি সমস্ত শূন্য সমন্বিত একটি বিট প্যাটার্নের সাথে মিলে যায়। এটি ভাষা স্পেসিফিকেশনের অংশ এবং কেবলমাত্র ভাষা প্রয়োগের প্রযুক্তিগত বিশদ নয়। সুতরাং আপনি নিরাপদে এটি নির্ভর করতে পারেন। ভাষার স্পেসিফিকেশন যদি সূচিত করে যে এটি স্পষ্টভাবে শুরু করা হয়েছে তবে স্পষ্টভাবে কোনও পরিবর্তনশীল সূচনা না করা নিরাপদ।আপনি যদি অন্য কোনও মান চান তবে আপনার অবশ্যই স্পষ্টভাবে পরিবর্তনশীলটি শুরু করতে হবে। যাহোক; সি # স্থানীয় ভেরিয়েবল, অর্থ পদ্ধতিতে ঘোষিত ভেরিয়েবলগুলি স্বয়ংক্রিয়ভাবে আরম্ভ হয় না এবং আপনাকে অবশ্যই সর্বদা স্পষ্টভাবে ভেরিয়েবলটি আরম্ভ করতে হবে।


2
এটি কোনও সি # নির্দিষ্ট প্রশ্ন নয়।
ডগএম

@ ডগএম: আমি জানি। এটি সি # নির্দিষ্ট উত্তর নয়, আমি উদাহরণ হিসাবে কেবল # সি নিয়েছি।
অলিভিয়ার জ্যাকট-ডেসকোম্বেস 21

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

@ ডউগএম: আপনি কি আমার বাক্যটি পর্যবেক্ষণ করেছেন "সত্যই আকর্ষণীয় প্রশ্নটি হচ্ছে একটি পরিবর্তনশীল স্বয়ংক্রিয়ভাবে আরম্ভ হয় বা আপনাকে এটি ম্যানুয়ালি করতে হবে কিনা?"
অলিভিয়ার জ্যাকট-ডেসকোম্বেস 13'14

আপনি বোঝাচ্ছেন একজনকে অনুচ্ছেদের মাঝখানে অর্ধেক কবর দেওয়া হয়েছে? হ্যাঁ. আপনার এটি আরও বিশিষ্ট করা উচিত ছিল এবং আপনার "সর্বদা" দাবীতে একটি বাছাইকারী যুক্ত করা উচিত।
ডগএম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.