ස්ථිතිකව ටයිප් කළ සහ ගතිකව ටයිප් කළ භාෂා අතර වෙනස කුමක්ද?


968

නව ක්‍රමලේඛන භාෂා ගතිකව ටයිප් කර ඇති බව මට බොහෝ දේ අසන්නට ලැබේ, නමුත් භාෂාවක් ගතිකව ටයිප් කර එදිරිව එදිරිව සංඛ්‍යාත්මකව ටයිප් කර ඇති බව පවසන විට ඇත්ත වශයෙන්ම එයින් අදහස් කරන්නේ කුමක්ද?


25
හොඳ ප්‍රශ්නයක් නමුත් ඔබ පිළිගත් පිළිතුර නිවැරදි පිළිතුර නොවේ.
ජේඩී

43
එවිට ඔබට නිවැරදි යමක් යොමු කළ හැකිද?
සගිරුදින් මොන්ඩල්

@ එරික්ලෙස්චින්ස්කි මම හිතන්නේ ඒකක පරීක්ෂණ දැන් එම ගැටලුවට උපකාරී වන අතර ජාවාස්ක්‍රිප්ට් වැනි ගතිකව ටයිප් කළ භාෂාවන් එය රඳවා තබා ගන්නා බවට සහතිකයක් සමඟ කේත කළ හැකි අතර එමඟින් එය ව්‍යවසාය මෘදුකාංග සංවර්ධනය සඳහා සුදුසුකම් ලබයි, ඔබ සිතන්නේ නැද්ද?
පික්සෙල් 67

8
හොඳම දේ නම්, එම ඒකක පරීක්ෂණ කාලයත් සමඟ පිරිහී යන අතර රැකියා සුරක්‍ෂිතතාව වැඩි කිරීමට උත්සාහ කරන සම සේවකයින් විසින් එය අක්‍රිය කරනු ලැබේ. එය හරියට තම ගනුදෙනුකරුගේ මෝටර් රථවල ඩක් ටේප් භාවිතා කිරීමට ගැති කාර්මිකයෙකුට යෝජනා කිරීම වැනිය. ඔව් කනිෂ් ,, මෙම සම්ප්‍රේෂණ කාර්යය සඳහා ඩක් ටේප් භාවිතා කිරීම හොඳ අදහසකි ... ඔබට.
එරික් ලෙස්චින්ස්කි

3
මෙම ප්‍රශ්නය අවුරුදු 10 ක් පැරණි බව මම දනිමි, නමුත් මම අදහස් දැක්වීමේදී කියවූ දෙයින් ඔබ බොහෝ විට "ක්‍රිස්ටෝපර් ටෝකර්" වෙතින් පිළිතුර පිළිගැනීමට මාරු විය යුතුය.
Rev1.0

Answers:


874

ස්ථිතිකව ටයිප් කළ භාෂා

සම්පාදනය කරන වේලාවේ විචල්‍යයක වර්ගය දන්නේ නම් භාෂාවක් සංඛ්‍යාත්මකව ටයිප් කරනු ලැබේ. සමහර භාෂාවන් සඳහා මෙයින් අදහස් කරන්නේ ඔබ ක්‍රමලේඛකයා ලෙස එක් එක් විචල්‍යය කුමන වර්ගයක්ද යන්න සඳහන් කළ යුතු බවයි (උදා: ජාවා, සී, සී ++); වෙනත් භාෂා යම් ආකාරයක ලබා වර්ගය, දෘෂ්යක , විචල්ය වර්ගය පිණස වර්ගය පද්ධතියේ හැකියාව (: OCaml, Haskell, Scala, Kotlin උදා)

මෙහි ඇති ප්‍රධාන වාසිය නම්, සියලු වර්ගවල පරීක්ෂාවන් සම්පාදකයාට කළ හැකි අතර, එබැවින් ඉතා සුළු දෝෂ රාශියක් මුල් අවධියේදී හසු වේ.

උදාහරණ: සී, සී ++, ජාවා, රස්ට්, ගෝ, ස්කාලා

ගතිකව ටයිප් කළ භාෂා

වර්ගය ධාවන කාල අගයන් සමඟ සම්බන්ධ වී ඇත්නම් විචල්‍යයන් / ක්ෂේත්‍ර / යනාදිය නම් භාෂාවක් ගතිකව ටයිප් කරනු ලැබේ. මෙම ක්රම සම්පාදකට ලෙස ඔබ වර්ග සෑම අවස්ථාවකදීම නියම කිරීමට (සමග statically-ටයිප් භාෂාවක් භාවිතා මිස නැති නිසා ටිකක් වඩා ඉක්මනින් ලියන්න පුළුවන් බව මාර්ගයෙන් වර්ගය, දෘෂ්යක ).

උදාහරණ: පර්ල්, රූබි, පයිතන්, පීඑච්පී, ජාවාස්ක්‍රිප්ට්

බොහෝ ස්ක්‍රිප්ටින් භාෂාවන්ට මෙම ලක්ෂණය ඇත, කෙසේ වෙතත් ස්ථිතික වර්ග පරීක්ෂා කිරීම සඳහා සම්පාදකයෙකු නොමැති නමුත්, පරිවර්තකයා විචල්‍යයක වර්ගය වැරදි ලෙස අර්ථකථනය කිරීම නිසා ඇති වූ දෝෂයක් ඔබ සොයනු ඇත. වාසනාවකට මෙන්, ස්ක්‍රිප්ට් කුඩා වන බැවින් දෝෂ සැඟවීමට බොහෝ ස්ථාන නොමැත.

බොහෝ ගතිකව ටයිප් කළ භාෂාවන් ඔබට වර්ග තොරතුරු සැපයීමට ඉඩ දෙයි, නමුත් එය අවශ්‍ය නොවේ. දැනට සංවර්ධනය වෙමින් පවතින එක් භාෂාවක් වන රාස්කල් , දෙමුහුන් ප්‍රවේශයක් ගන්නා අතර ශ්‍රිත තුළ ගතික ටයිප් කිරීමට ඉඩ ලබා දෙන නමුත් ශ්‍රිත අත්සන සඳහා ස්ථිතික ටයිප් කිරීම බලාත්මක කරයි.


6
OmeNomeN එච්එම් වර්ගයේ අනුමානයන් ක්‍රියාත්මක කරන ගතිකව ටයිප් කළ භාෂාවක් නම් කළ හැකිද?
පීට් කිර්හැම්

88
"විචල්යයේ වර්ගය ධාවන වේලාවේදී අර්ථ නිරූපණය කරන්නේ නම් භාෂාවක් ගතිකව ටයිප් කරනු ලැබේ": නැත. වර්ගය ධාවන කාල අගයන් සමඟ සම්බන්ධ වී තිබේ නම් භාෂාවක් ගතිකව ටයිප් කරනු ලැබේ, නමුත් විචල්යයන් / ක්ෂේත්ර / යනාදී නම් නොකෙරේ.
පෝල් බිගාර්

