কেন গতিশীলভাবে টাইপ করা ভাষাগুলি বিকাশকারীকে প্রকারটি নির্দিষ্ট করতে দেয় না?


14

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

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

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

কেন এমন সীমাবদ্ধতা রয়েছে? এটি কি প্রযুক্তিগত / পারফরম্যান্সের কারণে (আমি মনে করি এটি জাভাস্ক্রিপ্টের ক্ষেত্রে রয়েছে), বা কেবল রাজনৈতিক কারণে (যা আমি বিশ্বাস করি, পিএইচপি-র ক্ষেত্রে)? এটি অন্যান্য গতিময় টাইপ করা ভাষার জন্য একটি কেস যার সাথে আমি পরিচিত নই?


সম্পাদনা করুন: উত্তর এবং মন্তব্য অনুসরণ করে, এখানে একটি স্পষ্টির জন্য একটি উদাহরণ রয়েছে: আসুন আমরা ধরা যাক আমাদের সাধারণ প্যাকেজ পিএইচপিতে নিম্নলিখিত পদ্ধতি রয়েছে:

public function CreateProduct($name, $description, $price, $quantity)
{
    // Check the arguments.
    if (!is_string($name)) throw new Exception('The name argument is expected to be a string.');
    if (!is_string($description)) throw new Exception('The description argument is expected to be a string.');
    if (!is_float($price) || is_double($price)) throw new Exception('The price argument is expected to be a float or a double.');
    if (!is_int($quantity)) throw new Exception('The quantity argument is expected to be an integer.');

    if (!$name) throw new Exception('The name argument cannot be an empty string.');
    if ($price <= 0) throw new Exception('The price argument cannot be less or equal to zero.');
    if ($price < 0) throw new Exception('The price argument cannot be less than zero.');

    // We can finally begin to write the actual code.
    // TODO: Implement the method here.
}

কিছু প্রচেষ্টা সহ, এটি পুনরায় লেখা যেতে পারে (এছাড়াও পিএইচপি চুক্তিতে প্রোগ্রামিং দেখুন ):

public function CreateProduct($name, $description, $price, $quantity)
{
    Component::CheckArguments(__FILE__, __LINE__, array(
        'name' => array('value' => $name, 'type' => VTYPE_STRING),
        'description' => array('value' => $description, 'type' => VTYPE_STRING),
        'price' => array('value' => $price, 'type' => VTYPE_FLOAT_OR_DOUBLE),
        'quantity' => array('value' => $quantity, 'type' => VTYPE_INT)
    ));

    if (!$name) throw new Exception('The name argument cannot be an empty string.');
    if ($price <= 0) throw new Exception('The price argument cannot be less or equal to zero.');
    if ($price < 0) throw new Exception('The price argument cannot be less than zero.');

    // We can finally begin to write the actual code.
    // TODO: Implement the method here.
}

তবে পিএইচপি বিকল্প হিসাবে যুক্তির জন্য দেশীয় প্রকারগুলি গ্রহণ করে যদি একই পদ্ধতিটি নীচে লেখা হয়:

public function CreateProduct(string $name, string $description, double $price, int $quantity)
{
    // Check the arguments.
    if (!$name) throw new Exception('The name argument cannot be an empty string.');
    if ($price <= 0) throw new Exception('The price argument cannot be less or equal to zero.');
    if ($price < 0) throw new Exception('The price argument cannot be less than zero.');

    // We can finally begin to write the actual code.
    // TODO: Implement the method here.
}

কোনটি লিখতে খাটো? কোনটি পড়া সহজ?


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

বেশ কয়েকটি গতিশীল টাইপ করা ভাষা কোনও ধরণের বল প্রয়োগ করতে
ক্যাসেট

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

1
ক্লোজওর এমন একটি ভাষার উদাহরণ যা সাধারণত গতিময়ভাবে টাইপ করা হয় তবে আপনি "টাইপ ইঙ্গিতগুলি" এর মাধ্যমে বৈকল্পিক প্রকারগুলি দিতে পারেন (এটি সাধারণত কেবল তখন করা হয় যেখানে সংকলন-টাইম সম্পর্কিত তথ্যের পারফরম্যান্স সুবিধা পেতে প্রয়োজন)
মাইক্রা

1
গ্রোভি গতিসম্পন্ন টাইপযুক্ত ভাষার আরেকটি উদাহরণ যা কোনও প্রকার নির্দিষ্ট করার অনুমতি দেয়।
এরিক উইলসন

উত্তর:


17

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

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

