ভেরিয়েবলগুলি ঘোষণাকালে আপনাকে ডেটা ধরণের নির্দিষ্ট করতে হবে কেন?


41

বেশিরভাগ কোডিং ভাষায় (সমস্ত না থাকলে) আপনার ভেরিয়েবলগুলি ঘোষণা করতে হবে। উদাহরণস্বরূপ সি # এ যদি এর একটি নম্বর ক্ষেত্র হয়

int PhoneNumber

আমি যদি সাধারণ ইংরেজি ভাষা ব্যবহার করে থাকি তবে এটির PhoneNumberহিসাবে intএটির ঘোষণা করার দরকার নেই । উদাহরণস্বরূপ যদি আমি আমার বন্ধু স্যামকে তার ফোন নম্বর দিতে বলি তবে আমি বলি:

"স্যাম আমাকে ফোনেম্বার দাও"

আমি বলব না

"চর (20) স্যাম আমাকে ফোন নম্বর দিন"

আমাদের কেন ডেটা টাইপ নির্দিষ্ট করতে হবে?


83
এর কারণ ইংরেজিতে নিখুঁত টাইপিং রয়েছে - সুতরাং আপনার ফোন নম্বরটি স্পষ্টভাবে একটি ফোন নাম্বার হিসাবে টাইপ করা হয়েছে
মানুষেরও

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

16
এবং যখন আমি সিনেমাগুলিতে 1-800-JIMBO এর মতো নম্বরগুলি শুনি, তখন আমার চিন্তাভাবনা হয়: এটি কীভাবে সংখ্যা ? ওও
মুরু

103
আপনার ফোন নম্বরটি ইন্ট হিসাবে ঘোষণা করা উচিত নয়। বেশিরভাগ প্রোগ্রামিং ভাষায় এটি শীর্ষস্থানীয় শূন্যগুলি মুছে ফেলবে।
অ্যারন_ডিসি

25
@ হারুসকোল: মানুষের কেবল গতিশীল মেমোরি বরাদ্দই ছিল না, তবে একটি উচ্চ
রক্ষণশীল

উত্তর:


79

বেশিরভাগ কোডিং ভাষায় (সমস্ত না থাকলে) আপনার ভেরিয়েবলগুলি ঘোষণা করতে হবে।

[...]

আমাদের কেন ডেটা টাইপ নির্দিষ্ট করতে হবে?

এগুলি দুটি স্বতন্ত্র প্রশ্ন:

  • কেন আমাদের ভেরিয়েবলগুলি ঘোষণার দরকার?
  • আমাদের প্রকারগুলি ঘোষণা করার দরকার কী?

ঘটনাচক্রে, উভয়েরই উত্তর: আমরা তা করি না।

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

উদাহরণস্বরূপ, স্কালায় আপনি বলতে পারেন

val age: Int = 23

অথবা আপনি বলতে পারেন

val age = 23

দুটি ঠিক সমতুল্য: সংকলক Intপ্রারম্ভিককরণের এক্সপ্রেশন থেকে প্রকারটি নির্ধারণ করবে 23

তেমনি, সি, এ আপনি এইগুলির মধ্যে যে কোনও একটি বলতে পারেন এবং তারা উভয়ই একই জিনিসটির অর্থ বোঝায়:

int age = 23;
var age = 23;

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

গতিশীল টাইপ করা প্রোগ্রামিং ভাষায়, ভেরিয়েবলেরও প্রকার থাকে না। প্রকারগুলি কেবলমাত্র রানটাইমের সময়ে গতিশীলভাবে বিদ্যমান, স্থিতিশীলভাবে নয়। কেবলমাত্র মান এবং এক্সপ্রেশনগুলির প্রকার থাকে এবং কেবল রানটাইম এ, ভেরিয়েবলের প্রকার থাকে না।

ECMAScript এ যেমন:

const age = 23;
let age = 23;

এবং সর্বশেষে, প্রচুর ভাষায়, আপনাকে এমনকি ভেরিয়েবলগুলি ঘোষণারও প্রয়োজন হয় না। যেমন রুবিতে:

age = 23

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

সুতরাং,

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

2
উভয় প্রকারের
অনুমিতকরণ

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

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

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