15
සාවද්‍ය, ස්ථිතික ටයිප් කිරීම යන්නෙන් අදහස් වන්නේ “විමර්ශන අගයක් පැහැදිලිවම (එය සම්පාදනය කරන වේලාවට සමාන නොවේ) එය දැක්විය හැකි වටිනාකමට සාපේක්ෂව සීමා වී ඇති බවත්, භාෂාව ක්‍රියාත්මක කිරීම, එය සම්පාදකයෙකු හෝ පරිවර්තකයෙකු වේවා , දෙකම මෙම සීමාවන් හැකිතාක් බලාත්මක කරයි. උපුටා දක්වා ඇත්තේ: c2.com/cgi/wiki?StaticTyping , එය මා තේරුම් ගන්නා ආකාරය නිවැරදි ය.
මතියස් වුල්ෆ්

6
ජාවා, සී, සී ++, පැස්කල් සහ වෙනත් බොහෝ පුළුල් ලෙස භාවිතා වන “කර්මාන්ත” භාෂාවන්හි වඩාත්ම පැහැදිලිව පෙනෙන දෙය නම් ඒවා සංඛ්‍යාත්මකව ටයිප් කර ඇති ඒවා නොව ඒවා පැහැදිලිවම ටයිප් කර ඇති බවයි. වෙනත් වචන වලින් කිවහොත් ඔවුන්ට විශාල ප්‍රමාණයක් අවශ්‍ය වේ ප්‍රකාශන වර්ග කරන්න. (පැහැදිලිව ටයිප් නොකළ භාෂාවන්හි, මෙම ප්‍රකාශයන් විකල්පයක් වන විට, ඒවා බොහෝ විට “වර්ගීකරණ විවරණ” ලෙස හැඳින්වේ.) මෙය ස්ථිතික වර්ග සමඟ කිසිදු සම්බන්ධයක් නැත. දිගටම ..
විප්‍රෙෂ්

7
පළමු සංඛ්‍යාත්මකව ටයිප් කළ භාෂාවන් අවශ්‍යතාවය අනුව පැහැදිලිව ටයිප් කරන ලදි. කෙසේ වෙතත්, අනුමාන ඇල්ගොරිතම ටයිප් කරන්න - කිසිදු ආකාරයක ප්‍රකාශයක් නොමැතිව ප්‍රභව කේතය දෙස බැලීමේ ක්‍රමෝපායන් සහ එහි විචල්‍යයන්ගේ වර්ග මොනවාද යන්න තීරණය කිරීම දැන් වසර ගණනාවක් තිස්සේ පවතී. එය භාවිතා කරන එම්එල් භාෂාව. එය වැඩිදියුණු කරන හස්කල්ට දැන් වයස අවුරුදු 15 ක් පමණ වේ. සී # පවා දැන් මෙම අදහස අනුගමනය කරමින් සිටින අතර, එමඟින් ඇහිබැමි විශාල ප්‍රමාණයක් මතු වන අතර එය “දුර්වල ලෙස ටයිප් කර ඇති” බවට සැකයක් ඇති කරයි. දිගටම ...
විප්‍රෙෂ්

410

ස්ථිතිකව ටයිප් කරන ලද ක්‍රමලේඛන භාෂාවන් ටයිප් පරීක්‍ෂා කරයි (එනම් වර්ගවල අවහිරතා සත්‍යාපනය කිරීමේ සහ බලාත්මක කිරීමේ ක්‍රියාවලිය) ධාවන කාලයට වඩා වෙනස්ව සංයුක්ත වේලාවේදී කරයි.

ගතිකව ටයිප් කළ ක්‍රමලේඛන භාෂා ටයිප් චෙක්පත් වේ සම්පාදනය කරන වේලාවට වඩා ධාවනය වන වේලාවේදී කරයි.

ස්ථිතිකව ටයිප් කළ භාෂා සඳහා උදාහරණ: - ජාවා, සී, සී ++

ගතිකව ටයිප් කළ භාෂා සඳහා උදාහරණ නම්: - පර්ල්, රූබි, පයිතන්, පීඑච්පී, ජාවාස්ක්‍රිප්ට්


19
මම හිතන්නේ මෙය හොඳම පිළිතුරයි. විශේෂයෙන්, පිළිගත් පිළිතුර බොහෝ දුරට සත්‍ය වශයෙන්ම වැරදිය.
ජේඩී

1
On ජෝන්හාරෝප් විශේෂයෙන් කුමන ආකාරවලින්ද?
1252748

21
omas තෝමස්: "මෙයින් අදහස් කරන්නේ ක්‍රමලේඛකයෙකු ලෙස ඔබට සෑම විටම වර්ගය නියම කිරීමට අවශ්‍ය නැති නිසා ඔබට ටිකක් ඉක්මණින් ලිවිය හැකි බවයි". ඔබට ටයිප් අනුමානයන් තිබේ නම් ස්ථිතික ටයිප් කිරීම සමඟ සෑම විටම වර්ගය නියම කිරීමට ඔබට අවශ්‍ය නැත. SML, OCaml, F #, Haskell බලන්න ...
JD

1
ස්ථිතිකව ටයිප් කළ ප්‍රෝග්‍රෑම් භාෂාවලින්, වර්ගය පරීක්ෂා කිරීමට වර්ගය ක්‍රියාත්මක කිරීමට පෙර සිදු කරනු ලැබේ, නමුත් හරියටම සම්පාදනය කරන වේලාවේදී නොවේ.
ලුයිස් ෆෙලිපේ

312

පයිතන් (ගතිකව ටයිප් කළ) සහ ගෝ (ස්ථිතිකව ටයිප් කළ) වර්ගයේ දෝෂයක් හසුරුවන ආකාරය හා සැසඳීමේ උදාහරණය මෙන්න:

def silly(a):
    if a > 0:
        print 'Hi'
    else:
        print 5 + '3'

පයිතන් ධාවන වේලාවේදී පරීක්ෂා කිරීම ටයිප් කරයි, එබැවින්:

silly(2)

පරිපූර්ණව ධාවනය වන අතර අපේක්ෂිත ප්‍රති .ලය නිපදවයි Hi. දෝෂය මතු වන්නේ ගැටළු සහගත රේඛාවට පහර දුන්නොත් පමණි:

silly(-1)

නිෂ්පාදනය කරයි

TypeError: unsupported operand type(s) for +: 'int' and 'str'

අදාළ රේඛාව සැබවින්ම ක්‍රියාත්මක කළ බැවිනි.

අනෙක් අතට යන්න සම්පාදක වේලාවේදී ටයිප් කිරීම සිදු කරයි:

package main

import ("fmt"
)

func silly(a int) {
    if (a > 0) {
        fmt.Println("Hi")
    } else {
        fmt.Println("3" + 5)
    }
}

func main() {
    silly(2)
}

පහත සඳහන් දෝෂය සමඟ ඉහත සඳහන් දෑ සම්පාදනය නොවේ:

invalid operation: "3" + 5 (mismatched types string and int)

5
පිළිවෙලට උදාහරණයට ස්තූතියි. එබැවින්, පිටපත් කිරීමේ භාෂා සියල්ලම සම්පාදනය කර නොමැති බැවින් ගතිකව ටයිප් කර ඇති බව මම අනුමාන කරමි.
CᴴᴀZ

