গ্লোবাল ভেরিয়েবলগুলি কি খারাপ? [বন্ধ]


247

সি / সি ++ এ, বিশ্বব্যাপী ভেরিয়েবলগুলি কি এতটা খারাপ যেটি আমার অধ্যাপক ভাবেন সেগুলি হিসাবে?


17
যদি সে কোন রসিকতা বলার চেষ্টা করে তবে আমি কামড় দেব ... "তারা কতটা খারাপ"?
জাচ স্ক্রিভেনা

13
আমি মনে করি এই প্রশ্নটি বেশ আকর্ষণীয় ছিল! সফ্টওয়্যার বিকাশ এখনও শুরু থেকেই একই পুরানো সমস্যার মুখোমুখি হচ্ছে এবং প্রোগ্রামাররা প্রায়শই জানেন না যে গ্লোবাল ভেরিয়েবল, গোটোস, শর্ট নেমড ভেরিয়েবল ব্যবহার করা সমস্যা নয়। প্রতিদিন তাদের ব্যবহার না করে খারাপ কোড লেখা হয়। +1
সিলভাইন

69
আমরা কীভাবে উত্তর দিতে পারি? তিনি আমাদের জানাননি যে তার অধ্যাপক তারা কত খারাপ বলে মনে করেন। :)
স্টিভ 21:39-

9
@ জুয়ান মেন্ডেস আমি আপনার সাথে 100% একমত! আমি যে সমস্যার কথা বলছিলাম তা হ'ল অনেক বিকাশকারী জানেন যে তাদের বৈশ্বিক চলক ব্যবহার করা উচিত নয় তবে তারা কেন জানেন না! এবং এইভাবে আমি অনেক বড় সফটওয়্যার দেখেছি যেখানে প্রতিটি ফাংশন +100 ক্ষেত্র সমান মেগা-কাঠামো পেয়েছে - মা দেখুন, কোনও বৈশ্বিক চলক নেই! তথাকথিত "ভাল অনুশীলন" হিসাবে একই সমস্যা: এগুলি কয়েকটি প্রসঙ্গে ভাল অনুশীলন, সমস্ত প্রসঙ্গে নয়। এগুলি ব্যবহার করে মীমাংসিত কোড তৈরি করতে পারে। চিয়ার্স।
সিলভাইন রড্রিগ

3
গ্লোবাল ভেরিয়েবলের জন্য খুব ভাল ব্যবহার রয়েছে। একটি সম্ভাব্য, তবে বিতর্কযোগ্য ব্যবহার হ'ল একটি গ্লোবাল "কনফিগারেশন" অবজেক্ট হবে, যা একবার প্রারম্ভকালে একটি কনফিগার ফাইলে পড়ে।
সেলার

উত্তর:


257

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

অ্যাপ্লিকেশনটি কীভাবে কাজ করে তা বোঝার জন্য, আপনাকে বিশ্বব্যাপী রাষ্ট্রের পরিবর্তনকারী প্রতিটি ফাংশন বিবেচনা করতে হবে। এটি করা যেতে পারে, তবে অ্যাপ্লিকেশনটি বাড়ার সাথে সাথে এটি কার্যত অসম্ভব হওয়ার পক্ষে (অথবা কমপক্ষে একটি সম্পূর্ণ সময় নষ্ট করা) শক্ত হয়ে উঠবে।

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


10
এই উত্তর সত্যিই ভাল। সঙ্গে 'পরিবর্তনশীল সুযোগ কমান' উত্তর এই একত্রিত stackoverflow.com/questions/357187/...
bobobobo

17
'অ্যাপ্লিকেশন' এর জন্য 'শ্রেণি' এবং 'গ্লোবাল স্টেট' এর জন্য 'অবজেক্ট স্টেট' এর বিকল্প এবং আপনি ক্লাসে সদস্য ভেরিয়েবল (ওরফে ফিল্ড) ব্যবহার না করার জন্য ঠিক একই যুক্তি তৈরি করেন। আসল উত্তরটি উপযুক্ত হলে সেগুলি ব্যবহার করা।
আয়ান গোল্ডবাই

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

2
@ ববোবোবো ভাঙা লিঙ্ক, আমরা কি 10k + ব্যবহারকারী আপনার কাছ থেকে একটি স্ক্রিনশট পেতে পারি?
noɥʇʎԀʎzɐɹƆ

3
@ noɥʇʎԀʎzɐɹƆ আপনি এখানে যান! i.imgur.com/RwRgJLZ.jpg
মতিন উলহাক

85

গুরুত্বপূর্ণ বিষয়টি সামগ্রিক লক্ষ্যটি স্মরণ করা: স্পষ্টতা

"কোনও বৈশ্বিক ভেরিয়েবল" নিয়মটি নেই কারণ বেশিরভাগ সময়, বিশ্বব্যাপী ভেরিয়েবল কোডের অর্থ কম পরিষ্কার করে দেয়।

যাইহোক, অনেক বিধিগুলির মতো, লোকেরা বিধিটি মনে রাখে, এবং নিয়মটি কী করতে চায় তা নয়।

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

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


