কেন ভেরিয়েবলগুলির একটি প্রকারের প্রয়োজন?


10

সুতরাং আমরা লিখি:

Customer c = new Customer();

ডিজাইনটি কেন এমন নয় যে আমরা লিখি:

c = new Customer();
c.CreditLimit = 1000;

সংকলকটি গ্রাহকের প্রতি সি পয়েন্টগুলি নিয়ে কাজ করতে পারে এবং গ্রাহকের সদস্যদের সি-তে প্রবেশ করার অনুমতি দেয়?

আমি জানি আমরা লিখতে চাই:

IPerson c = new Customer();
IPerson e = new Employee();

যাতে লিখতে সক্ষম হতে:

public string GetName(IPerson object)
{
    return object.Name
}

string name = GetName(c); // or GetName(e);

তবে আমরা যদি লিখেছি:

c = new Customer();
e = new Employee();

আমরা এখনও লিখতে পারি:

public string GetName(object)
{
    return object.Name
}    

string name = GetName(c); // or GetName(e);

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

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


12
এজন্য পাইথন এবং রুবি (এবং অন্যান্য) এর মতো গতিময় ভাষা রয়েছে। এই প্রশ্নের উত্তর নেই । এটি এমন একটি সত্য যে কিছু ভাষাগুলি ধরণের ঘোষণাপত্র ব্যবহার করে এবং কিছু ভাষা তা ব্যবহার করে না।
এস .লট

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

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

2
var x = 1; - আপনি কি 32 বিট, 64 বিট, 16 বিট সংখ্যাটি বোঝাতে চেয়েছিলেন? বাইট? ভাসা? দ্বিগুণ? দশমিক? এটি কেবল আদিমদের সাথে কাজ করে।
কাজের

4
আপনি varসি # তে ব্যবহার করতে পারেন এবং কোথায় আপনি ভেরিয়েবল ঘোষণা করতে চান তা সম্পর্কে সুনির্দিষ্ট হওয়া ভাল।
ড্যানিয়েল লিটল

উত্তর:


22

তবে কেন একটি ভেরিয়েবলের কোনও প্রকারের প্রয়োজন হয়?

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

1
ডাউনভোটটি ব্যাখ্যা করুন
ফ্রেড ফু

4
এছাড়াও, গতিশীল টাইপিং একটি পারফরম্যান্স ব্যয়ে আসে, কারণ টাইম তথ্য রানটাইমের সময় চেক করা দরকার।
চার্লস সালভিয়া

@ চার্লসসালভিয়া: উত্তম বক্তব্য, উত্তরে এটি যুক্ত হয়েছে।
ফ্রেড ফু

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

5
@sturdytree যদিও এটি সত্য যে টাইপ চেকিংয়ের সাথে সত্যই টাইপলেস ভেরিয়েবল নেই এমন কোনও ভাষা নেই , তবে এমন ভাষা রয়েছে যা টাইপ অনুসারে থাকে । এর অর্থ হল, ভাষাটি আপনার পরিবর্তনশীলগুলির ব্যবহারের দিকে নজর দেয় এবং আপনার ব্যবহার থেকে প্রকারটি হ্রাস করে। যদি কোনও বিরোধ হয় (যেমন আপনি সম্পাদন করেন a = new Bar()এবং পরে ক্লাস থেকে কোনও পদ্ধতি কল করেন Baz), সংকলক একটি ত্রুটি উত্থাপন করে। হাস্কেল এবং ওক্যামেলের মতো ভাষা অগ্রগতিতে টাইপ সূচনা করে তবে এটি সি # তে উপস্থিত রয়েছে varকীওয়ার্ড সহ।
কোয়ান্টিকাল

9

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

স্থিতিশীলভাবে টাইপ করা ভাষা থেকে আমরা যে সুবিধাটি পাই তা হ'ল কিছু অতিরিক্ত সংকলন-সময় ত্রুটি পরীক্ষা করা।

ধরুন, উদাহরণস্বরূপ, আপনার নিম্নলিখিত পদ্ধতি রয়েছে:

public addCustomerContact(Customer client, Employee contact) {
   ...
} 

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

এখন, আপনি হয়তো ভাবতে পারেন যে, কেন কম্পাইলার এখনও ধরণ অনুমান করতে পারবে না jamesএবং bob, এবং এখনও আমাদের সতর্ক? এটি কখনও কখনও সম্ভব হতে পারে তবে ভেরিয়েবলের যদি সত্যিই কোনও প্রকার না থাকে তবে আমরা নিম্নলিখিতগুলি করতে পারি:

var james;
var bob;
if (getRandomNumber() > 0.5) {
   james = new Customer();
   bob = new Employee();
} else {
   james = new Employee();
   bob = new Customer();
}

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

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

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


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

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

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

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

1
-1; শক্তিশালী / দুর্বল টাইপিং স্ট্যাটিক / ডায়নামিক টাইপিংয়ের সাথে অর্থগোনাল। সি স্থিতিশীলভাবে দুর্বল টাইপ করা হয়; লিস্প এবং পাইথন উভয়ই গতিশীল দৃ strongly়ভাবে টাইপ করা হয়।
ফ্রেড ফু