1
@Zaibis: auto i = 1 // i is inferred to type int, vector<int> vec; auto itr = vec.iterator(); // itr is inferred to type vector<int>::iteratorইত্যাদি। আপনি কীভাবে এটি কাজ করে তা জানতে চাইলে, আপনি এটি অনুমান করতে পারেন।
Jörg W Mittag

53

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

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

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

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

তদ্ব্যতীত, কম্পিউটার যেমন চিন্তা করে না, ক্ষেত্রের নাম বা ভেরিয়েবল (উদাহরণস্বরূপ phonenumber) এর অর্থ কম্পিউটারে কিছুই নয়। কম্পিউটারের কাছে, সেই ক্ষেত্র / পরিবর্তনশীল নামটি কেবল "blah123"। সমস্ত ভেরিয়েবল "ব্লাএক্সএক্সএক্সএক্সএক্স" হলে আপনার প্রোগ্রামটি কেমন হবে তা চিন্তা করুন। বাবা। ঠিক আছে, কম্পিউটার যা দেখে। একটি প্রকার সরবরাহ করা কম্পিউটারকে ভেরিয়েবলের অর্থের সাথে একটি কালি দেয় যা কেবল এটির নাম থেকে কেবল অনুমান করা যায় না।

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


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

আমি মনে করি আপনার এই লাইনটি হাইলাইট / বোল্ড করা উচিত: Types are part of a system of checks that ...যেহেতু এটি সরাসরি ওপিকে উত্তর দেয় Why do we have to specify data type at all?..
txtechhelp

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

@ সার্জিওটুলেন্টেভ এটি সত্য নয় - এফ # তে আপনার ধরণের ধরণগুলি স্পষ্টভাবে উল্লেখ না করেই আপনার পাবলিক পদ্ধতি থাকতে পারে। সংকলকটি পদ্ধতির অভ্যন্তরে ব্যবহার থেকে প্রকারগুলি নির্ধারণ করবে। উদাহরণস্বরূপ, নিম্নলিখিত বৈধ প্রকাশ্য পদ্ধতি সংজ্ঞাগুলি হলো: static member add x y = x + y, member x.Append s = x.Text + s। প্রথম ক্ষেত্রে, xএবং সংযোজনের কারণে yএটিকে অনুমান করা হবে int। দ্বিতীয় যদি তারা হবেন ধরনের উপর নির্ভর করে যাই হোক না কেন বৈধ x.Text- যদি এটি একটি এর string, তারপর sএকটি হতে হবে stringপাশাপাশি। আমি সম্মত হই না যে প্রকারের টীকাগুলি হ'ল ডকুমেন্টেশন।
রাউজো

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

29

অন্যান্য উত্তরগুলির পাশাপাশি, একটি বিষয় অন্তর্ভুক্ত করা উচিত। মনে রাখবেন কম্পিউটারগুলি কেবল বিটস। বলুন আমি আপনাকে বাইট দিচ্ছি:

26 3A 00 FF

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

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


10
সত্যিই যথেষ্ট, তবে আপনার মনকে সত্যিকার অর্থেই ঝাঁকুনির জন্য, বুঝতে হবে যে কম্পিউটারগুলি কখনই সেই বিটগুলি বোঝায় তা বুঝতে সক্ষম হয় না — এমনকি আপনি এটিকে আরও টাইপ টিকাশ বলার পরেও। আপনার ব্যাখ্যাগুলি কেবলমাত্র আরও বেশি হেক্স সংখ্যায় রূপান্তরিত হবে, প্রথম হেক্স নম্বরগুলিকে "স্পষ্ট করতে"। ইলেক্ট্রনিক্সে অভিপ্রায়টি স্থাপন করার জন্য এবং আমাদের উদ্দেশ্য আমরা যা করতে চাই তা করার জন্য লোকেরা তাৎপর্যটি তৈরি করেছে। এখন একজন ইঞ্জিনিয়ারকে "ধন্যবাদ" বলুন। :)
ওয়াইল্ডকার্ড

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