8
ভেরিয়েবলগুলি পাস করার পরিবর্তে কোনও গ্লোবাল ব্যবহারের পরামর্শ দেওয়া আপনার কোডটি পুনরায় ব্যবহারযোগ্য নয়, এবং বহু-থ্রেডিংয়ের জন্য অনিরাপদ তৈরি করার একটি রেসিপি
জুয়ান মেন্ডেস

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

শুধু কৌতূহলী, কোন প্রোগ্রাম গ্লোবাল ভেরিয়েবলগুলি এড়াতে চারপাশে প্যারামিটারগুলি দিয়ে কোডের আকার দ্বিগুণ করে? আমার অভিজ্ঞতায় গ্লোবাল ভেরিয়েবলগুলি ব্যবহার করা ডেটা এক্সপোজার সমস্যাগুলি সমাধান করতে পারে তবে এই icalন্দ্রজালিক ভেরিয়েবলগুলি সঠিকভাবে আচরণ করে কিনা তা নিশ্চিত করার জন্য সাধারণত অতিরিক্ত জটিল যুক্তি যুক্ত করতে হয়।
ব্যবহারকারী 2167582

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

2
"যদি কেউ প্রায় 100 টি ভেরিয়েবলের পাশ দিয়ে চলে যায় তবে তারা কোন জিনিসটি কী তা শিখেনি।" সম্মত, কিন্তু সমস্ত বিশ্ব বস্তু-কেন্দ্রিক নয়। কোড আকারের দ্বিগুণ করার আমার ব্যক্তিগত উদাহরণটি ছিল ১৯ Fort circ সালের প্রায় এক বিশাল ফোরট্রান প্রোগ্রাম university তারপরে আমার উন্নতি অস্বীকার করুন যখন আমি বুঝতে পারি যে আমি কী করেছি।
টম ওয়েস্ট

64

আমার অধ্যাপক এরকম কিছু বলতেন: গ্লোবাল ভেরিয়েবলগুলি ব্যবহার করা ঠিক আছে যদি আপনি সেগুলি সঠিকভাবে ব্যবহার করেন। আমি মনে করি না যে এগুলি সঠিকভাবে ব্যবহার করে আমি কখনই ভাল হয়েছি, তাই আমি এগুলি খুব কমই ব্যবহার করেছি।


25
আসলেই সত্য. এগুলি গোটোসের মতো, আপনি কখন এগুলি ব্যবহার করবেন তা যদি জানেন না তবে কখনই করবেন না।
ডেভিড হল্ম

5
আমার বর্তমান সংস্থায়, তারা staticবিশ্বব্যাপী ভেরিয়েবলগুলি প্রচুর ব্যবহার করে , ভাষা সি হয় তুলনামূলকভাবে ছোট অনুবাদ ইউনিটে সীমাবদ্ধ থাকায় তারা সি ++ অবজেক্টের শ্রেণি ভেরিয়েবলের সাদৃশ্য শুরু করে।
ভোরাক

1
@ ভোরাক স্ট্যাটিক ভেরিয়েবলগুলি গ্লোবাল ভেরিয়েবল নয়, তারা স্থানীয় ভেরিয়েবল। গ্লোবাল ভেরিয়েবল হ'ল প্রোগ্রামে সর্বত্র উপলব্ধ একটি পরিবর্তনশীল (অতএব "গ্লোবাল", দুহ)। ফাইল স্কোপ ভেরিয়েবলগুলির সাথে বিভ্রান্ত হওয়ার দরকার নেই , যা কোনও ফাংশনের বাইরে ঘোষিত ভেরিয়েবল। একটি স্ট্যাটিক ফাইল স্কোপ ভেরিয়েবল কোনও বৈশ্বিক চলক নয়।
লন্ডিন 11

1
নিজেকে সংশোধন করতে program lifetime, file scope variables,। আপনি বাইরের পৃথিবীতে ভেরিয়েবলের জন্য একটি পয়েন্টার পাস করার পরে এটি বেশ গ্লোবাল হয়ে যায় (যা স্বয়ংক্রিয় ভেরিয়েবলগুলি দিয়ে অসম্ভব) ..
ভোরাক

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

38

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

হ্যাঁ, 90% পরিস্থিতিতে গ্লোবাল ভেরিয়েবলগুলি খারাপ। ব্যতিক্রমগুলি আপনার কলেজের বছরগুলিতে আপনি সম্ভবত দেখেন না। আমার মাথার উপরের অংশটি ভাবতে পারে এমন একটি ব্যতিক্রম হ'ল বিঘ্নিত টেবিলের মতো সহজাত গ্লোবাল অবজেক্টগুলির সাথে কাজ করে। ডিবি সংযোগের মতো জিনিসগুলি বিশ্বব্যাপী বলে মনে হচ্ছে তবে তা নয়।


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

10
"ডিবি সংযোগের মতো জিনিসগুলি বিশ্বব্যাপী বলে মনে হচ্ছে , তবে তা নয়" "
আর .. গিথহাব বন্ধ করুন সহায়তা ICE

1
বিঘ্নিত সারণীগুলি বিশ্বব্যাপী নয়, প্রসেসর প্রতি একটি করে আছে - তবে প্রসেসর প্রতি আপনার প্রোগ্রামের একটি উদাহরণ রয়েছে যাতে এটি "বাতিল হয়ে যায়"।
ব্যবহারকারী 253751