প্রকারের তথ্য প্রকাশ করতে আপনার ভাষার একটি অংশ প্রয়োজন যা অতিরিক্ত সরল হতে পারে না। শীঘ্রই আপনি খুঁজে পাবেন যে তথ্য intযথেষ্ট নয়; আপনি List<Pair<Int, String>>প্যারাম্যাট্রিকের মতো কিছু চাইবেন , ইত্যাদি জাভা বরং সাধারণ ক্ষেত্রেও এটি যথেষ্ট বিভ্রান্তিকর হতে পারে।

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

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

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


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

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

1
@ 9000, আমি সন্দেহ করি না যে তারা দুর্দান্ত। কেবল তিনটি বা 4 টি খোঁড়া পরীক্ষা লেখার বিষয়টি উল্লেখ করতে চেয়েছিলেন এবং টাইপ সাফটি নিশ্চিত করা যায় না ।
ইনগো

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

4
অল্প লিখিত পরীক্ষাগুলি স্থির ধরণের পরীক্ষার জন্য প্রতিস্থাপন নয়: এগুলি নিকৃষ্টমানের। ভাল লিখিত পরীক্ষাগুলি স্থির প্রকারের পরীক্ষার জন্য প্রতিস্থাপন নয়: সেগুলি আরও উন্নত।
রেন হেনরিচস

8

বেশিরভাগ গতিশীল ভাষায়, আপনি কমপক্ষে গতিপথের কোনও বস্তুর বা মানের ধরণের পরীক্ষা করতে পারেন ।

এবং কিছু গতিশীল ভাষার জন্য স্ট্যাটিক টাইপ ইনফারেন্সার, চেকার এবং / অথবা প্রয়োগকারী রয়েছে: যেমন

এবং পার্ল 6 স্ট্যাটিক টাইপিং সহ একটি alচ্ছিক টাইপ সিস্টেমকে সমর্থন করবে ।


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

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


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

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

2

জাভাস্ক্রিপ্ট কিছু alচ্ছিক স্থিতিশীল টাইপ অন্তর্ভুক্ত করার পরিকল্পনা করেছিল এবং দেখে মনে হচ্ছে অনেকগুলি পরিণত গতিশীল ভাষা সেভাবে চলেছে-

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

আমার কাছে কিছুটা উপলব্ধি ঘটে, যেহেতু আমি সাধারণত কোনও প্রকল্পের শুরুতে খুব বেশি টাইপ-চেকিং খুঁজে পাই, যা তার জীবনকাল শেষে খুব কম, আমি যে ভাষা ব্যবহার করি না কেন;);


আমি জাভাস্ক্রিপ্টে statচ্ছিক স্ট্যাটিক টাইপিং অন্তর্ভুক্ত করার পরিকল্পনা সম্পর্কে জানি না; তবে আশা করি তারা এ্যাকটিভস্ক্রিপ্টে তেমন অতৃপ্ত ছিল না। জাভাস্ক্রিপ্ট এবং জাভা উভয়ের মধ্যে সবচেয়ে খারাপ।
জাভিয়ের

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

1
সজ্জা যোগ গতিশীল ধরনের পরীক্ষা করা গবেষকেরা এক ধরনের। ভাষার চূড়ান্ত গতিশীলতার কারণে আপনি পাইথনে বিস্তৃত স্ট্যাটিক প্রকারের চেকিং পেতে পারেন না, তবে আপনি যতই চেষ্টা করেছেন।
9000

@ 9000: এটি সঠিক। যাইহোক, আমি গতিশীল টাইপ চেকিং খারাপ বলে মনে করি না (তবে আমি হাঁসের ধরণের তুলনা আলা জেএস 4 পছন্দ করবো), বিশেষত যখন ইউনিট পরীক্ষার সাথে মিলিত হয়েছিল এবং টাইপিং সজ্জকারগুলি আরও কার্যকর সমর্থন আইডিই / লিন্ট-চেকার হতে পারে যদি তারা আদর্শায়িত।
ম্যাক 14

অবশ্যই এটি খারাপ নয়! এটি নৈতিকতার বিষয় নয়। এক পর্যায়ে, প্রকারটি অবশ্যই একরকম বা অন্য কোনওভাবে "চেক" করা উচিত। আপনি সিতে * ((ডাবল *) 0x98765E) লিখলে সিপিইউ এটি করবে এবং 0x98765E আসলে ডাবলের পয়েন্টার কিনা তা যাচাই করবে।
ইনগো

2

পাইথন বস্তু না একটি টাইপ আছে।