5

সুতরাং পেশাদার প্রোগ্রামারদের তা বের করার দরকার নেই

10 + "10"

is "1010" or 20....

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


2
অর্থাৎ পার্ল কোন বুদ্ধিমান ভাষা নয়? :)
ফ্রেড ফু

5
@ এলারসম্যানস: সত্যিকার অর্থে, না, তা নয়। তবে তা সম্পূর্ণ মতামত।
নোটমে

2
@ ক্রিসলাইভলি: আমি আনন্দিত যে এটি এখন বাস্তবতার বিষয়। আমার পার্ল-প্রেমী সহকর্মীদের বোঝাতে দয়া করে যে কোনও সময় আমার কর্মক্ষেত্রে আসুন;)
ফ্রেড ফু

2
10 + "10" টাইপ পূর্ণসংখ্যার এবং টাইপ স্ট্রিংয়ের অবজেক্টের অবজেক্টে '+' অপারেটর ব্যবহার করছে। সংকলক একটি ত্রুটি জারি করবে। আমার প্রশ্নটি বস্তুর নয়, ভেরিয়েবলের ধরণের সাথে করা।
স্ট্রডিট্রি

2
এটা তোলে হয় বৈধ সি: এটা এর পয়েন্টার এরিথমেটিক।
dan04

4

ধরে নিলাম আপনার একটি ভেরিয়েবল ছিল one(1 এ সেট করুন) এবং মূল্যায়ন করার চেষ্টা করেছেন one + one। আপনার যদি টাইপ সম্পর্কে ধারণা না থাকে তবে 1 + 1 দ্বিধাগ্রস্ত হবে। আপনি তর্ক করতে পারেন যে 2 বা 11 টি সঠিক উত্তর হতে পারে। প্রসঙ্গটি দেওয়া না হলে এটি অস্পষ্ট হয়ে যায়।

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

সি # তে যদি প্রসঙ্গটি কোনও প্রকার অনুমান করে তবে আপনি varকীওয়ার্ডটি ব্যবহার করতে পারেন ।

var c = new Customer();
var e = new Employer();

সংকলনের সময় inferred ধরণের সাথে সি এবং ই সংকলন করবে।


1
পাইথনে, 1 + 1সর্বদা টাইপ থাকে intতবে এটি ঘোষণার দরকার নেই। ভেরিয়েবলের মান নয় কেন একটি প্রকার রয়েছে সে সম্পর্কে প্রশ্ন ।
ফ্রেড ফু

দুঃখিত আমি যখন আমার উদাহরণটিতে ব্যবহার করতাম তখন আপনি দেখতে variablesনা পেয়েছিলেন । আমার ধারণা এটি পরিষ্কার ছিল না। values1 + 1
স্টিফেন কোয়ান

তবুও, গতিশীলভাবে টাইপ করা ভাষাগুলি এটির সাথে মোকাবিলা করতে পারে। পাইথনে, one=1; print(one+one)প্রিন্ট করুন 2one="1"; print(one+one)কপি করে প্রিন্ট 11। এসকিউএলাইট উদাহরণটি আরও দৃinc়প্রত্যয়ী, তবে সমস্যাটি এখানে দুর্বল একটি টাইপ রয়েছে, সুতরাং এটি সি # এর সাথে সত্যিই প্রাসঙ্গিক নয়।
ফ্রেড ফু

আমার প্রস্তাবিত স্কিমে, এক = 1 এর অর্থ একটি পূর্ণসংখ্যার ধরণের দিকে ইঙ্গিত করে একটি চলক (আমি কোনও ধরণের কোনও প্রকারের প্রস্তাব দিচ্ছি না - বস্তুগুলির একটি ধরণ থাকবে)। এক + জন তখন দ্ব্যর্থহীন হবে না (আমরা দুটি পূর্ণসংখ্যার অবজেক্ট / মান যুক্ত করছি)
স্ট্রডিট্রি

1
হাই @ ডান04, আমি ORDER BYঅজান্তেই VARCHARমাঠে এটি দিয়ে দেখেছি । স্ট্যাকওভারফ্লো . com/ প্রশ্নগুলি / 9103313/ … দেখুন ।
স্টিফান কোয়ান

4

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

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

প্রকার অনুমানের বিরুদ্ধে মূল যুক্তিটি হ'ল এটি পাঠযোগ্যতার ক্ষতি করে। যখন টাইপগুলি লিখিত থাকে তখন কোড বোঝা সাধারণত সহজ।


1

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

আপনি যদি নিম্নলিখিত ভেরিয়েবলগুলি ঘোষণা করেন:

myVar      = 5;
myOtherVar = "C";

এই ভেরিয়েবলগুলি সম্পর্কে আপনি কী অনুমান করতে পারেন? হয় myVarস্বাক্ষরিত বা স্বাক্ষরবিহীন? এটি কি 8-বিট, -৪-বিট, বা এর মধ্যে কিছু? কি myOtherVarস্ট্রিং (কার্যকরভাবে একটি অ্যারের) অথবা একটি চর? এটি কি এএনএসআই বা ইউনিকোড?

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

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