1
ডিবি সংযোগগুলি কেন বিশ্বব্যাপী নয় (এবং এর চেয়ে ভাল বিকল্পটি কী হবে) কেউ দয়া করে আমাকে আলোকিত করতে পারেন? আমি সর্বদা সংযোগগুলি এমন একটি বিরল ক্ষেত্রে হিসাবে বিবেচনা করি যেখানে বিশ্বব্যাপী গ্রহণযোগ্য।
ফ্লয়েলা

33

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

মূলত গ্লোবাল ভেরিয়েবল ব্যবহারের বিপরীত এনক্যাপসুলেশনটির উদ্দেশ্য হ'ল উত্সটি সহজতর ও নিরাপদ এবং আরও সহজে পরীক্ষিত করার জন্য সংযোজন হ্রাস করা। ইউনিট টেস্টিং ব্যবহার করা অনেক সহজযখন বৈশ্বিক ভেরিয়েবল ব্যবহার করা হয় না তখন ।

উদাহরণস্বরূপ, যদি আপনার কাছে একটি সাধারণ গ্লোবাল পূর্ণসংখ্য পরিবর্তনশীল থাকে যা একটি গণিত সূচক হিসাবে ব্যবহৃত হয় যা বিভিন্ন উপাদানগুলি একটি রাজ্য মেশিন হিসাবে ব্যবহার করে এবং আপনি একটি নতুন উপাদান যুক্ত করে একটি নতুন রাষ্ট্র যুক্ত করে পরিবর্তন করেন তবে আপনাকে অবশ্যই অন্য সমস্তটি দিয়ে চিহ্নিত করতে হবে পরিবর্তনগুলি তাদের প্রভাবিত করবে না তা নিশ্চিত করার জন্য উপাদানগুলি। সম্ভাব্য সমস্যার উদাহরণ হ'ল যদি বর্তমানের প্রতিটি মানগুলির বিবৃতি switchসহ গণনা বৈশ্বিক পরিবর্তনশীলের মান পরীক্ষা করার জন্য একটি বিবৃতি caseবিভিন্ন স্থানে ব্যবহার করা হয় এবং এমনটি ঘটে যে কিছু switchবিবৃতি defaultহ্যান্ডেল করার ক্ষেত্রে মামলা না করে থাকে happens হঠাৎ করেই বিশ্বব্যাপী আপনার অপ্রত্যাশিত আচরণের জন্য অপ্রত্যাশিত মানটি অ্যাপ্লিকেশনটি সম্পর্কিত is

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

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

বিশ্বব্যাপী ভেরিয়েবলগুলি থেকে কয়েকটি সমস্যা যার চারপাশে কাজ করা দরকার

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

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

বিশ্বব্যাপী চলক ব্যবহার করে এমন একাধিক-থ্রেড অ্যাপ্লিকেশন ডিবাগ করা আরও কঠিন হতে পারে। আপনি জাতি অবস্থাতে দৌড়াতে পারেন পারেন যা ত্রুটিগুলি তৈরি করতে পারে যা প্রতিলিপি করা কঠিন difficult বেশ কয়েকটি উপাদান একটি বিশ্বব্যাপী ভেরিয়েবলের মাধ্যমে যোগাযোগ করে, বিশেষত একটি বহু-থ্রেড অ্যাপ্লিকেশনটিতে, কখন এবং কীভাবে পরিবর্তনশীলটি পরিবর্তনশীল তা কোন উপাদানটি পরিবর্তনশীল পরিবর্তন করছে তা বুঝতে সক্ষম হওয়া খুব কঠিন হতে পারে।

নাম সংঘাত বিশ্বব্যাপী ভেরিয়েবল ব্যবহার করে সমস্যা হতে পারে। গ্লোবাল ভেরিয়েবলের একই নাম থাকা একটি স্থানীয় ভেরিয়েবল গ্লোবাল ভেরিয়েবলকে আড়াল করতে পারে। সি প্রোগ্রামিং ভাষা ব্যবহার করার সময় আপনি নামকরণের কনভেনশন ইস্যুতেও চলে যান। চারপাশের কাজটি হ'ল সিস্টেমটিকে উপ-সিস্টেমে একটি নির্দিষ্ট উপ-সিস্টেমের জন্য একই প্রথম তিনটি বর্ণ দিয়ে শুরু করে উপ-সিস্টেমে বিভক্ত করা ( উদ্দেশ্য সিতে নামের স্থান সংঘর্ষের সমাধানের জন্য এটি দেখুন )। সি ++ নাম স্পেস সরবরাহ করে এবং সি দিয়ে আপনি বিশ্বব্যাপী দৃশ্যমান কাঠামো তৈরি করে এর চারপাশে কাজ করতে পারবেন যার সদস্যরা বিভিন্ন ডেটা আইটেম এবং ডেটা এবং ফাংশনগুলিকে নির্দেশ করে যা কোনও ফাইলকে স্ট্যাটিক হিসাবে সরবরাহ করা হয় তাই কেবলমাত্র ফাইলের দৃশ্যমানতার সাথে কেবল সেগুলি উল্লেখ করা যেতে পারে বিশ্বব্যাপী দৃশ্যমান কাঠামো।

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

সি ++ namespaceএবং structসিটির জন্য প্রযুক্তি ব্যবহার করা