8
ඔව්. සියලුම ස්ක්‍රිප්ටින් භාෂා ගතිකව ටයිප් කර ඇත, මන්ද ඒවා කෙසේ හෝ ස්ථිතික වර්ගයේ පරීක්ෂාවක් කිරීමට සම්පාදකයෙකු නොවන බැවිනි. මෙම කරුණ sitepoint.com/typing-versus-dynamic-typing යන ලිපියෙන් පැහැදිලි කර ඇත .
ශෂි

9
පරිමාණය ස්ක්‍රිප්ටින් භාෂාවක් ලෙස භාවිතා කළ හැකි අතර එය සංඛ්‍යාත්මකව ටයිප් කර ඇත! # සාකච්ඡාව ha ශෂි
සාගිරුදින් මොන්ඩල්

3
Ha ශෂි සම්පාදනය යනු සංඛ්‍යාත්මකව ටයිප් කළ බවක් නොවේ. runhaskellඋදාහරණයක් ලෙස හස්කල් සමඟ අර්ථ නිරූපණය කළ හැකිය .
BalinKingOfMoria CMs නැවත ස්ථාපනය කරන්න

2
භාෂාව ස්ක්‍රිප්ට් කිරීම යන්නෙන් අර්ථ නිරූපණය කළ භාෂාව අදහස් නොවේ. ටයිප්ස්ක්‍රිප්ට් ස්ථිතිකව ටයිප් කර, සම්පාදනය / සම්ප්‍රේෂණය කරන ලද නමුත් ස්ක්‍රිප්ටින් භාෂාවකි.
ලෝහමය

162

සරලව මේ ආකාරයට තබන්න: සංඛ්‍යාත්මකව ටයිප් කළ භාෂා විචල්‍යයන්ගේ වර්ග ස්ථිතික වේ වන අතර එයින් අදහස් වන්නේ ඔබ සැකසූ පසු ඔබට එය වෙනස් කළ නොහැකි බවයි. එයට හේතුව යතුරු ලියනය එය සඳහන් කරන අගයට වඩා විචල්‍යය සමඟ සම්බන්ධ වීමයි.

උදාහරණයක් ලෙස ජාවා හි:

String str = "Hello";  //variable str statically typed as string
str = 5;               //would throw an error since str is supposed to be a string only

අනෙක් අතට: ගතිකව ටයිප් කළ භාෂා විචල්‍යයන්හි ගතික වේ , එයින් අදහස් වන්නේ ඔබ සැකසූ පසු, ඔබට එය වෙනස් කළ හැකිය. එයට හේතුව ටයිප් කිරීම විචල්‍යයට වඩා එය උපකල්පනය කරන අගය සමඟ සම්බන්ධ වීමයි.

උදාහරණයක් ලෙස පයිතන් හි:

str = "Hello" # variable str is linked to a string value
str = 5       # now it is linked to an integer value; perfectly OK

එබැවින්, ගතිකව ටයිප් කළ භාෂාවල විචල්‍යයන් ටයිප් කළ අගයන් සඳහා සාමාන්‍ය දර්ශකයන් ලෙස සිතීම වඩාත් සුදුසුය .

, සාරාංශයකි කිරීමට වර්ගය විස්තර (හෝ විස්තර කර ඇති යුතුය) පරිගණක භාෂාව නොව භාෂාවෙන් විචල්යයන්. එය වඩාත් හොඳින් ලෙස භාවිතා කර ඇත හැකි statically ටයිප් විචල්ය සමඟ භාෂාව එදිරිව ගතිකව ටයිප් විචල්ය සමඟ භාෂාව IMHO.

ස්ථිතිකව ටයිප් කරන ලද භාෂාවන් සාමාන්‍යයෙන් සම්පාදනය කරන ලද භාෂාවන් වන අතර, මේ අනුව, සම්පාදකයින් විසින් වර්ග පරීක්ෂා කරනු ලැබේ (පරිපූර්ණ තේරුමක් තිබේද? පසුව ධාවන වේලාවේදී වර්ග වෙනස් කිරීමට ඉඩ නොදේ).

ගතිකව ටයිප් කළ භාෂාවන් සාමාන්‍යයෙන් අර්ථ නිරූපණය කරනු ලැබේ, එබැවින් ඒවා භාවිතා කරන විට පරීක්ෂා කිරීමේ වර්ගය (ඇත්නම්) සිදු වේ. මෙය ඇත්ත වශයෙන්ම යම් කාර්ය සාධන පිරිවැයක් ගෙනෙන අතර ගතික භාෂා (උදා: පයිතන්, රූබි, පීඑච්පී) ටයිප් කළ ඒවා (ජාවා, සී #, ආදිය) තරම් හොඳ නොවීම සඳහා එක් හේතුවකි. වෙනත් දෘෂ්ටි කෝණයකින්, සංඛ්‍යාත්මකව ටයිප් කළ භාෂාවන්ට ආරම්භක පිරිවැයක් වැඩිය: ඔබ සාමාන්‍යයෙන් වැඩි කේත, අමාරු කේත ලිවීමට සලස්වයි. නමුත් එය පසුව ගෙවනු ලැබේ.

හොඳ දෙය නම් දෙපාර්ශ්වයම අනෙක් පැත්තෙන් ණයට ගැනීමයි. යතුරු ලියනය කරන ලද භාෂාවන් වඩාත් ගතික ලක්ෂණ ඇතුළත් කරයි, උදා: c # හි ජනක විද්‍යාව සහ ගතික පුස්තකාල, සහ ගතික භාෂාවන්ට වැඩි වර්ග පරික්ෂා කිරීම, උදා. ඉල්ලුම.

තාක්‍ෂණය තෝරා ගැනීමේදී දෙපාර්ශ්වයටම අනෙකට වඩා සහජයෙන්ම උසස් බවක් නැත. ඔබට වැඩි පාලනයක් ආරම්භ කිරීමට හෝ නම්‍යශීලී වීමට අවශ්‍යද යන්න මනාපයක් පමණි. කාර්යය සඳහා නිවැරදි මෙවලමක් තෝරාගෙන ස්විචයක් සලකා බැලීමට පෙර ප්‍රතිවිරුද්ධ දේ අනුව ලබා ගත හැකි දේ පරීක්ෂා කිරීමට වග බලා ගන්න.


9
මෙය බොහෝ අර්ථවත් කරයි. මම හිතන්නේ එය මෙහි ඇති අනෙක් පිළිතුරු වලට වඩා අවම වශයෙන් නම් පිටුපස ඇති හේතු පැහැදිලි කරයි.
JamEngulfer

1
ලූකස්, ඊට පටහැනිව, ලේඛනය පයිතන් දැඩි ලෙස හා ගතිකව ටයිප් කර ඇති බව පුනරාවර්තනය කරයි. ඔබ එය දුටුවේ කොහේද? ඔබට උපුටා දැක්විය හැකිද?
mehmet

2
මම හිතන්නේ මෙම පිළිතුර සංකල්පය සරලම ආකාරයෙන් සන්නිවේදනය කරයි. තවත් බොහෝ පිළිතුරු සංකල්පය වියුක්තව විස්තර කිරීමට උත්සාහ කළද එය සවිස්තරාත්මකව අසමත් වේ. මම මෙම පිළිතුර ලැයිස්තුවේ ඉහළින්ම දකිමි.
හෝකී

5
අනෙක් බොහෝ පිළිතුරු මගේ මනසෙහි තවත් ප්‍රශ්න ඇති කළේය. මේ තැනැත්තා ඒ සියල්ල ඉවත් කළා. මෙම පිළිතුර සැබවින්ම ඉහළින්ම තිබිය යුතුය IMHO
Hami Torun

1
මම හිතන්නේ "ටයිප්" යන වචනය පැහැදිලි බව වළක්වයි. ඔබගේ පිළිතුර මා වෙනුවෙන් එය පැහැදිලි කර ඇත :) අතීතයේ මෙය මා අසා ඇති සෑම අවස්ථාවකම, යතුරුපුවරුවක යතුරු ලියනය කිරීමට මම සිතුවෙමි, ඔබ ප්‍රකාශ කරන හෝ විචල්‍යයන් ප්‍රකාශ නොකරන ආකාරය සමඟ යම් සම්බන්ධයක් තිබීම වැනි; දත්ත වර්ග මගේ මනස ඉක්මවා ගියේ නැත. එබැවින් "ටයිප්" යනු විචල්‍යයේ දත්ත සමුදාය ස්ථිතික හෝ ගතිකද යන්න වෙනස් කිරීමට විචල්‍යයේ දත්ත සමුදායට ඇති හැකියාවයි. උදා. ගතික (Str -> int -> බූලියන්)
තෝමස්රෝන්ස්