1
কম্পিউটার প্রচুর সম্ভাবনা বুঝতে সক্ষম তবে চতুর সংকলকগুলিও বুঝতে প্রসঙ্গে প্রয়োজন। এটি 0 বা "0" সংখ্যার সমান নয়। অথবা স্ট্রিং "31 ডিসেম্বর" "1 মে" কে স্ট্রিং হিসাবে বিবেচনা করার আগে আদেশ করা হবে তবে তারিখ হিসাবে গণ্য করা হয় না। বা 5/2 নিন। এটি এন্টার হিসাবে 2 তবে ডাবল হিসাবে 2.5 এছাড়াও, টাইপটি অযাচিত রূপান্তরগুলির বিরুদ্ধে সুরক্ষা ব্যবস্থা। নাল, এনএএন, এবং বৃত্তাকার বা ওভারফ্লোগুলিও সমস্যা হয়ে উঠতে পারে। শক্ত এবং স্ট্যাটিকালি টাইপ করা ভাষার কিছু সুবিধা রয়েছে। উদাহরণস্বরূপ, সংকলক রিফ্যাক্টর করার সময় আপনাকে সমস্যাগুলি সনাক্ত করতে সহায়তা করে।
বোরজব

1
@ বোরজব মানে কি "এটি একটি পূর্ণসংখ্যা হিসাবে 2 "?
রিচার্ড এভারেট

1
@ রিচার্ডএভারিট অবশ্যই এটি ল্যাপাস ছিল। ধন্যবাদ তবে এটি সম্পাদনা করতে দেরী।
বোরজব

23

কম্পিউটারগুলিকে এই তথ্য কেন দরকার তার উত্তরটি ডেটা উপস্থাপনের সাথে সম্পর্কিত

"ডেটা টাইপ" এর নাম হ'ল নিয়মের একটি উল্লেখ যা কম্পিউটার মেমোরিতে 0 এবং 1 এর কাঁচা অবস্থা থেকে কম্পিউটার সঞ্চয় এবং তথ্য পুনরুদ্ধারে সহায়তা করে।

উদাহরণস্বরূপ, আপনার নিয়মিত 8-বিট ASCII অক্ষরটি কম্পিউটার মেমোরিতে (র্যাম বা ডিস্ক হয়) 01000001(বড় হাতের অক্ষর "এ", এএসসিআইআই কোড 65) বা 00001000(শতাংশ চিহ্ন) বা 0 এর কোনও সংমিশ্রণ এবং 1 টি সেই 8 বিটগুলিতে।

অন্য উদাহরণের জন্য, কিছু 8-বিট স্বাক্ষরযুক্ত পূর্ণসংখ্যা 00000101(5 নম্বর) বা 00001000(সংখ্যা 8) হিসাবে সংরক্ষণ করা যেতে পারে

8 এবং% চরিত্রের বাইনারি উপস্থাপনাটি কীভাবে একই হতে পারে তা লক্ষ্য করুন তবে তাদের অর্থ আলাদা আলাদা কারণ তাদের ধরণগুলি আলাদা।

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

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

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

এই ইঙ্গিতগুলি আপনাকে কীভাবে একটি অনুমানের দিকে নিয়ে যায় যে নম্বরটি একটি ফোন নম্বর ছিল তা কীভাবে ইঙ্গিতগুলি কোনও কম্পিউটারের ভাষাতে পরিচালিত করে তার অনুরূপ, যাতে কোনও মানের ধরণের জন্য ঘোষণার প্রয়োজন হয় না Note


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

পুনঃটুইট করুন ইতিমধ্যে উপস্থিত বিটগুলি বোধ করার পাশাপাশি প্রদত্ত ডেটা বাইনারিতে ডেটা টাইপ অনুসারে রূপান্তরিত করার পরে সেখানে বিটগুলি প্রথমে রাখার পাশাপাশি।
পিয়ুষ কুশওয়াহ

10

কিছু ভাষায়, আপনাকে ডেটা ধরণের নির্দিষ্ট করতে হবে না।

যে ভাষাগুলি প্রকারের অনুক্রমকে সমর্থন করে তারা সাধারণত আপনার ব্যবহার থেকে ডেটা টাইপ বের করতে পারে। উদাহরণ স্বরূপ,

var name = "Ali"

অভ্যন্তরীণভাবে একটি স্ট্রিং হিসাবে টাইপ করা হয়, কারণ মানটি চারপাশে উদ্ধৃত হয়।

