Դինամիկ տիպավորում

Դինամիկ տիպավորում, ծրագրավորման լեզուներում լայն կիրառություն ունեցող հնարք, որի դեպքում փոփոխականը կապվում է տիպի հետ վերագրման, այլ ոչ թե դրա հայտարարման ժամանակ։ Դրա շնորհիվ միևնույն փոփոխականը ծրագրի տարբեր մասերում կարող է ընդունել տարբեր տիպի արժեքներ։ Դինամիկ տիպավորմամբ ծրագրավորման լեզուներ են, օրինակ, 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.

Տես նաև 
 Տվյալների տիպավորում
 Տվյալների խիստ տիպավորում
 Տվյալների թույլ տիպավորում
 Տվյալների ստատիկ տիպավորում
 Տվյալների տիպերի արտարծում
 Դինամիկ ծրագրավորման լեզու

Հղումներ 
 Sitepoint: Introduction to Static and Dynamic Typing

Տվյալների տիպեր