39

http://en.wikipedia.org/wiki/Type_system

ස්ථිතික ටයිප් කිරීම

ක්‍රමලේඛන භාෂාවක්, ධාවන කාලයට වඩා සම්පාදක කාලය තුළ වර්ග පරීක්ෂා කිරීම සිදු කරන විට ස්ථිතික යතුරු ලියනය භාවිතා කරන බව කියනු ලැබේ. ස්ථිතික ටයිප් කිරීමේදී, වර්ගයන් විචල්‍යයන් සමඟ නොව අගයන් සමඟ සම්බන්ධ වේ. ස්ථිතිකව ටයිප් කළ භාෂාවන්ට අඩා, සී, සී ++, සී #, ජේඩ්, ජාවා, ෆෝට්‍රාන්, හැස්කල්, එම්එල්, පැස්කල්, පර්ල් (පරිමාණයන්, අරා, හැෂ් සහ සබ්ට්‍රවුටින් වෙන්කර හඳුනා ගැනීමට අදාළව) සහ ස්කාලා ඇතුළත් වේ. ස්ථිතික ටයිප් කිරීම යනු වැඩසටහන් සත්‍යාපනයෙහි සීමිත ආකාරයකි (වර්ගය ආරක්ෂාව බලන්න): ඒ අනුව, එය සංවර්ධන චක්‍රයේ මුල් අවධියේදී බොහෝ වර්ගවල දෝෂ හඳුනා ගැනීමට ඉඩ දෙයි. ස්ථිතික වර්ග පරීක්ෂකයින් විසින් සම්පාදනය කරන වේලාවේදී තීරණය කළ හැකි ආකාරයේ තොරතුරු පමණක් ඇගයීමට ලක් කරයි, නමුත් වැඩසටහන ක්‍රියාත්මක කළ හැකි සෑම ක්‍රියාවලියක් සඳහාම පරීක්ෂා කරන ලද කොන්දේසි පවතින බව තහවුරු කර ගත හැකි අතර, එමඟින් වැඩසටහන ක්‍රියාත්මක වන සෑම අවස්ථාවකම නැවත නැවත පරීක්ෂා කිරීමේ අවශ්‍යතාවය ඉවත් කරයි.

සම්පාදනය කිරීමේදී ඔවුන් වර්ග තොරතුරු තක්සේරු කරන නිසා සහ ක්‍රියාත්මක වන වේලාවට පමණක් ලබා ගත හැකි ආකාරයේ තොරතුරු නොමැති නිසා ස්ථිතික වර්ග පරීක්ෂකයින් ගතානුගතික වේ. ක්‍රියාත්මක වන වේලාවේදී හොඳින් හැසිරවිය හැකි සමහර වැඩසටහන් ඔවුන් ප්‍රතික්ෂේප කරනු ඇත, නමුත් එය හොඳින් ටයිප් කිරීමට සංඛ්‍යානමය වශයෙන් තීරණය කළ නොහැක. නිදසුනක් ලෙස, ප්‍රකාශනයක් සෑම විටම ධාවන වේලාවේදී සත්‍ය ලෙස තක්සේරු කළද, කේතය අඩංගු වැඩසටහනකි

if <complex test> then 42 else <type error>

ස්ථිතික විශ්ලේෂණයකට අනෙක් ශාඛාව නොගන්නා බව තීරණය කළ නොහැකි බැවින් වැරදි ලෙස ටයිප් කළ ඒවා ලෙස ප්‍රතික්ෂේප කරනු ලැබේ. කලාතුරකින් අසත්‍ය ලෙස තක්සේරු කිරීමේදී ස්ථිතික වර්ග පරීක්ෂකයින්ගේ ගතානුගතික හැසිරීම වාසිදායක වේ: කලාතුරකින් භාවිතා වන කේත මාර්ගවල ස්ථිතික වර්ග පරීක්ෂකයෙකුට වර්ග දෝෂ හඳුනාගත හැකිය. ස්ථිතික වර්ග පරීක්ෂාවකින් තොරව, 100% කේත ආවරණයක් සහිත කේත ආවරණ පරීක්ෂණවලට පවා එවැනි ආකාරයේ දෝෂ සොයා ගැනීමට නොහැකි වනු ඇත. කේත ආවරණ පරීක්ෂණ මගින් එවැනි වර්ගයේ දෝෂ හඳුනා ගැනීමට අපොහොසත් විය හැකි බැවින් අගයන් නිර්මාණය කරන ලද සියලුම ස්ථානවල සහ යම් අගයක් භාවිතා කරන සියලුම ස්ථානවල සංයෝජනය සැලකිල්ලට ගත යුතුය.

වැඩිපුරම භාවිතා වන සංඛ්‍යානමය වශයෙන් ටයිප් කරන ලද භාෂා විධිමත් ලෙස ආරක්ෂිත නොවේ. ක්‍රමලේඛන භාෂා පිරිවිතරයේ “අඩුපාඩු” ඇති අතර ස්ථිතික වර්ගයේ පරීක්ෂකයෙකු විසින් සිදු කරන ලද සත්‍යාපනය මගහරින කේත ලිවීමට ක්‍රමලේඛකයන්ට හැකි වේ. නිදසුනක් ලෙස, ජාවා සහ බොහෝ සී-ශෛලියේ භාෂාවන්ට ද pun ුවම් කිරීමේ හැකියාවක් ඇති අතර, හස්කල්ට අනාරක්ෂිත ක්‍රියාකාරීත්ව ලක්ෂණ ඇත: එවැනි ක්‍රියාකාරකම් ක්‍රියාත්මක වන විට අනාරක්ෂිත විය හැකිය, එමඟින් වැඩසටහන ක්‍රියාත්මක වන විට වැරදි ලෙස ටයිප් කිරීම නිසා අනවශ්‍ය හැසිරීම් ඇති විය හැකිය.