সি ++ প্রোগ্রামিং ভাষার জন্য namespaceনির্দেশ একটি নাম সংঘর্ষের সম্ভাবনা কমাতে একটি বিশাল সহায়তা। namespaceপাশাপাশি classএবং বিভিন্ন অ্যাক্সেস কীওয়ার্ডগুলি ( private, protectedএবং public) আপনাকে ভেরিয়েবলগুলি encapsulate করতে প্রয়োজনীয় বেশিরভাগ সরঞ্জাম সরবরাহ করে provide তবে সি প্রোগ্রামিং ভাষা এই নির্দেশনা সরবরাহ করে না provide এই স্ট্যাকওভারফ্লো পোস্টিং, সি-তে নেমস্পেসগুলি সি এর জন্য কিছু কৌশল সরবরাহ করে

একটি দরকারী কৌশলটি হ'ল একক মেমরি রেসিডেন্ট ডেটা অঞ্চল structযা একটি বিশ্বব্যাপী দৃশ্যমানতা হিসাবে সংজ্ঞায়িত করা হয় এবং এর মধ্যে structবিভিন্ন বৈশ্বিক চলক এবং ক্রিয়াকলাপগুলি প্রকাশিত হয় যা পয়েন্টার হয়। গ্লোবাল ভেরিয়েবলের আসল সংজ্ঞাগুলি staticকীওয়ার্ড ব্যবহার করে ফাইল স্কোপ দেওয়া হয় । আপনি যদি constকেবল কী পাঠ্য তা বোঝাতে কীওয়ার্ডটি ব্যবহার করেন তবে সংকলক আপনাকে কেবল পঠনযোগ্য অ্যাক্সেস প্রয়োগ করতে সহায়তা করতে পারে।

structকৌশলটি ব্যবহার করে গ্লোবালকেও সংযোজন করতে পারে যাতে এটি একধরণের প্যাকেজ বা উপাদান হয়ে যায় যা বিশ্বব্যাপী হতে পারে। এই ধরণের একটি উপাদান থাকার ফলে বিশ্বব্যাপী এবং কার্যকারিতা বিশ্বব্যাপী প্রভাবিত করে এমন পরিবর্তনগুলি পরিচালনা করা সহজ হয়।

যাইহোক namespaceবা structকৌশলটি নাম সংঘর্ষ পরিচালনা করতে সহায়তা করতে পারে তবে গ্লোবালগুলির ব্যবহার বিশেষত একটি আধুনিক বহু-থ্রেডযুক্ত অ্যাপ্লিকেশনটিতে গ্লোবালগুলি ব্যবহার করে যা আন্তঃ উপাদান উপাদান সংযোগের অন্তর্নিহিত সমস্যাগুলি এখনও বিদ্যমান।


এটি হ'ল নীচে সেরা এক্সপ্ল্যানেশন, এটি যা আছে তার সবই ব্যাখ্যা করে। যশ!
jhndoevodka

আপনাকে অত্যধিক ক্লাস কাপলিং ব্যবহার থেকে বিরত রাখতে আপনার ভাষার একটি কোড বিধি থাকা উচিত।
মেলবোর্ন বিকাশকারী

19

হ্যাঁ, তবে আপনি গ্লোবাল ভেরিয়েবল ব্যবহার করে এমন কোডে কাজ করা বন্ধ না করা এবং গ্লোবাল ভেরিয়েবল ব্যবহার করে এমন কোড ব্যবহার করে এমন অন্য কিছু লেখা শুরু না করা পর্যন্ত আপনি গ্লোবাল ভেরিয়েবলের ব্যয় বহন করবেন না। কিন্তু ব্যয় এখনও আছে।

অন্য কথায়, এটি একটি দীর্ঘমেয়াদী পরোক্ষ খরচ এবং যেমন বেশিরভাগ লোকেরা মনে করেন এটি খারাপ নয়।


19

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

এই নিবন্ধটি দেখুন: বগি ব্রেথলাইজার কোড উত্স পর্যালোচনার গুরুত্ব প্রতিফলিত করে

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

ম্যান, আমি বাজি ধরছি যে এই বিকাশকারীরা কামনা করছে যে তারা বিশ্বব্যাপী ভেরিয়েবল ব্যবহার না করে!


6
কিছুক্ষণের মধ্যে এটাই ছিল সেরা হাসি। লাভের জন্য বদ্ধ উত্স বিকাশ কেন একটি সত্য উদাহরণ, এবং বৈশ্বিক যুদ্ধের একটি ভাল উদাহরণ ভুল হয়ে গেছে!
এভিল স্পার্ক

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

19

গ্লোবাল ভেরিয়েবলগুলি আপনার বানানোর মতো খারাপ, কম নয়।

আপনি যদি একটি সম্পূর্ণ এনক্যাপসুলেটেড প্রোগ্রাম তৈরি করে থাকেন তবে আপনি গ্লোবালগুলি ব্যবহার করতে পারেন। গ্লোবালগুলি ব্যবহার করা এটি একটি "পাপ", তবে প্রোগ্রামিং পাপগুলি লার্জিকভাবে দার্শনিক।

