プログラミング言語でのタイピングに関するLikbez

画像



この記事には、動的型付けの悪を呼び出さないために型付けについて知っておく必要がある最低限のものが含まれています。Lispは型なし言語であり、Cは強く型付けされた言語です。



完全版には、すべてのタイプのタイプの詳細な説明が含まれており、コード例、人気のあるプログラミング言語へのリンク、指数関数的な画像が含まれています。



最初に短いバージョンの記事を読み、次に必要に応じて記事全体を読むことをお勧めします。



ショートバージョン



標準化プログラミング言語は、通常、 型付き型なし なし )の2つの大きなキャンプに分かれています。 たとえば、前者にはC、Python、Scala、PHP、およびLuaが含まれ、後者にはアセンブリ言語、Forth、およびBrainfuckが含まれます。



「タイプレスタイピング」はコルクのように本質的に単純なので、他のタイプにさらに分割されることはありません。 ただし、型付き言語は、いくつかの重複するカテゴリに分けられます。





また、これらのカテゴリはすべて交差していることにも注意してください。たとえば、C言語には静的な弱い明示的な型付けがあり、Python言語には動的な強い暗黙的な型があります。



それでも、静的型と動的型を同時に持つ言語はありません。 先を見て、私はここに横たわっていると言います-それらは本当に存在しますが、それについては後で詳しく説明します



さらに進みましょう。



詳細バージョン



短いバージョンでは十分ではないようであれば、良いでしょう。 詳細を書いたのも不思議ではありませんか? 主なことは、短いバージョンではすべての有用で興味深い情報を収めることは単に不可能であり、詳細な情報はおそらく誰もが緊張せずに読むには長すぎるということです。



型なしタイピング



型のないプログラミング言語では、すべてのエンティティは、さまざまな長さのビットのシーケンスと見なされます。



型なしタイピングは、通常、低レベル(アセンブリ言語、Forth)および難解な(Brainfuck、HQ9、Piet)言語に固有です。 しかし、彼女には、欠点とともにいくつかの利点があります。



メリット




短所




強い型なしタイピング?


, . ( 86/86-64, ) , cx (16 ) rax (64 ).



mov cx, eax ;







, - ? , . , , .







image



, (static) (dynamic) , , .



, ( , ). , — , ? ? , , ?



.











image





, — . — ( ) — , .



? 3- : .



— . , ( ) , , — (-1).



(Python):

def find( required_element, list ):
    for (index, element) in enumerate(list):
        if element == required_element:
            return index

    return (-1)

      
      







, , , , . . — - !



():

unsigned int find_int( int required_element, int array[], unsigned int size ) {
    for (unsigned int i = 0; i < size; ++i )
        if (required_element == array[i])
            return i;

    return (-1);
}

unsigned int find_float( float required_element, float array[], unsigned int size ) {
    for (unsigned int i = 0; i < size; ++i )
        if (required_element == array[i])
            return i;

    return (-1);
}

unsigned int find_char( char required_element, char array[], unsigned int size ) {
    for (unsigned int i = 0; i < size; ++i )
        if (required_element == array[i])
            return i;

    return (-1);
}

      
      







, Python, ? ?



, . , . C++ . :



( , C++):

template <class T>
unsigned int find( T required_element, std::vector<T> array ) {
    for (unsigned int i = 0; i < array.size(); ++i )
        if (required_element == array[i])
            return i;

    return (-1);
}

      
      







! Python . , 3-, !



, — .



, , . - ( Haskell). - ( ), () .





, , :





, :





, ?







image



. « ». — strong typing.



, , , . « ». — weak typing.



, . .



, . , , . !



. , , , , , «» ? — , ! (, )



- ? , , , , .



?











, , ! ?



.



,


… . « » ?



, . — . — ( , , , -, , ).



. 3.5 — ( — ? ? ? ?).



— , . .



, PL/I . ! !



, . ? , Pascal , . C#, Groovy Common Lisp.



, , . , .



Haskell.



, .



pi + 1



, pi + 1.0



pi + float(1)



. pi + 1



!



Haskell, , 1 . , , . !



sum x y



, x y ( 1), — sum , sum , sum , sum sum .



, .



, , . , ( Haskell, Java, C#, Python), ( C, JavaScript, Lua, PHP).



, ?







image



, , . — explicit typing.



, , . — implicit typing.



- , , — , , .



, , ?











, , ( - ?), !



-


, - . . — Haskell, , :

--    
add (x, y) = x + y

--   
add :: (Integer, Integer) -> Integer
add (x, y) = x + y

      
      







: , add :: (Num a) => a -> a -> a



*, .. , Haskell'.



* int_index .



. , . 18 , !



, Haskell, . ( )



- -?

.



-


C++, C++11 ( C++0x), auto, , :

 :
//   
unsigned int a = 5;
unsigned int b = a + 3;

//   
unsigned int a = 5;
auto b = a + 3;

      
      







. . ( , , , ):

//   
std::vector<int> vec = randomVector( 30 );
for ( std::vector::const_iterator it = vec.cbegin(); ... ) { 
    ...
}

//   
auto vec = randomVector<int>( 30 );
for ( auto it = vec.cbegin(); ... ) { 
    ...
}

      
      







! . , - Haskell, ?



, decltype auto:

//   
int divide( int x, int y ) {
    ...
}

//   
auto divide( int x, int y ) -> decltype(x / y) {
    ...
}

      
      







, , (templates / generics) .







“”.



JavaScript  -  |       | 
Ruby        -  |      | 
Python      -  |      | 
Java        -   |      | 
PHP         -  |       | 
C           -   |       | 
C++         -   |       | 
Perl        -  |       | 
Objective-C -   |       | 
C#          -   |      | 
Haskell     -   |      | 
Common Lisp -  |      | 
D           -   |      | 
Delphi      -   |      | 

      
      







( C# qxfusion):





- , CL, PHP Obj-C, - — .





. , . ? ? ? , .



!





:

:




All Articles