ගතික ටයිප් කිරීම

ක්‍රමලේඛන භාෂාවක් ගතිකව ටයිප් කර ඇති බව කියනු ලැබේ, නැතහොත් 'ගතික' වේ, එහි වර්ගයේ බහුතරයක් පරික්ෂා කිරීමේ වේලාවට වඩා ක්‍රියාත්මක වන වේලාවේදී සිදු කරයි. ගතික ටයිප් කිරීමේදී, වර්ග විචල්‍යයන් නොව අගයන් සමඟ සම්බන්ධ වේ. ගතිකව ටයිප් කරන ලද භාෂාවන් අතර ග්‍රෝවි, ජාවාස්ක්‍රිප්ට්, ලිස්ප්, ලුවා, පරමාර්ථ-සී, පර්ල් (පරිශීලක-නිර්වචනය කරන ලද වර්ග වලට සාපේක්ෂව නමුත් ගොඩනගා නැති වර්ග), PHP, Prolog, Python, Ruby, Smalltalk සහ Tcl. ස්ථිතික ටයිප් කිරීම හා සසඳන විට, ගතික ටයිප් කිරීම වඩාත් නම්‍යශීලී විය හැකිය (උදා: වැඩසටහන් සහතික කිරීම මඟින් ධාවන කාල දත්ත මත පදනම්ව වර්ග සහ ක්‍රියාකාරිත්වය ජනනය කිරීමට ඉඩ දීමෙන්), ප්‍රාථමික සහතිකයක් අඩු වියදමකින් වුවද. මෙයට හේතුව, ගතිකව ටයිප් කළ භාෂාවක් ස්ථිතික වර්ග පරීක්ෂකයෙකු විසින් අවලංගු යැයි පාලනය කළ හැකි සමහර වැඩසටහන් පිළිගෙන ක්‍රියාත්මක කිරීමට උත්සාහ කිරීමයි.

ගතික ටයිප් කිරීම මඟින් ධාවන කාල දෝෂ ඇති විය හැකිය - එනම්, ධාවන වේලාවේදී අගයකට අනපේක්ෂිත වර්ගයක් තිබිය හැකි අතර, එම වර්ගය සඳහා විකාර සහගත ක්‍රියාවක් යොදනු ලැබේ. ක්‍රමලේඛන අත්වැරැද්ද සිදු වූ ස්ථානයට බොහෝ කලකට පසුව මෙම මෙහෙයුම සිදුවිය හැකිය is එනම් වැරදි ආකාරයේ දත්ත නොතිබිය යුතු ස්ථානයකට ඇතුළු වූ ස්ථානය. මෙය දෝෂය සොයා ගැනීම දුෂ්කර කරයි.

ගතිකව ටයිප් කළ භාෂා පද්ධති, ඔවුන්ගේ සංඛ්‍යාත්මකව ටයිප් කළ ous ාති සහෝදරයන් හා සසඳන විට, ප්‍රභව කේතයෙහි “සම්පාදක-කාල” චෙක්පත් අඩු කරයි (නමුත් උදාහරණයක් ලෙස, වැඩසටහන කෘතිමව නිවැරදි දැයි පරීක්ෂා කරනු ඇත). ගතික තොරතුරු මෙන්ම සම්පාදනය කිරීමේදී තිබූ ඕනෑම තොරතුරක් භාවිතා කළ හැකි බැවින් ධාවන කාල චෙක්පත් වඩාත් නවීන විය හැකිය. අනෙක් අතට, ධාවන කාල චෙක්පත් මඟින් නිශ්චිතවම වැඩසටහන ක්‍රියාත්මක කිරීමේදී කොන්දේසි පවතින බව පමණක් ප්‍රකාශ වන අතර වැඩසටහනේ සෑම ක්‍රියාවක් සඳහාම මෙම චෙක්පත් පුනරාවර්තනය වේ.

ගතිකව ටයිප් කළ භාෂාවල සංවර්ධනයට බොහෝ විට ඒකක පරීක්ෂණ වැනි ක්‍රමලේඛන භාවිතයන් සහාය වේ. වෘත්තීය මෘදුකාංග සංවර්ධනයේ දී අත්හදා බැලීම ප්‍රධාන භාවිතයක් වන අතර ගතිකව ටයිප් කරන ලද භාෂාවල විශේෂයෙන් වැදගත් වේ. ප්‍රායෝගිකව, නිවැරදි ක්‍රමලේඛන ක්‍රියාකාරිත්වය සහතික කිරීම සඳහා කරන ලද පරීක්ෂණයට ස්ථිතික වර්ග පරීක්ෂාවට වඩා පුළුල් පරාසයක දෝෂ හඳුනාගත හැකි නමුත් අනෙක් අතට පරීක්ෂණ සහ ස්ථිතික වර්ග පරීක්ෂා කිරීම යන දෙකම හඳුනාගත හැකි දෝෂ සඳහා පුළුල් ලෙස සෙවිය නොහැක. මෘදුකාංග සෑදීමේ චක්‍රයට පරීක්ෂණ ඇතුළත් කළ හැකි අතර, එය “සම්පාදක කාල පරීක්ෂාවක්” ලෙස සිතිය හැකිය, එමඟින් වැඩසටහන් පරිශීලකයාට එවැනි පරීක්ෂණ අතින් ක්‍රියාත්මක කිරීමට සිදු නොවේ.

යොමුව

  1. පියර්ස්, බෙන්ජමින් (2002). වර්ග සහ ක්‍රමලේඛන භාෂා. MIT මුද්‍රණාලය. ISBN 0-262-16209-1.

75
SO හි ප්‍රධාන අදහස වන්නේ වෙනත් ස්ථානයකට සබැඳි සැපයීම නොව දැනුමෙන් යුත් ශරීරයක් ගොඩනැගීමයි. ඔබ අවම වශයෙන් ප්‍රශ්නයට පිළිතුරු සපයන විකියේ උපුටා ගැනීමක් කිරීමට උත්සාහ කළ යුතුය.
NomeN

5
එය විකිපීඩියාවට සබැඳියක් වන අතර එය කිසියම් අස්ථිර වෙබ් අඩවියක් නොවන බැවින් එය අතිරික්තයක් ලෙස පෙනුනි, නමුත් ඊළඟ වතාවේ මට එය මතකයි.
ජාකොබ්

2
කෙසේ වෙතත්, ගතිකව ටයිප් කළ භාෂාවක උදාහරණයක් සම්පාදනය කරන වේලාවේදී පැහැදිලි නැති නමුත් ධාවන වේලාවේදී සොයාගත යුතු උදාහරණයක් ගැන මට තවමත් සිතිය නොහැකිය. ඔබට මට ටිකක් ලබා දිය හැකිද?
නවකතාකාරක

3
OveNovellizator පැරණි අදහස් දැක්වීමක් නමුත් දුරස්ථ සේවාදායකයකින් සමහර දත්ත ලබා ගන්නා අවස්ථාවක් ගැන සිතන්න, එවිට එම දත්ත වස්තුවක දේපලක් තෝරා ගැනීමට භාවිතා කරයි. උදා: myObject[remoteDataName]. එවිට එය කුමන දේපලක් තෝරා ගන්නේද යන්න හෝ එය වලංගු දේපලක් වුවද දැන ගැනීමට ක්‍රමයක් නොමැත.
මයික් ක්ලක්