আপনি যদি L.in.oleum পরীক্ষা করে দেখেন তবে আপনি এমন একটি ভাষা দেখতে পাবেন যার ভেরিয়েবলগুলি সম্পূর্ণ বিশ্বব্যাপী। এটি অপ্রকাশনীয় কারণ গ্রন্থাগারগুলির সকলের কাছে গ্লোবাল ব্যবহার ছাড়া কোনও বিকল্প নেই।

এটি বলেছে, যদি আপনার পছন্দ থাকে এবং আপনি প্রোগ্রামার দর্শনের বিষয়টি উপেক্ষা করতে পারেন তবে গ্লোবালগুলি এত খারাপ নয়।

আপনি যদি এগুলি সঠিকভাবে ব্যবহার করেন তবে উভয়ই গোটোস নয়।

সবচেয়ে বড় "খারাপ" সমস্যাটি হ'ল, আপনি যদি এগুলি ভুল ব্যবহার করেন, লোকেরা চিৎকার করে, মার্স ল্যান্ডার ক্র্যাশ করে, এবং বিশ্ব উড়িয়ে দেয় .... বা এরকম কিছু।


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

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

7
ধনী ঠিক আছে। এই উত্তরটি কী খারাপ / খারাপ নয় (বা কীভাবে বিশ্বব্যাপী নিরাপদে ব্যবহার করা যেতে পারে) সে সম্পর্কে কিছুই বলে না, কেবলমাত্র "এগুলি এত খারাপ নয়। যেমন, এটি কেবল সমস্যাগুলিই দেখায়।
দেখায়

4
আমি একমত নই যে গ্লোবাল ভেরিয়েবলগুলি কেবল "আপনি যেমন তৈরি করেন তত খারাপ" are আমি মনে করি মূল সমস্যাগুলির মধ্যে একটি, বিশেষত এই বহু-বিকাশকারী, আন্তঃসংযুক্ত বিশ্বে আমাদের বেশিরভাগই বাস, কাজ এবং প্রোগ্রামে থাকি যে বৈশ্বিক পরিবর্তনশীলগুলি কাউকে আপনার কোডকে খারাপ করার সুযোগ ELSE কে দেয়।
গারাপি

@gariepy অবধি আমি জানি না যদিও কথাটি স্ট্যাটিক্স সম্পর্কিত: ডি ঠিক আছে তাই ... এবং আমার অ্যাপ্লিকেশনটিতে কেবল এক বা দুটি বৈশ্বিক চলক রয়েছে, এটি একটি আসল ভিজ্যুয়াল স্টুডিও, ডিইবিইউজি এবং ট্র্যাক যা আমরা সাধারণত ব্যবহার করি না: ডি
মৃতম্যানএন

17

আমি এই প্রশ্নের উত্তর অন্য প্রশ্নের সাথে দিয়ে দেব: আপনি কি সিজেল্টনগুলি ব্যবহার করেন / সাইনজেল্টনগুলি খারাপ?

কারণ (প্রায় সবগুলি) সিগেলটন ব্যবহার একটি গৌরবময় বৈশ্বিক পরিবর্তনশীল।


11
আমি একটি স্মার্ট মন্তব্য পোস্ট করতে যাচ্ছিলাম, "যদি আপনি তাদেরকে সিঙ্গলেটের পরিবর্তে বিশ্বব্যাপী ডাকেন তবে সেগুলি কেবল খারাপ", তবে আপনি আমাকে এতে মারধর করেছেন।
Smo

আমি এখনও জানার চেষ্টা করছি যে নরক সিলেটলেটগুলি কী কী এলএলএল।
GeoffreyF67

1
@Geoffrey: এখানে কিছু ভাল তাই বিবরণ রয়েছে - stackoverflow.com/questions/11831/... এবং কিছু ভাল লিঙ্কের জন্য: stackoverflow.com/questions/11831/...
গেভিন মিলার

10
রেকর্ডের জন্য, একটি সিঙ্গলটন বৈধ শোনার জন্য গৌরবময় ডিজাইন প্যাটার্নস (টিএম) (লোল) নামের একটি বৈশ্বিক পরিবর্তনশীল। সমস্ত একই কারণে এটি সমান খারাপ bad
আর .. গিথহাব বন্ধ করুন সহায়তা ICE

@ গ্যাভিনমিলার আপনি কি সিম্পলটন ... উফস, সিঙ্গেলটন শ্রুতিমধুরতা ব্যবহার করেন তা ঠিক আছে?
হুয়ান মেন্ডেস 21

14

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

কয়েকটি সুবিধা:

  • যে কোনও ফাংশন থেকে অ্যাক্সেস করা যায়।
  • একাধিক থ্রেড থেকে অ্যাক্সেস করা যায়।
  • প্রোগ্রাম শেষ না হওয়া পর্যন্ত কখনই সুযোগের বাইরে যাবেন না।

কয়েকটি কনস:

  • কোনও ফাংশন থেকে অ্যাক্সেস করা যেতে পারে, প্যারামিটার এবং / বা ডকুমেন্টেড হিসাবে স্পষ্টভাবে টেনে আনার দরকার নেই।
  • থ্রেড-নিরাপদ নয়।
  • বিশ্বব্যাপী নেমস্পেসকে দূষিত করে এবং সম্ভাব্যভাবে নাম সংঘর্ষের কারণ হতে পারে, যদি না এটি প্রতিরোধের ব্যবস্থা না নেওয়া হয়।