ভাল পয়েন্ট, যদিও সংকলকটি কেবলমাত্র মানের উপর ভিত্তি করে সবচেয়ে দক্ষ প্রকার (যেমন ছোট int) ব্যবহার করতে পারে, আমি দেখতে পাচ্ছি যে আমরা কিছু নির্দিষ্ট ক্রিয়াকলাপ সম্পাদন করতে সক্ষম হওয়ার জন্য আমরা "সি "টিকে চরটির পরিবর্তে একটি স্ট্রিং অবজেক্ট হিসাবে দেখতে চাই may । যদিও এই জাতীয় ক্ষেত্রে আমরা কেবল একটি = (স্ট্রিং) "সি" নির্দিষ্ট করতে পারি। এটি একটি স্ট্রিং অবজেক্ট তৈরি করে এবং 'এ' (টাইপযুক্ত ভেরিয়েবল) কেবল এটির দিকে নির্দেশ করে। আমি এটিকে স্ট্রিং এ = "সি" এর চেয়ে ভয়ঙ্কর হিসাবে দেখছি না;
স্ট্রডিট্রি

0

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

আমি কেন এ কথা বলব? কারণ এটি আপনার প্রশ্নের উত্তরের দিকে নিয়ে যায়।

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

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

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

আমি বিশেষত দীর্ঘমেয়াদী, বড় দল (ওরফে: "সিরিয়াস") প্রকল্পগুলির জন্য কৌশলগুলি সম্পর্কে কৌশলগুলি বেশি পছন্দ করি তা বলাই বাহুল্য। কারণ: আমার জানা মতে, SW প্রকল্পের ব্যর্থতা / স্লিপের সর্বাধিক সম্ভাব্য কারণগুলি হ'ল: অস্পষ্ট প্রয়োজনীয়তা এবং দুর্বল নকশা (know০%! আমি জানি এমন একটি গবেষণা দ্বারা) এবং প্রকৃত কোডিংয়ের জন্য মাত্র কয়েক শতাংশ বাকী রয়েছে। সমস্ত বিধি এবং চুক্তি ক্লিনার ডিজাইন প্রয়োগ করে, চিন্তাভাবনা করে এগিয়ে যায় এবং সিদ্ধান্তগুলি আগে এবং যথাযথ লোকদের নেওয়া দরকার। প্রকারের অর্থ নিয়ম: কম "স্বাধীনতা" এবং "শীতলতা" - আরও প্রস্তুতি, চিন্তাভাবনা, কোডিং মান, নিয়ন্ত্রিত দলের কাজ। আমার কাছে এটি সাফল্যের প্রয়োজনীয় ফ্যাক্টরের মতো এবং "হোম, মিষ্টি বাড়ি" বলে মনে হচ্ছে।

আমার 2 সেন্ট।


-3

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


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

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

-4

গতিময়ভাবে টাইপ করা ভাষাগুলি প্রায়শই "অবজেক্ট-ওরিয়েন্টেড" হিসাবে চিহ্নিত হয়। তারা না. এগুলি এনক্যাপসুলেশন-ভিত্তিক হতে পারে তবে কখনও বস্তু-ভিত্তিক নয়। অবজেক্ট ওরিয়েন্টেশন সব ধরণের।

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

একটি গতিশীল-টাইপিত ভাষায়, দৃশ্যটি কেবল এইভাবে উপস্থাপিত হতে পারে:

"বস্তু তার বস্তুর বস্তুকে বস্তুর কাছে নিয়ে যায় এবং বস্তু থেকে একটি বস্তু কিনে"।

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

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

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

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


2
আমি ভয় করি আপনার যুক্তির প্রথম অংশে আপনার সাথে আমার একমত হতে হবে না। গতিশীল টাইপযুক্ত ভাষা সাধারণত "অবজেক্ট ওরিয়েন্টেড" হয় তবে "শ্রেণিবদ্ধ" হয় না। এটি একটি গুরুত্বপূর্ণ পার্থক্য। উদাহরণস্বরূপ, আপনি আসলে একটি বিভ্রমের মধ্যে বাস করছেন। আপনার Boyক্লাস থাকতে পারে তবে আমি সন্দেহ করি এটি একটি বাস্তব বিশ্বের "ছেলে" যা কিছু করতে পারে তা করতে পারে। যাইহোক, আপনার গতিশীল উদাহরণে (বস্তুটি চলা ...), আমরা এই "ছেলে" অবজেক্ট সম্পর্কে একমাত্র গুরুত্বপূর্ণ জিনিসটি জানি - এটি চালাতে পারে । এটি হ'ল গতিশীল ধরণের ভাষার মৌলিক দর্শন। এটিতে + ve এবং -তে রয়েছে। কোনটি আপনার পছন্দ তা আপনার মতামত।
চিপ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.