আপনি বস্তুটি তৈরি করার সময় আপনি প্রকারটি নির্দিষ্ট করে দিন।

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

আসলে, পাইথনে একটি ম্যানুয়াল টাইপ চেক প্রায় সময় এবং কোডের অপচয়।

পাইথনে টাইপ চেকিং কোড লেখার পক্ষে এটি খুব খারাপ অভ্যাস।

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

আপনি কোনও কোড লেখেন না, আপনার প্রোগ্রামটি এখনও একটি দিয়ে ব্যর্থ হয় TypeError

খুব বিরল ক্ষেত্রে রয়েছে যখন আপনাকে রান-টাইমে টাইপ নির্ধারণ করতে হবে।

কেন এমন সীমাবদ্ধতা রয়েছে?

যেহেতু এটি "সীমাবদ্ধতা" নয়, প্রশ্নটি আসল প্রশ্ন নয়।


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

@ ইঙ্গো: স্পষ্টির জন্য ধন্যবাদ। সমস্যাটি হ'ল সি ++ এবং জাভা অবজেক্টগুলি এক ধরণের থেকে অন্য প্রকারে ফেলে দেওয়া যেতে পারে, যা কোনও বস্তুর প্রকারকে কিছুটা দুর্বল করে তোলে এবং তাই এই সংকলকগুলিতে "টাইপ চেকিং" তৈরি করে কিছুটা দুর্বলও হয়। যেখানে পাইথন টাইপ চেকিং - এটি রান টাইমে হলেও - অনেক কম ন্যূনতম। এছাড়াও, প্রশ্নটি ডায়নামিক্যালি টাইপ করা ভাষাগুলির ধরণ থাকে না বলার কাছাকাছি চলে। সুসংবাদটি হ'ল এটি সাধারণ ভুলটি করে না।
এস .লট

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

2

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

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

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


0

আপনি হাস্কেলের প্রতি আগ্রহী হতে পারেন - এটি টাইপ সিস্টেম কোড থেকে প্রকারগুলি অনুভব করে এবং আপনি প্রকারগুলি নির্দিষ্ট করেও দিতে পারেন।


5
হাস্কেল একটি দুর্দান্ত ভাষা। এটি কোনওভাবে গতিশীল ভাষার বিপরীতে: আপনি প্রকারগুলি বর্ণনা করতে প্রচুর সময় ব্যয় করেন এবং সাধারণত আপনার ধরণগুলি সনাক্ত করার পরে প্রোগ্রামটি কার্যকর হয় :)
9000

@ 9000: আসলেই। এটি একবার সংকলিত হয়ে গেলে এটি সাধারণত কাজ করে। :)
ম্যাক 9'11

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

0

অন্যান্য উত্তরগুলি যেমন ইঙ্গিত করেছে, প্রোগ্রামিং ভাষা প্রয়োগ করার সময় টাইপ করার জন্য দুটি পন্থা রয়েছে।

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

উভয় পন্থা বৈধ, এবং কোনটি ব্যবহার তা আংশিকভাবে পারফরম্যান্সের মতো প্রযুক্তিগত বিবেচনার উপর নির্ভর করে, এবং আংশিকভাবে ভাষার জন্য টার্গেট মার্কেটের মতো রাজনৈতিক কারণে।


0

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

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

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

আশা করি এটি আপনাকে সহায়তা করবে।


-1

এটি সহজভাবে এটি করার কোনও মানে হয় না।

কেন?

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


1
কেন? কোন ধরণের প্রত্যাশা করা উচিত তার একটি সংকলককে ইঙ্গিত করার জন্য এটি সঠিক ধারণা তৈরি করে। এটি কোনও ধরণের সিস্টেম সীমাবদ্ধতার বিরোধিতা করবে না।
এসকে-যুক্তি

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

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

@ এসকে-যুক্তি: সম্ভবত আপনি আমাকে বলতে পারবেন যে সিএল-এ কখন এবং কীভাবে টাইপ ত্রুটি সনাক্ত করা হয়? যাইহোক, @ মাইনমা ​​তার প্রশ্নে স্থিতিশীলতার সংক্ষিপ্ত বিবরণটি সংক্ষেপে বর্ণনা করেছেন: "খাঁটি" গতিশীল ভাষাগুলি থেকে কেউ আশা করতে পারে এটিই।
ইনগো

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

-1

গো একবার দেখুন, পৃষ্ঠতলে এটি স্ট্যাটিকালি টাইপ করা থাকে তবে সেই ধরণেরগুলি ইন্টারফেস হতে পারে যা মূলত গতিশীল।

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