14

"ගතිකව ටයිප්" යන පාරිභාෂිතය අවාසනාවකට නොමඟ යවන සුළුය. සියලුම භාෂා සංඛ්‍යාත්මකව ටයිප් කර ඇති අතර වර්ග ප්‍රකාශනවල ගුණාංග වේ (සමහරු සිතන පරිදි අගයන් නොවේ). කෙසේ වෙතත්, සමහර භාෂාවන්ට ඇත්තේ එක් වර්ගයක් පමණි. මේවා ඒක-ටයිප් කළ භාෂා ලෙස හැඳින්වේ. එවැනි භාෂාවක එක් උදාහරණයක් වන්නේ ටයිප් නොකළ ලැම්බඩා කැල්කියුලස් ය.

ටයිප් නොකළ ලැම්බඩා කැල්කියුලස් හි, සියලු පද ලැම්බඩා පද වන අතර, යම් යෙදුමක් මත කළ හැකි එකම මෙහෙයුම එය වෙනත් යෙදුමකට යෙදීමයි. එබැවින් සියලු මෙහෙයුම් සැමවිටම අසීමිත පුනරාවර්තනයක් හෝ ලැම්බඩා යෙදුමක් ඇති කරයි, නමුත් කිසි විටෙකත් දෝෂයක් සං signal ා නොකරයි.

කෙසේ වෙතත්, අප විසින් ටයිප් නොකළ ලැම්බඩා කැල්කියුලස් ප්‍රාථමික සංඛ්‍යා හා ගණිතමය මෙහෙයුම් වලින් වැඩි දියුණු කිරීමට නම්, එවිට අපට විකාර මෙහෙයුම් සිදු කළ හැකිය, එනම් ලැම්බඩා පද දෙකක් එකතු කිරීම : (λx.x) + (λy.y). කෙනෙකුට තර්ක කළ හැක්කේ මෙය සිදු වූ විට දෝෂයක් සං signal ා කිරීම පමණි, නමුත් මෙය කිරීමට නම්, සෑම අගයක්ම ලැම්බඩා පදය හෝ අංකයක්ද යන්න දැක්වෙන දර්ශකයක් සමඟ ටැග් කළ යුතුය. එකතු කිරීමේ ක්‍රියාකරු පසුව තර්ක දෙකම සංඛ්‍යා ලෙස ටැග් කර ඇත්දැයි පරීක්ෂා කරනු ඇති අතර ඒවා එසේ නොවේ නම් දෝෂයක් සං signal ා කරයි. මෙම ටැග් වර්ග වර්ග නොවන බව සලකන්න , මන්ද වර්ග යනු වැඩසටහන් වල ගුණාංග මිස එම වැඩසටහන් මඟින් නිපදවන අගයන් නොවේ.

මෙය කරන ඒක-ටයිප් කළ භාෂාවක් ගතිකව ටයිප් කර ඇත.

ජාවාස්ක්‍රිප්ට්, පයිතන් සහ රූබි වැනි භාෂා සියල්ලම යතුරු ලියනය කර ඇත. නැවතත්, typeofජාවාස්ක්‍රිප්ට් හි ක්‍රියාකරුට සහ typeපයිතන් හි ක්‍රියාකාරිත්වයට නොමඟ යවන නම් ඇත; ඔවුන් මෙහෙයුම් වර්ග හා සම්බන්ධ ටැග් ආපසු ලබා දෙයි, ඒවායේ වර්ග නොවේ. ඒ හා සමානව, dynamic_castC ++ සහ instanceofජාවා නැහැ නැහැ වර්ගය චෙක්පත් කරන්න.


9

සම්පාදනය කරන ලද එදිරිව

"ප්‍රභව කේතය පරිවර්තනය කළ විට"

  • ප්‍රභව කේතය : මුල් කේතය (සාමාන්‍යයෙන් මිනිසෙකු පරිගණකයකට යතුරු ලියනය කරයි)
  • පරිවර්තනය : ප්‍රභව කේතය පරිගණකයකට කියවිය හැකි දෙයක් බවට පරිවර්තනය කිරීම (එනම් යන්ත්‍ර කේතය)
  • ධාවන කාලය : වැඩසටහන විධාන ක්‍රියාත්මක කරන කාලය (සම්පාදනය කිරීමෙන් පසුව, සම්පාදනය කළහොත්)
  • සම්පාදනය කරන ලද භාෂාව : ධාවන කාලයට පෙර පරිවර්තනය කළ කේතය
  • අර්ථකථනය කරන ලද භාෂාව : ක්‍රියාත්මක කිරීමේදී කේතය පියාසර කරන විට පරිවර්තනය කර ඇත

ටයිප් කිරීම

"වර්ග පරීක්ෂා කළ විට"

5 + '3'Go සහ Python වැනි තදින් ටයිප් කළ භාෂාවල ඇති වර්ගීකරණ දෝෂයක නිදසුනකි , මන්ද ඒවා “වර්ග බලහත්කාරය” සඳහා ඉඩ නොදේ -> වර්ග දෙකක් ඒකාබද්ධ කිරීම වැනි ඇතැම් සන්දර්භයන් තුළ අගය වෙනස් කිරීමට ඇති හැකියාව. ජාවාස්ක්‍රිප්ට් වැනි දුර්වල ලෙස ටයිප් කළ භාෂා වර්ග දෝෂයක් නොදක්වයි (ප්‍රති results ල '53').

  • ස්ථිතික : ධාවන කාලයට පෙර පරීක්ෂා කළ වර්ග
  • ගතික : ක්‍රියාත්මක කිරීමේදී පියාසර කරන ආකාරය පරීක්ෂා කරන ලද වර්ග

"ස්ථිතික හා සම්පාදිත" සහ "ගතික සහ අර්ථකථනය" යන අර්ථ දැක්වීම් බෙහෙවින් සමාන ය ... නමුත් එය මතක තබා ගන්න "වර්ග පරීක්ෂා කළ විට" එදිරිව "ප්‍රභව කේතය පරිවර්තනය කරන විට".

භාෂාව සම්පාදනය කර හෝ අර්ථ නිරූපණය කළද ඔබට එකම ආකාරයේ දෝෂ ලැබෙනු ඇත ! ඔබ මෙම පද සංකල්පමය වශයෙන් වෙන් කළ යුතුය.


පයිතන් උදාහරණය

ගතික, අර්ථ නිරූපණය

def silly(a):
    if a > 0:
        print 'Hi'
    else:
        print 5 + '3'

silly(2)

පයිතන් අර්ථ නිරූපණය කර ගතිකව ටයිප් කර ඇති නිසා, එය ක්‍රියාත්මක කරන්නේ එය පරිවර්තනය කර ටයිප්-චෙක් කේතය පමණි. මෙම elseවාරණ ඉටු නෑ, ඒ 5 + '3'පවා දෙස බලා කිසි ඇත!

එය ස්ථිතිකව ටයිප් කර ඇත්නම් කුමක් කළ යුතුද?