কিছু ভাষায় আপনার ভেরিয়েবলটি ঘোষণা করার প্রয়োজন হয় না; ভেরিয়েবলটি তৈরি করা হয় যখন এটি প্রথম ব্যবহৃত হয়। তবে এটি বেশ কয়েকটি গুরুত্বপূর্ণ কারণে বিশেষভাবে আপনার ভেরিয়েবলগুলি ঘোষণা করার জন্য একটি সেরা অনুশীলন হিসাবে বিবেচিত হয়; বেশিরভাগ কারণেই এত ভাল করা আপনার অভিপ্রায় প্রকাশ করে।


5
var name = "Ali"শৈলী আধুনিক জন্য আসলে খুবই সাধারণ স্ট্যাটিক্যালি টাইপ ভাষায়। স্থিতিযুক্ত টাইপ করা ভাষায়, টাইপটি তৈরির সময় স্থির করা হয়, তবে এটি এখনও আরম্ভকারী দ্বারা নির্ধারিত হতে পারে। গতিশীল টাইপ করা ভাষার সংজ্ঞা হ'ল প্রকারগুলি মানগুলির সাথে সংযুক্ত থাকে, ভেরিয়েবল নয়। একটি ভেরিয়েবলকে একটি মান নির্ধারণের ফলে ভেরিয়েবলের ধরণটিও সেট করে।
এমসাল্টাররা 23

@ এসএমএলটার্স: আমি শব্দটির সাথে সামান্য সমন্বয় করেছি।
রবার্ট হার্ভে

5
বিদ্রূপ এখানে হ'ল এই সঠিক বাক্য গঠন সহ সি # অন্তর্ভুক্ত।
ডেরেক এলকিন্স

1
@ এসএমএলটাররা ভেরিয়েবলের জন্য একটি মান নির্ধারণের ফলে ভেরিয়েবলের ধরণটিও সেট করে। অথবা ভেরিয়েবলের কোনও অন্তর্নিহিত প্রকার নেই এবং দোভাষী তার পরিবর্তকের মানটির জন্য যে কোনও অপারেশন প্রয়োগ করার চেষ্টা করবেন। এমন কোনও গতিযুক্ত টাইপ করা ভাষা আছে যেখানে নিম্নলিখিত (জাভাস্ক্রিপ্ট) এর মতো কোডটির অনুমতি দেওয়া হবে না var x = 5; x = "";কারণ প্রথম বিবৃতিতে x"সংখ্যা" টাইপের সাথে যুক্ত হওয়ার কারণ রয়েছে x? গতিশীল টাইপিংয়ের সাথে দ্বন্দ্বের বাছাই করুন । এবং যদি তা না হয় তবে ভেরিয়েবলের সাথে সম্পর্কিত ধরণের মানটির সাথে প্রকারের সাথে কী সম্পর্ক থাকে?
জেভ স্পিটজ

1
@ জেভস্পিৎস: প্রথম ধরণের সিস্টেম গতিশীলভাবে টাইপ করা হয় না, তবে একেবারেই টাইপ করা হয় না। আপনার জাভাস্ক্রিপ্ট উদাহরণটি গতিশীলভাবে টাইপ করা হয়নি, ঠিক কারণ সংখ্যার প্রকারটি পরিবর্তন করতে পারে না। একটি পরিবর্তনশীল টাইপ করা ভাষায়, x = "";পরিবর্তন টাইপ স্ট্রিং x এর, যদিও তা একটি সংখ্যা পূর্বে ছিল।
এমসাল্টার্স

9

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

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

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

এছাড়াও, কয়েকটি ভাষায় স্ট্রিং ইনপুট থেকে ক্লাস শুরু করার জন্য এই সিউডোকোডের মতো কিছু লেখা সম্ভব:

PhoneNumber phoneNumber = "(61) 8 8000 8123";

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

PhoneNumber phoneNumber;
...
phoneNumber = "some value from somewhere";

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

এটি এতোটুকুই বলা যায় না যে স্পষ্ট বর্ণের চেয়ে সুস্পষ্ট - তবে ভাষার নকশা এই ধরণের পছন্দগুলিতে নির্ভর করে এবং সি # অন্তর্নিহিত টাইপিংয়ের সাথে আলাদাভাবে কাজ করবে। পিএইচপি এবং জাভাস্ক্রিপ্ট সুস্পষ্ট টাইপিংয়ের সাথে আলাদাভাবে কাজ করবে।


5

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