দ্রষ্টব্য, আপনি যদি করেন তবে, প্রথম তালিকা এবং প্রথম দুটি কনস আমি তালিকাভুক্ত হ'ল ঠিক একই জিনিস, কেবলমাত্র বিভিন্ন শব্দের সাথে। এটি কারণ বৈশ্বিক পরিবর্তনশীলগুলির বৈশিষ্ট্যগুলি সত্যই কার্যকর হতে পারে তবে খুব কার্যকর যেগুলি তাদের কার্যকর করে তোলে সেগুলি তাদের সমস্ত সমস্যার উত্স।

কয়েকটি সমস্যার কয়েকটি সম্ভাব্য সমাধান:

  • তারা সমস্যার জন্য আসলে সেরা বা সবচেয়ে কার্যকর সমাধান কিনা তা বিবেচনা করুন। থাকে তাহলে কোন ভাল সমাধান, পরিবর্তে ব্যবহার করুন।
  • এগুলিকে একটি নেমস্পেসে রাখুন [সি ++] বা সিঙ্গেলটন স্ট্রাক্ট [সি, সি ++] সহ একটি অনন্য নাম (একটি ভাল উদাহরণ হবে Globalsবা GlobalVars), অথবা বিশ্বব্যাপী ভেরিয়েবলের জন্য একটি প্রমিত নামকরণ কনভেনশন ব্যবহার করুন (যেমন global_[name]বা g_module_varNameStyle(যেমন মন্তব্যগুলিতে আন্ডারস্কোর_ডি দ্বারা উল্লিখিত হিসাবে) ))। এটি উভয়ই তাদের ব্যবহারের ডকুমেন্ট দেবে (আপনি এমন নেমস্পেস / স্ট্রাক্ট নাম সন্ধানের মাধ্যমে বৈশ্বিক ভেরিয়েবল ব্যবহার করে এমন কোড খুঁজে পেতে পারেন) এবং বিশ্বব্যাপী নেমস্পেসে প্রভাব হ্রাস করুন।
  • গ্লোবাল ভেরিয়েবল অ্যাক্সেস করে এমন কোনও ফাংশনের জন্য, স্পষ্ট করে ডকুমেন্ট করুন এটি কোন ভেরিয়েবলগুলি পড়বে এবং কোনটি এটি লিখবে। এটি সমস্যার সমাধান সহজতর করবে।
  • তাদের তাদের নিজস্ব উত্স ফাইলে রাখুন এবং externএটিকে সম্পর্কিত শিরোনামে ঘোষণা করুন , যাতে তাদের ব্যবহার সংকলন ইউনিটে সীমাবদ্ধ করা যায় যা তাদের অ্যাক্সেস করতে হবে। যদি আপনার কোডটি প্রচুর গ্লোবাল ভেরিয়েবলের উপর নির্ভর করে তবে প্রতিটি সংকলন ইউনিট কেবলমাত্র তাদের মধ্যে কয়েকটি মুখ্য অ্যাক্সেসের প্রয়োজন, আপনি তাদের একাধিক উত্স ফাইলগুলিতে বাছাই করতে বিবেচনা করতে পারেন, সুতরাং প্রতিটি ফাইলের অ্যাক্সেসকে বৈশ্বিক ভেরিয়েবলের মধ্যে সীমাবদ্ধ করা সহজ।
  • লক করার জন্য একটি প্রক্রিয়া সেট আপ করুন এবং তাদের আনলক, এবং / অথবা আপনার কোড নকশা তাই করা সম্ভব প্রয়োজন হিসাবে যে হিসাবে কয়েক ফাংশন আসলে পরিবর্তন গ্লোবাল ভেরিয়েবল। এগুলি পড়ার চেয়ে সেগুলি পড়া অনেক বেশি নিরাপদ, যদিও থ্রেড রেসগুলি এখনও মাল্টিথ্রেডেড প্রোগ্রামগুলিতে সমস্যা সৃষ্টি করতে পারে।
  • মূলত, এগুলিতে অ্যাক্সেস হ্রাস করুন এবং নামটির স্বতন্ত্রতা সর্বাধিক করুন। আপনি নামের সংঘর্ষ এড়াতে চান এবং যথাসম্ভব কয়েকটি ফাংশন থাকতে পারেন যা কোনও প্রদত্ত ভেরিয়েবলকে সম্ভাব্যভাবে সংশোধন করতে পারে।

তারা ভাল বা খারাপ সেগুলি আপনি কীভাবে ব্যবহার করেন তার উপর নির্ভর করে। বেশিরভাগেরই এগুলি খারাপভাবে ব্যবহার করার প্রবণতা রয়েছে, তাই তাদের প্রতি সাধারণ সতর্কতা রয়েছে। যদি সঠিকভাবে ব্যবহার করা হয় তবে এগুলি একটি বড় वरदान হতে পারে; যদি দুর্বল ব্যবহৃত, যাইহোক, তারা পারে এবং হবে ফিরে আসা আপনি দান্ত দিয়া ফুটা করা কখন এবং কিভাবে আপনি অন্তত এটা আশা।

এটি দেখার একটি ভাল উপায় হ'ল এগুলি নিজেরাই খারাপ নয়, তবে তারা খারাপ নকশা সক্ষম করে এবং খারাপ ডিজাইনের প্রভাবগুলি তাত্পর্যপূর্ণভাবে গুন করতে পারে।


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


