Դինամիկ տիպավորում
Այս հոդվածն աղբյուրների կարիք ունի։ Դուք կարող եք բարելավել հոդվածը՝ գտնելով բերված տեղեկությունների հաստատումը վստահելի աղբյուրներում և ավելացնելով դրանց հղումները հոդվածին։ Անհիմն հղումները ենթակա են հեռացման։ |
Դինամիկ տիպավորում, ծրագրավորման լեզուներում լայն կիրառություն ունեցող հնարք, որի դեպքում փոփոխականը կապվում է տիպի հետ վերագրման, այլ ոչ թե դրա հայտարարման ժամանակ։ Դրա շնորհիվ միևնույն փոփոխականը ծրագրի տարբեր մասերում կարող է ընդունել տարբեր տիպի արժեքներ։ Դինամիկ տիպավորմամբ ծրագրավորման լեզուներ են, օրինակ, Smalltalk-ը, Python-ը, Objective-C-ն, Ruby-ն, PHP-ն, Perl-ը, JavaScript-ը, Lisp-ը, xBase-ը, QtScript-ը և այլն։
Դինամիկ տիպավորման հնարքին հակադասվում է ստատիկ տիպավորումը։
Որոշ դինամիկ տիպավորում ունեցող լեզուներում մեծությունների համեմատման խնդիրներ են առաջանում։ Օրինակ, PHP-ում երկու տեսակի համեմատման գործողություններ կան՝ «==
», «!=
» և «===
», «!==
», որտեղ գործողութույնների առաջին զույգը համեմատում է միայն փոփոխակաների արժեքները, իսկ երկրորդ զույգը՝ ինչպես արժեքը, այնպես էլ տիպը։ Այսպես, 1=="1"
արտահայտությունը կվերադարձնի true, իսկ 1==="1"
արտահայտությունը՝ false։ Հարկ է նշել, որ այս խնդիրն առաջանում է ոչ թե ամբողջ դինամիկ տիպավորման մեջ, այլ առանձին ծրագրավորման լեզուներում
Օրինակներ
խմբագրելPHP
խմբագրել<html><head><title>test</title></head>
<body>
<?php
$res = "string1"; echo $res.'<br />'; // կարտարծի "string1"
$res = 1; echo $res.'<br />'; // կարտարծի "1"
$res += 2; echo $res.'<br />'; // կարտարծի "3"
$res += "string2"; echo $res.'<br />'; // կարտարծի "3string2"
?>
</body>
</html>
JavaScript
խմբագրել<html><head><title>test</title></head>
<body>
<script type="text/javascript">
function DoTest(obj) {
var res = "string1"; alert(res); // կարտարծի «string1»
res = 1; alert(res); // կարտարծի «1»
res += 2; alert(res); // կարտարծի «3»
res += 'string2'; alert(res); // կարտարծի «3string2»
}
</script>
<a href="#" onClick="DoTest()">Click to test</a>
</body></html>
Object Pascal
խմբագրելprogram Project2;
{$APPTYPE CONSOLE}
Uses SysUtils;
Var V1, V2: Variant;
begin
V1 := 'string1'; WriteLn(V1); // կարտարծի "string1"
V2 := 1; WriteLn(V2); // կարտարծի "1"
Inc(V2,2); WriteLn(V2); // կարտարծի "3"
WriteLn(V2,'string2'); // կարտարծի "3string2"
end.