স্যাম, এটি প্রসঙ্গে দেখেন। যদিও সংকলকটি এটিকে প্রসঙ্গে বিবেচনা করতে পারে, স্যাম এতে আরও ভাল হবে (এবং স্পষ্টতা জিজ্ঞাসা করার জন্য প্রক্রিয়াটিতে বাধা দিতে সক্ষম)।

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

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


3

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

"স্যাম, ফোন নম্বর দাও।"

"5555555555"

"ওহ না, আমি কাগজের বাইরে আছি। আমি যদি আগে জানতে পারতাম যে আমি কতটা ডেটা চেয়েছি আমি আরও ভাল প্রস্তুত করতে পারতাম!"

সুতরাং পরিবর্তে, বেশিরভাগ ভাষাগুলি আপনাকে কোনও প্রকারের ঘোষণা দেয়, সুতরাং এটি সময়ের আগেই জানতে এবং প্রস্তুত করবে:

"স্যাম, টেলিফোন নম্বর কত দিন?"

"দশটি অক্ষর।"

"ঠিক আছে, তারপরে আমাকে একটি বড় কাগজের টুকরো পেতে দিন। এখন আমাকে ফোন নম্বর দিন" "

"5555555555"

"বুঝেছি! ধন্যবাদ স্যাম!"

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

ভাল প্রথমে দেখা যাক যে কোনও পূর্ণসংখ্যা কীভাবে সংরক্ষণ করা হয় এবং কম্পিউটারের মধ্যে সাধারণত প্রতিনিধিত্ব করা হয়। আপনি সম্ভবত অবগত আছেন যে প্রাথমিক স্তরে এটি সমস্ত বাইনারি (1 এবং 0 এর)। বাইনারি আসলে একটি সংখ্যা সিস্টেম যা ঠিক আমাদের দশমিক সংখ্যা সিস্টেমের মতো কাজ করে। দশমিক, আপনি 0 থেকে 9 গণনা করুন (আপনি লিখেছেন না এমন অসীম সূচিত নেতৃস্থানীয় জিরো দিয়ে), তারপরে আপনি 0 এ ফিরে যান এবং পরবর্তী অঙ্কটি বৃদ্ধি করেন যাতে আপনার 10 থাকে You আপনি 19 থেকে 20 পর্যন্ত গড়িয়ে না যাওয়া পর্যন্ত পুনরাবৃত্তি করবেন, আপনি 99 থেকে 100 পর্যন্ত গড়িয়ে পড়া না হওয়া পর্যন্ত পুনরাবৃত্তি করুন এবং আরও অনেক কিছু।

বাইনারি 0 থেকে 9 এর পরিবর্তে 0 থেকে 1 এর পরিবর্তে আলাদা হয় না, 0, 1, 10, 11, 100, 101, 110, 111, 1000 গণনা করুন। সুতরাং আপনি যখন 9-এ টাইপ করেন তখন মেমরিতে বাইনারি রেকর্ড করা হয় 1001 হিসাবে। এটি একটি আসল সংখ্যা। এটি হ'ল ফর্মটিতে যোগ, বিয়োগ, গুণক ইত্যাদি করা যেতে পারে। 10 + 1 = 11. 10 + 10 = 100 (1 থেকে 0 এর উপরে রোল করুন এবং 1 বহন করুন)। 11 x 10 = 110 (এবং সমতুল্য, 11 + 11 = 110)।