1
ব্যবহারিকতার জন্য +1। একটি সিঙ্গলটন প্রায়শই কেবল সদস্যদের মধ্যে উদাহরণ এবং রিফ্যাক্টর তৈরি করতে বয়লারপ্লেট যুক্ত করে এবং আপনি ... গ্লোবাল ভেরিয়েবলগুলি দিয়ে শেষ করেন, কেবল একটি ভিন্ন নামে মাস্ক্রেড করে। স্রেফ গ্লোবালকে কেবলমাত্র প্রযুক্তিগতভাবে এড়াতে বাদ দিয়ে কেন বিরক্ত করবেন? বাধা হিসাবে নেমস্পেসগুলি দুর্দান্ত, তবে আমি একটি সাধারণ g_module_varNameStyleপুরোপুরি সুস্পষ্ট দেখতে পাই । স্পষ্টতই, আমি যদি এটিকে সহজেই এড়াতে পারি তবে আমি গ্লোবালগুলি ব্যবহার করছি না - মূল শব্দটি সহজেই , কারণ যেহেতু আমি বিশ্বাস করা বন্ধ করে দিয়েছি যে এগুলি অবশ্যই এড়ানো উচিত - বা বরং নিঃসৃত - যে কোনও মূল্যে, আমার অনেক বেশি ভাল সময় হচ্ছে, এবং আমার কোডটি (শক!) আরও পরিপাটি
আন্ডারস্কোর_ডি

@ আসরস্কোর_ডি মূলত কেবলমাত্র বৈশ্বিক এবং স্থানীয় ভেরিয়েবলের মধ্যে আরও সহজে পার্থক্য করার উপায় এবং আপনার কোডটি অনুসন্ধান করার সময় বৈশ্বিক পরিবর্তনশীলগুলি সনাক্ত করা আরও সহজ করার জন্য, ভেরিয়েবলটি বৈশ্বিক বা স্থানীয় / স্থানীয় / কিনা তা নিয়ে বিভ্রান্তি রোধ করার উদ্দেশ্যে। একটি প্যারামিটার / সদস্য / ইত্যাদি yours আপনার মতো একটি আদর্শ নামকরণ কনভেনশন যতক্ষণ না এটি সুসংগত ততক্ষণ কাজ করে consistent মানক নামকরণ কনভেনশন ধারণা সহ আমার উত্তর সম্পাদনা করছি, ধন্যবাদ thanks
জাস্টিন সময় - মনিকা

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

11

যেহেতু অন্য একটি থ্রেডে কেউ বলেছে (আমি প্যারাফ্রেসিং করছি) "এরূপ বিধিগুলি ভাঙা উচিত নয়, যতক্ষণ না আপনি এগুলি করার ফলাফলগুলি সম্পূর্ণরূপে বুঝতে পারেন।"

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

প্রোগ্রামিংয়ের অনেকগুলি দিক রয়েছে যা সম্ভবত বিশেষজ্ঞদের উপর ছেড়ে দেওয়া উচিত। কখনও কখনও আপনি একটি খুব ধারালো ছুরি প্রয়োজন। আপনি প্রস্তুত না হওয়া পর্যন্ত আপনি এটি ব্যবহার করতে পারবেন না ...


1
আমি সম্মত, যদি আপনি পরিণতিগুলি বুঝতে পারেন তবে এটি নিয়মগুলি ঠিক আছে, তবে আপনি যদি নিজেকে প্রায়শই এটি করতে দেখেন তবে আপনি কিছু ভুল করছেন
জুয়ান মেন্ডেস

9

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

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


9

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


অলস রূপক প্রসঙ্গে নয়! = উত্তর
আন্ডারস্কোর_

1
@ মাউন্ডস_ডি: আমি একমত নই এটি একটি আলোচনার প্রশ্ন, যদিও এটি (সম্ভবত এটির বয়সের কারণে) হিসাবে ট্যাগ করা হয়নি, এবং এর মতো উত্তরগুলি পুরোপুরি বৈধ, এবং এটি এমন একটি বিষয় তৈরি করে যা ওপিএসের প্রশ্নের সমাধান করে।
গারাপি

7

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


7

আমি মনে করি আপনার অধ্যাপক কোনও খারাপ অভ্যাস শুরু হওয়ার আগেই এটি বন্ধ করার চেষ্টা করছেন।

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


7

একেবারে না. তাদের অপব্যবহার করছি যদিও ... এটি খারাপ।

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


3
-১ বিশ্বব্যাপী ভেরিয়েবলের বিরুদ্ধে সাবধান হওয়ার অনেকগুলি কারণ রয়েছে: আমার কাছে সবচেয়ে বড়টি হ'ল লুক্কায়িত নির্ভরতা এবং বিশ্বব্যাপী কোনও অনুমানযোগ্য ফ্যাশনে টেস্টিং কোডকে অত্যন্ত কঠিন করে তোলা। আপনি যদি নিজের কোডটি স্বয়ংক্রিয় পদ্ধতিতে পরীক্ষা করার ক্ষমতাটিকে গুরুত্ব না দেন তবে আমি প্রস্তাব দেব যে গ্লোবাল ভেরিয়েবলগুলি আপনাকে ব্যথা ব্যতীত আর কিছুই করবে না। এবং পাশাপাশি, একটি সুগঠিত প্রোগ্রামে সর্বদা বিকল্প রয়েছে।
jkp

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