කේතය ක්‍රියාත්මක වීමට පෙර ආකාරයේ දෝෂයක් විසි වේ. එය අර්ථ නිරූපණය කළද ධාවන කාලයට පෙර එය තවමත් වර්ග පරීක්ෂා කිරීම සිදු කරයි.

එය සම්පාදනය කළේ නම් කුමක් කළ යුතුද?

මෙම elseවාරණ ලකුණු කාලීන පෙර දෙස / පරිවර්තනය කළ නිසා, නමුත් එය ගතිකව එය දෝෂයක් විසි නැහැ ටයිප් කරන නිසා! ගතිකව ටයිප් කළ භාෂා ක්‍රියාත්මක වන තෙක් වර්ග පරීක්ෂා නොකරයි, එම රේඛාව කිසි විටෙකත් ක්‍රියාත්මක නොවේ.


උදාහරණය යන්න

ස්ථිතික, සම්පාදනය

package main

import ("fmt"
)

func silly(a int) {
  if (a > 0) {
      fmt.Println("Hi")
  } else {
      fmt.Println("3" + 5)
  }
}

func main() {
  silly(2)
}

ධාවනය වීමට පෙර වර්ග පරීක්ෂා කරනු ලැබේ (ස්ථිතික) සහ වර්ගයේ දෝෂය වහාම හසු වේ! එකම ප්‍රති .ලයක් ඇති, අර්ථ නිරූපණය කර ඇත්නම්, ධාවන කාලයට පෙර වර්ග පරීක්ෂා කරනු ලැබේ. එය ගතික නම්, සම්පාදනය කිරීමේදී කේතය දෙස බැලුවද එය කිසිදු දෝෂයක් ඇති නොකරයි.


කාර්ය සාධනය

සම්පාදනය කරන ලද භාෂාවක් සංඛ්‍යාත්මකව ටයිප් කර ඇත්නම් (එදිරිව ගතිකව) ධාවන වේලාවේදී වඩා හොඳ කාර්ය සාධනයක් ඇත; වර්ග පිළිබඳ දැනුම යන්ත්‍ර කේත ප්‍රශස්තිකරණයට ඉඩ දෙයි.

ක්‍රියාත්මක කිරීමේදී වර්ග ගතිකව පරීක්ෂා කිරීමට අවශ්‍ය නොවීම නිසා ස්ථිතිකව ටයිප් කරන ලද භාෂාවන් ධාවන වේලාවේදී වඩා හොඳ ක්‍රියාකාරිත්වයක් ඇත (එය ක්‍රියාත්මක වීමට පෙර පරීක්ෂා කරයි).

ඒ හා සමානව, සම්පාදනය කරන ලද භාෂාවන් ධාවන වේලාවේදී වේගවත් බැවින් කේතය දැනටමත් පරිවර්තනය කර ඇති අතර එය මැස්සා මත "අර්ථ නිරූපණය" / පරිවර්තනය කිරීම අවශ්‍ය නොවේ.

සම්පාදනය කරන ලද සහ සංඛ්‍යාත්මකව ටයිප් කරන ලද භාෂා දෙකම පිළිවෙලින් පරිවර්තනය සහ ටයිප් පරීක්ෂා කිරීම සඳහා ධාවනය වීමට පෙර ප්‍රමාදයක් ඇති බව සලකන්න.


තවත් වෙනස්කම්

ස්ථිතික යතුරු ලියනය මඟින් දෝෂ ක්‍රියාත්මක වන්නේ ඒවා සොයා ගැනීම වෙනුවට (දිගු වැඩසටහන් සඳහා විශේෂයෙන් ප්‍රයෝජනවත් වේ). එය වඩාත් "දැඩි" වන්නේ එය ඔබගේ වැඩසටහනේ ඕනෑම තැනක දෝෂ සඳහා ඉඩ නොදෙන අතර බොහෝ විට විචල්‍යයන් වර්ග වෙනස් කිරීමෙන් වලක්වන අතර එය අනපේක්ෂිත දෝෂයන්ගෙන් තවදුරටත් ආරක්ෂා වේ.

num = 2
num = '3' // ERROR

ගතික ටයිප් කිරීම වඩාත් නම්‍යශීලී වන අතර සමහරු එය අගය කරති. එය සාමාන්‍යයෙන් විචල්‍යයන්ට වර්ග වෙනස් කිරීමට ඉඩ සලසයි, එමඟින් අනපේක්ෂිත දෝෂ ඇති විය හැකිය.


" පයිතන් අර්ථකථනය කර ගතිකව ටයිප් කර ඇති නිසා, එය පරිවර්තනය කර එය ක්‍රියාත්මක කරන කේතය පමණක් ටයිප් කරයි " - එය එසේ නොවේ. පයිතන් (අවම වශයෙන් යොමු ක්‍රියාත්මක කිරීම) ඔබගේ සියලු කේත ආනයන වේලාවේදී සම්පාදනය කරයි (ඔබට මොඩියුල ආනයනය කිරීමට පෙර / නැතිව සම්පාදනය කළ හැකිය). සම්පාදකයා විවිධ ප්‍රශස්තිකරණ හඳුන්වා දෙයි (අවම වශයෙන් පයිතන්ගේ ගතික ස්වභාවය ඉඩ දෙන තාක් දුරට).
එලී කෝර්විගෝ

6

ස්ථිතිකව ටයිප් කළ භාෂා : එක් එක් විචල්‍යය සහ ප්‍රකාශනය සම්පාදනය කරන වේලාවේදී දැනටමත් දන්නා කරුණකි.

(ක්‍රියාත්මක int a;විය හැකි විට පූර්ණ සංඛ්‍යා වර්ගයේ අගයන් පමණක් ගත හැක)

උදාහරණ: සී, සී ++, ජාවා

ගතිකව ටයිප් කළ භාෂා : විචල්‍යයන්ට ධාවන වේලාවේදී විවිධ අගයන් ලබා ගත හැකි අතර ඒවායේ වර්ගය ධාවන වේලාවේදී අර්ථ දැක්වේ.

( var a;a හට ධාවන වේලාවේදී ඕනෑම ආකාරයක අගයක් ගත හැකිය)

උදාහරණ: රූබි, පයිතන්.


5

ස්ථිතිකව ටයිප් කළ භාෂා සම්පාදනය කරන වේලාවේදී පරීක්ෂා කරන්න, වර්ගය වෙනස් කළ නොහැක. (යතුරු ලියන අදහස් සමඟ හුරුබුහුටි නොවන්න, නව විචල්‍යයක් / යොමු කිරීමක් සාදනු ලැබේ).

ගතිකව ටයිප් කළ භාෂාවන් ධාවන වේලාවේදී පරීක්ෂා කරන්න සහ විචල්‍ය වේලාව ධාවන වේලාවේදී වෙනස් කළ හැකිය.


4

මිහිරි හා සරල අර්ථ දැක්වීම්, නමුත් අවශ්‍යතාවයට සරිලන පරිදි: ස්ථිතිකව ටයිප් කළ භාෂාවන් එහි මුළු විෂය පථයටම විචල්‍යයකට බන්ධනය කරයි (Seg: SCALA) ගතිකව ටයිප් කළ භාෂා වර්ගය විචල්‍යයක් මගින් නියම කරන ලද සත්‍ය අගයට බැඳේ.