এখন প্রকৃত মেমোরিতে (নিবন্ধভুক্তদের অন্তর্ভুক্ত), একে অপরের ঠিক পাশের বিটগুলির (সম্ভাব্য 1 বা 0 ') বিস্তৃতগুলির একটি তালিকা আছে, অ্যারে রয়েছে, যা এই বিটগুলিকে যুক্তিযুক্তভাবে তৈরি করার জন্য সংগঠিত করে সংখ্যাটি ১ এর বেশি? সমস্যাটি হ'ল, দশমিকের সাথে আপনি কী করবেন? আপনি রেজিস্টারে দুটি বিটের মধ্যে কেবল হার্ডওয়্যার একটি টুকরো সন্নিবেশ করতে পারবেন না এবং প্রতিটি জোড়া বিটের মধ্যে "দশমিক বিট" যুক্ত করতে অনেক বেশি ব্যয় হবে। তো এখন কি করা?

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

টাইপিং সংকলকটি এটি কী দেখছে তা জানতে অনুমতি দেয়। কল্পনা করুন যে আপনি রেজিস্টারে 1.3 মানটি সংরক্ষণ করেছেন। আমরা এখানে আমাদের নিজস্ব অভিনব এনকোডিং স্কিমটি নিয়ে আসছি, সাইন এর জন্য 1 বিট, ম্যান্টিসার জন্য 4, এক্সপেন্ডেন্টের জন্য 3 (স্বাক্ষরের জন্য 1 বিট, প্রস্থের জন্য 2)। এটি একটি ধনাত্মক সংখ্যা, সুতরাং সাইনটি ধনাত্মক (0)। আমাদের ম্যান্টিসাটি 13 (1101) হবে এবং আমাদের প্রকাশকটি -1 (101 (নেতিবাচক, 1 = 1)) হবে। সুতরাং আমরা 01101101 টি রেজিস্টারে সংরক্ষণ করি। এখন আমরা এই ভেরিয়েবলটি টাইপ করি নি, তাই রানটাইম এটি ব্যবহার করতে গেলে এটি বলে "অবশ্যই, এটি একটি পূর্ণসংখ্যা কেন নয়" তাই যখন এটি 109 (+৪ + 32 + 8 + 4 + 1), যা স্পষ্টতই সঠিক নয়।

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

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


2

প্রোগ্রামিং ভাষা রয়েছে যেখানে আপনার ভেরিয়েবলগুলির জন্য ডেটা ধরণের ঘোষণা করতে হবে না । এমন কি এমন প্রোগ্রামিং ভাষা রয়েছে যেখানে আপনাকে আগে ভেরিয়েবলগুলি ঘোষণা করতে হবে না; আপনি কেবল এগুলি ব্যবহার করতে পারেন , অবিলম্বে।

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

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

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

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

(সুদূর অতীতে, আপনাকে সাব্রুটাইনগুলি ঘোষণা করতে হবে না You আপনি কেবল GOSUBএকটি নির্দিষ্ট লাইন নম্বরে চাইবেন you আপনি যদি সাবরুটাইনগুলির মধ্যে তথ্য পাস করতে চান তবে আপনি নির্দিষ্ট গ্লোবাল ভেরিয়েবলগুলি সেট করবেন, আপনার সাবউরটিনকে কল করুন এবং তারপরে অন্যটি পরীক্ষা করবেন পরিবর্তনগুলি যখন সাব্রুটাইন ফিরে আসে But তবে এটি প্যারামিটারগুলির একটি সূচনা করতে ভুলে যাওয়া সহজ করে তোলে So তাই এখন প্রায় সমস্ত আধুনিক প্রোগ্রামিং ভাষাগুলির দাবি যে আপনি সাবউরোটিন কোন প্রকৃত প্যারামিটার গ্রহণ করে তা আপনাকে ঘোষনা করে, সুতরাং আমরা পরীক্ষা করতে পারি যে আপনি সেগুলি নির্দিষ্ট করে দিয়েছেন। )


1
সি ++ এ আপনি "অটো x = 1" রাখতে পারেন এবং এটি জানেন যে এটি কোনও অন্তর্নিহিত। অটো y = 1.2; অটো z = 'জেড'; ইত্যাদি
কোয়ান্টিনুক

@ কেন্টিন ইউকে সি # তে, আপনি var x=1একই জাতীয় ফলাফলের সাথে রাখতে পারেন । তবে তা কিছুই নয়; মধ্যে Haskell, আপনি সব সময়ে কোন প্রকার স্বাক্ষর সঙ্গে আপনার সম্পূর্ণ প্রোগ্রাম লিখতে পারেন, এখনো এটা সব স্ট্যাটিক্যালি টাইপ করা, এবং আপনি একটি ভুল ... করতে আপনি এখনও ত্রুটি পেতে (না ঠিক মূলধারার যদিও।)
MathematicalOrchid

@ কুইন্টিনউক তবে আপনি লিখলে for (auto i=0; i<SomeStdVector.size(); ++i)আপনার লিন্টার অভিযোগ করতে চলেছে কারণ এটি একটি স্বাক্ষরিত ধরণের প্রবণতা কমিয়ে দিয়েছে এবং আপনি এটিকে স্বাক্ষরবিহীন প্রকারের সাথে তুলনা করতে এগিয়ে যান। আপনাকে লিখতে হবে auto i=0ul(প্রকারের তথ্যটি স্পষ্টভাবে আবার লিখতে হবে, সুতরাং size_t i=0প্রথম স্থানে লিখতে হবে )।
ডিসেম্বি

1

আমি যদি সাধারণ ইংরেজি ভাষা ব্যবহার করি তবে ফোন নম্বরের ব্যবহারের প্রয়োজন হিসাবে এটি ঘোষণা করার দরকার নেই। উদাহরণস্বরূপ যদি আমি আমার বন্ধু স্যামকে তার ফোন নম্বর দিতে বলি তবে আমি বলি:

"স্যাম আমাকে ফোনেম্বার দাও"

আমি বলব না>

"চর (20) স্যাম আমাকে ফোন নম্বর দিন"

আমাদের কেন ডেটা টাইপ নির্দিষ্ট করতে হবে?

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

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

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

তবে আপনি কি কখনও অন্য দেশের কারও জন্য ফোন নম্বর নেওয়ার চেষ্টা করেছেন? তারা কী আপনাকে স্পষ্টভাবে বলেছিল যে আন্তর্জাতিক ঠিকানায় পৌঁছতে শূন্যের দিকে কতবার চাপ দিতে হবে? তারা কি তাদের দেশের কোড আপনাকে বলেছিল? তুমি কি এটিকে চিনতে পেরেছ? আপনি কত সংখ্যার প্রত্যাশা করেছিলেন? আপনি কত পেয়েছেন? আপনি কীভাবে অঙ্কগুলি গ্রুপ করবেন জানতেন? বা এমন কি যদি গ্রুপিং তাত্পর্য আছে?

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


0

ধরণের ঘোষণার জন্য আরেকটি কারণ হ'ল দক্ষতা। যখন একটি পূর্ণসংখ্যা 1 বাইট, বা 2 বাইট বা 4 এ সংরক্ষণ করা যায়, তবে একটি প্রচুর সংখ্যক ভেরিয়েবল ব্যবহার করে এমন একটি প্রোগ্রাম যা করা হচ্ছে তার উপর নির্ভর করে প্রয়োজনীয় মেমরির 4 গুণ ব্যবহার করতে পারে। একটি ছোট স্টোরেজ স্পেস যদি ব্যবহারযোগ্য হয় তবে কেবল প্রোগ্রামারই তা জানে, সুতরাং প্রকারটি ঘোষণা করে তিনি এটি বলতে পারেন।

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


0

বেশ কয়েকটি প্রাথমিক প্রোগ্রামিং ভাষা (বিশেষত ফোর্টরান) আপনার ব্যবহারের আগে ভেরিয়েবল ঘোষণার প্রয়োজন হয় না।

এর ফলে বেশ কয়েকটি সমস্যা দেখা দিয়েছে। একটি সত্যিই সুস্পষ্ট একটি হ'ল সংকলকটি আর প্রায় নির্ভরযোগ্যভাবে সাধারণ টাইপোগ্রাফিক ত্রুটিগুলি ধরতে পারে না। আপনার যদি এমন কোড থাকে যা বিদ্যমান ভেরিয়েবলটি সংশোধন করার কথা বলে মনে হয় তবে আপনার টাইপও রয়েছে তবে আপনার কাছে এখনও পুরোপুরি বৈধ কোড রয়েছে যা সবেমাত্র একটি নতুন ভেরিয়েবল তৈরি করেছে (এবং একটি মান নির্ধারিত করেছে):

longVariableName = 1

// ...

longVaraibleName = longvariableName + anotherLongVariableName

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

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


0

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

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


এটি 11 টি পূর্ব উত্তরগুলিতে তৈরি এবং ব্যাখ্যা করা পয়েন্টগুলির চেয়ে বেশি কিছু দেওয়ার প্রস্তাব দিচ্ছে না
21:43

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

আমি মাত্র তিনটি সাম্প্রতিকতম উত্তর এই এক করার পূর্বে এক ঘন্টার সম্পর্কে পোস্ট করা হয় পুনরায় চেক করা এবং তিনটি একই উপার্জন হবে বলে মনে হচ্ছে এবং আমার পড়া প্রতি এখানে চেয়ে সহজ পদ্ধতিতে তা ব্যাখ্যা
মশা

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

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