1
যথাযথভাবে। তারা মূলত "সহজে ভাঙ্গনযোগ্য" হওয়ায় এগুলি এত "খারাপ" নয়। আপনি যদি কোনও কিছু না ভাঙ্গিয়ে কীভাবে এগুলি ব্যবহার করবেন এবং বিকল্পের পরিবর্তে কখন সেগুলি ব্যবহার করবেন তা যদি আপনি জানেন তবে তারা সহায়ক হতে পারে। নাহলে ... এত কিছু না।
জাস্টিন সময় - মনোকা

4

গ্লোবাল ভেরিয়েবলগুলি ছোট প্রোগ্রামগুলিতে সূক্ষ্ম তবে বড় আকারে যদি একইভাবে ব্যবহার করা হয় তবে ভয়াবহ।

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

আপনি যখন আরও অভিজ্ঞ হন তখন তারা যখন ঠিক থাকে তখন শিখতে আরও সহজ হবে।


4

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

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

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

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

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

মাঝামাঝি সময়ে, তবে যে ব্যক্তি সবচেয়ে জোরে কথা বলে বা সবচেয়ে বড় লাঠি বহন করে তা যা করুক (যতক্ষণ না আপনি সেই ব্যক্তি হিসাবে যে সবচেয়ে জোরে চিৎকার করে এবং সবচেয়ে বড় লাঠি বহন করে)।


4
এটি কি "আইবিএম কেনার জন্য কেউ কখনও বরখাস্ত হয়নি" বলার অন্য উপায়?
গর্ডন পটার

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

4

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

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

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

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


3

হ্যাঁ, কারণ যদি আপনি অযোগ্য প্রোগ্রামারগুলিকে এগুলি ব্যবহার করতে দেন (90% বিশেষত বিজ্ঞানীরা পড়ুন) আপনি 20+ ফাইলের মধ্যে 600+ গ্লোবাল ভেরিয়েবল এবং 12,000 লাইনের একটি প্রকল্পের সমাপ্তি করুন যেখানে 80% ফাংশন শূন্য হয়, প্রত্যাবর্তন বাতিল হয় এবং পরিচালনা করে সম্পূর্ণ বিশ্বব্যাপী রাজ্যে।

আপনি পুরো প্রকল্পটি না জানলে কোনও এক পর্যায়ে কী চলছে তা বোঝা দ্রুত অসম্ভব হয়ে পড়ে।


2

গ্লোবাল ভেরিয়েবলের ব্যবহার আসলে প্রয়োজনীয়তার উপর নির্ভর করে। এর সুবিধাটি হ'ল এটি বারবার মানগুলি পাস করার ওভারহেড হ্রাস করে।

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

উদাহরণ স্বরূপ:-

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


2

কনফিগারেশনের ক্ষেত্রে গ্লোবাল ভাল । আমরা আমাদের চান, তখন কনফিগারেশন / পরিবর্তন একটি আছে বিশ্বব্যাপী প্রভাব উপর সমগ্র প্রকল্প

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


1

যত তাড়াতাড়ি বা পরে আপনাকে সেই পরিবর্তনশীলটি কীভাবে সেট করা হয় বা এটি অ্যাক্সেস করা হয় তখন কী ঘটে যায় তা পরিবর্তন করতে হবে, অথবা আপনাকে যেখানে এটি পরিবর্তন করা হয়েছে সেখানে সন্ধান করতে হবে।

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


1

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

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


1

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


1

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


0

সুরক্ষার অর্থ হ'ল যে কেউ ভেরিয়েবলগুলি বিশ্বব্যাপী ঘোষিত করা হলে তা ব্যবহার করতে পারে, উদাহরণস্বরূপ এই উদাহরণটি গ্রহণ করুন যদি আপনার ব্যাঙ্ক প্রোগ্রামে বৈশ্বিক পরিবর্তনশীল হিসাবে আপনার ভারসাম্য থাকে তবে ব্যবহারকারী ফাংশন এটি পরিচালনা করতে পারে পাশাপাশি ব্যাংক অফিসারও ম্যানিপুলেট করতে পারে এটির ফলে সমস্যা রয়েছে on কেবলমাত্র ব্যবহারকারীকে কেবল পঠন এবং ফিরিয়ে ফাংশন দেওয়া উচিত তবে ব্যবহারকারী ব্যক্তিগতভাবে ডেস্কে নগদ দিলে ব্যাঙ্কের কেরানি সেই পরিমাণটি যুক্ত করতে পারেন th এইভাবেই এটি কাজ করে


-1

একটি বহু-থ্রেড অ্যাপ্লিকেশনটিতে, জাতিটির শর্ত এড়াতে গ্লোবাল ভেরিয়েবলের জায়গায় স্থানীয় ভেরিয়েবল ব্যবহার করুন।

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

এটি সম্পর্কে এখানে আরও জানুন , https://software.intel.com/en-us/articles/use-intel-parallel-inspector-to-find-race-conditions-in-openmp-based-multithreaded-code


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