3
  • සංඛ්‍යානමය වශයෙන් ටයිප් කළ භාෂාවක, විචල්‍යයක් සම්පාදනය කරන වේලාවේ දන්නා වර්ගයක් සමඟ සම්බන්ධ වී ඇති අතර, වැඩසටහන වර්ගය ක්‍රියාත්මක කිරීමේදී එම වර්ගය නොවෙනස්ව පවතී. ඒ හා සමානව, විචල්‍යයට ලබා දිය හැක්කේ දන්නා / නිශ්චිත වර්ගයේ උදාහරණයක් වන අගයක් පමණි.
  • ගතිකව ටයිප් කළ භාෂාවක, විචල්‍යයකට කිසිදු වර්ගයක් නොමැති අතර, ක්‍රියාත්මක කිරීමේදී එහි වටිනාකම ඕනෑම හැඩයකින් හා ආකාරයකින් විය හැකිය.

2

ස්ථිතිකව ටයිප් කළ භාෂාවන් වන සී ++, ජාවා සහ පයිතන් වැනි ගතිකව ටයිප් කළ භාෂා වෙනස් වන්නේ විචල්‍යයේ වර්ගය ක්‍රියාත්මක කිරීමේදී පමණි. ස්ථිතිකව ටයිප් කරන ලද භාෂාවන්ට විචල්‍යය සඳහා ස්ථිතික දත්ත වර්ගයක් ඇත, මෙහි දත්ත වර්ගය සම්පාදනය කිරීමේදී පරීක්ෂා කරනු ලැබේ, එබැවින් නිදොස් කිරීම වඩාත් සරල වේ ... නමුත් ගතිකව ටයිප් කළ භාෂාවන් එසේ නොකරයි, දත්ත වර්ගය පරික්ෂා කරන්නේ කුමන වැඩසටහන ක්‍රියාත්මක කරන්නේද යන්නයි. නිදොස් කිරීම ටිකක් අපහසුයි.

එපමණක් නොව ඒවා ඉතා කුඩා වෙනසක් ඇති අතර දැඩි ලෙස ටයිප් කළ හා දුර්වල ලෙස ටයිප් කළ භාෂා සමඟ සම්බන්ධ විය හැකිය . තදින් ටයිප් කළ භාෂාවක් ඔබට එක් වර්ගයක් තවත් වර්ගයක් ලෙස භාවිතා කිරීමට ඉඩ නොදේ. සී සහ සී ++ ... දුර්වල ලෙස ටයිප් කළ භාෂා උදා


2

ස්ථිතික ටයිප් කළ භාෂා (සම්පාදකයා විසින් ක්‍රම ඇමතුම් සහ සම්පාදනය යොමු කරයි):

  • සාමාන්‍යයෙන් වඩා හොඳ කාර්ය සාධනය
  • දෝෂ සම්පාදනය වේගයෙන් සම්පාදනය කරන්න
  • වඩා හොඳ IDE සහාය
  • නිර්වචනය නොකළ දත්ත ආකෘති සමඟ වැඩ කිරීමට සුදුසු නොවේ
  • ආකෘතිය නිර්වචනය නොකළ විට සංවර්ධනයක් ආරම්භ කිරීම දුෂ්කර ය
  • දිගු සම්පාදන කාලය
  • බොහෝ අවස්ථාවලදී තවත් කේත ලිවීමට අවශ්‍ය වේ

ගතික ටයිප් කළ භාෂා (ධාවන වැඩසටහනේ තීරණ):

  • අඩු කාර්ය සාධනය
  • වේගවත් සංවර්ධනය
  • සමහර දෝෂ හඳුනාගත හැක්කේ ධාවන වේලාවේ පසුව පමණි
  • නිර්වචනය නොකළ දත්ත ආකෘති සඳහා හොඳයි (මෙටා ක්‍රමලේඛනය)

2

ස්ථිතිකව ටයිප් කර ඇත

ධාවන කාලයට පෙර වර්ග පරීක්ෂා කරනු ලබන අතර එමඟින් වැරදි කලින් හඳුනාගත හැකිය.

උදාහරණ = c ++

ගතිකව ටයිප් කර ඇත

ක්‍රියාත්මක කිරීමේදී වර්ග පරීක්ෂා කරනු ලැබේ.

උදාහරණ = පයිතන්


2
මෙය වෙනත් පිළිතුරු වලින් තවමත් ආවරණය නොවන කිසිවක් සැබවින්ම එකතු නොකරයි, එසේ ද?
රොබට්

1
ඔව්, නමුත් බොහෝ පිළිතුරු ඉතා පැහැදිලි නැති නිසා මට තේරුම් ගැනීමට පහසු පිළිතුරක් අවශ්‍ය විය.
ඇටිකස් ඩෙනිමොන්ට්

0

ගතිකව ටයිප් කළ භාෂාව, විචල්‍ය වර්ග භාවිතා කළ යුතු දේ ගැන සිතීමකින් තොරව ඇල්ගොරිතම සංකල්ප ඉක්මනින් මූලාකෘතිකරණය කිරීමට උපකාරී වේ (එය සංඛ්‍යාත්මකව ටයිප් කළ ලැන්ගග් ඊ හි අවශ්‍යතාවයකි ).


-15

ස්ථිතික ටයිප් කිරීම: ජාවා සහ ස්කාලා වැනි භාෂා ස්ථිතික ටයිප් කර ඇත.

කේතයක් භාවිතා කිරීමට පෙර විචල්යයන් නිර්වචනය කර ආරම්භ කළ යුතුය.

හිටපු සඳහා. int x; x = 10;

System.out.println (x);

ගතික ටයිප් කිරීම: පර්ල් යනු ගතික ටයිප් කළ භාෂාවකි.

කේත භාවිතා කිරීමට පෙර විචල්‍යයන් ආරම්භ කිරීම අවශ්‍ය නොවේ.

y = 10; කේතයේ පසු කොටසෙහි මෙම විචල්‍යය භාවිතා කරන්න


2
හොඳයි, මෙම පිළිතුර සම්පූර්ණයෙන්ම නිවැරදි නැත. භාෂා දෙකෙහිම, විචල්‍යයන් භාවිතා කිරීමට පෙර ඒවා සම්බන්ධ කළ යුතුය. කෙසේ වෙතත්, ගතිකව ටයිප් කළ භාෂාවලින්, එය භාවිතා කරන වර්ගය අතහැර දැමීමට ඔබට තෝරා ගත හැකිය.
දර්ශනය

ඔබ "විචල්යයන්" යන යෙදුම වැරදි ලෙස භාවිතා කරන බවක් පෙනේ, ඒ වෙනුවට ඔබ "වර්ග" පැවසිය යුතුය.
එමීර්

පර්ල් ස්ථිතිකව ටයිප් කර ඇති බව මම තර්ක කරමි: එයට වර්ග 3 ක් ඇත, පරිමාණ ( $), අරාව ( @) සහ හැෂ් ( %). පර්ල් හි විචල්‍යයක වර්ගය සම්පාදනය කරන වේලාවේදී දන්නා අතර ඉතිරි විචල්‍යයන් ජීවිත කාලය පුරාම පවතිනු ඇත.
CoffeeTableEspresso
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.