නව ක්රමලේඛන භාෂා ගතිකව ටයිප් කර ඇති බව මට බොහෝ දේ අසන්නට ලැබේ, නමුත් භාෂාවක් ගතිකව ටයිප් කර එදිරිව එදිරිව සංඛ්යාත්මකව ටයිප් කර ඇති බව පවසන විට ඇත්ත වශයෙන්ම එයින් අදහස් කරන්නේ කුමක්ද?
නව ක්රමලේඛන භාෂා ගතිකව ටයිප් කර ඇති බව මට බොහෝ දේ අසන්නට ලැබේ, නමුත් භාෂාවක් ගතිකව ටයිප් කර එදිරිව එදිරිව සංඛ්යාත්මකව ටයිප් කර ඇති බව පවසන විට ඇත්ත වශයෙන්ම එයින් අදහස් කරන්නේ කුමක්ද?
Answers:
සම්පාදනය කරන වේලාවේ විචල්යයක වර්ගය දන්නේ නම් භාෂාවක් සංඛ්යාත්මකව ටයිප් කරනු ලැබේ. සමහර භාෂාවන් සඳහා මෙයින් අදහස් කරන්නේ ඔබ ක්රමලේඛකයා ලෙස එක් එක් විචල්යය කුමන වර්ගයක්ද යන්න සඳහන් කළ යුතු බවයි (උදා: ජාවා, සී, සී ++); වෙනත් භාෂා යම් ආකාරයක ලබා වර්ගය, දෘෂ්යක , විචල්ය වර්ගය පිණස වර්ගය පද්ධතියේ හැකියාව (: OCaml, Haskell, Scala, Kotlin උදා)
මෙහි ඇති ප්රධාන වාසිය නම්, සියලු වර්ගවල පරීක්ෂාවන් සම්පාදකයාට කළ හැකි අතර, එබැවින් ඉතා සුළු දෝෂ රාශියක් මුල් අවධියේදී හසු වේ.
උදාහරණ: සී, සී ++, ජාවා, රස්ට්, ගෝ, ස්කාලා
වර්ගය ධාවන කාල අගයන් සමඟ සම්බන්ධ වී ඇත්නම් විචල්යයන් / ක්ෂේත්ර / යනාදිය නම් භාෂාවක් ගතිකව ටයිප් කරනු ලැබේ. මෙම ක්රම සම්පාදකට ලෙස ඔබ වර්ග සෑම අවස්ථාවකදීම නියම කිරීමට (සමග statically-ටයිප් භාෂාවක් භාවිතා මිස නැති නිසා ටිකක් වඩා ඉක්මනින් ලියන්න පුළුවන් බව මාර්ගයෙන් වර්ගය, දෘෂ්යක ).
උදාහරණ: පර්ල්, රූබි, පයිතන්, පීඑච්පී, ජාවාස්ක්රිප්ට්
බොහෝ ස්ක්රිප්ටින් භාෂාවන්ට මෙම ලක්ෂණය ඇත, කෙසේ වෙතත් ස්ථිතික වර්ග පරීක්ෂා කිරීම සඳහා සම්පාදකයෙකු නොමැති නමුත්, පරිවර්තකයා විචල්යයක වර්ගය වැරදි ලෙස අර්ථකථනය කිරීම නිසා ඇති වූ දෝෂයක් ඔබ සොයනු ඇත. වාසනාවකට මෙන්, ස්ක්රිප්ට් කුඩා වන බැවින් දෝෂ සැඟවීමට බොහෝ ස්ථාන නොමැත.
බොහෝ ගතිකව ටයිප් කළ භාෂාවන් ඔබට වර්ග තොරතුරු සැපයීමට ඉඩ දෙයි, නමුත් එය අවශ්ය නොවේ. දැනට සංවර්ධනය වෙමින් පවතින එක් භාෂාවක් වන රාස්කල් , දෙමුහුන් ප්රවේශයක් ගන්නා අතර ශ්රිත තුළ ගතික ටයිප් කිරීමට ඉඩ ලබා දෙන නමුත් ශ්රිත අත්සන සඳහා ස්ථිතික ටයිප් කිරීම බලාත්මක කරයි.
ස්ථිතිකව ටයිප් කරන ලද ක්රමලේඛන භාෂාවන් ටයිප් පරීක්ෂා කරයි (එනම් වර්ගවල අවහිරතා සත්යාපනය කිරීමේ සහ බලාත්මක කිරීමේ ක්රියාවලිය) ධාවන කාලයට වඩා වෙනස්ව සංයුක්ත වේලාවේදී කරයි.
ගතිකව ටයිප් කළ ක්රමලේඛන භාෂා ටයිප් චෙක්පත් වේ සම්පාදනය කරන වේලාවට වඩා ධාවනය වන වේලාවේදී කරයි.
ස්ථිතිකව ටයිප් කළ භාෂා සඳහා උදාහරණ: - ජාවා, සී, සී ++
ගතිකව ටයිප් කළ භාෂා සඳහා උදාහරණ නම්: - පර්ල්, රූබි, පයිතන්, පීඑච්පී, ජාවාස්ක්රිප්ට්
පයිතන් (ගතිකව ටයිප් කළ) සහ ගෝ (ස්ථිතිකව ටයිප් කළ) වර්ගයේ දෝෂයක් හසුරුවන ආකාරය හා සැසඳීමේ උදාහරණය මෙන්න:
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)
runhaskell
උදාහරණයක් ලෙස හස්කල් සමඟ අර්ථ නිරූපණය කළ හැකිය .
සරලව මේ ආකාරයට තබන්න: සංඛ්යාත්මකව ටයිප් කළ භාෂා විචල්යයන්ගේ වර්ග ස්ථිතික වේ වන අතර එයින් අදහස් වන්නේ ඔබ සැකසූ පසු ඔබට එය වෙනස් කළ නොහැකි බවයි. එයට හේතුව යතුරු ලියනය එය සඳහන් කරන අගයට වඩා විචල්යය සමඟ සම්බන්ධ වීමයි.
උදාහරණයක් ලෙස ජාවා හි:
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 # හි ජනක විද්යාව සහ ගතික පුස්තකාල, සහ ගතික භාෂාවන්ට වැඩි වර්ග පරික්ෂා කිරීම, උදා. ඉල්ලුම.
තාක්ෂණය තෝරා ගැනීමේදී දෙපාර්ශ්වයටම අනෙකට වඩා සහජයෙන්ම උසස් බවක් නැත. ඔබට වැඩි පාලනයක් ආරම්භ කිරීමට හෝ නම්යශීලී වීමට අවශ්යද යන්න මනාපයක් පමණි. කාර්යය සඳහා නිවැරදි මෙවලමක් තෝරාගෙන ස්විචයක් සලකා බැලීමට පෙර ප්රතිවිරුද්ධ දේ අනුව ලබා ගත හැකි දේ පරීක්ෂා කිරීමට වග බලා ගන්න.
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 ාති සහෝදරයන් හා සසඳන විට, ප්රභව කේතයෙහි “සම්පාදක-කාල” චෙක්පත් අඩු කරයි (නමුත් උදාහරණයක් ලෙස, වැඩසටහන කෘතිමව නිවැරදි දැයි පරීක්ෂා කරනු ඇත). ගතික තොරතුරු මෙන්ම සම්පාදනය කිරීමේදී තිබූ ඕනෑම තොරතුරක් භාවිතා කළ හැකි බැවින් ධාවන කාල චෙක්පත් වඩාත් නවීන විය හැකිය. අනෙක් අතට, ධාවන කාල චෙක්පත් මඟින් නිශ්චිතවම වැඩසටහන ක්රියාත්මක කිරීමේදී කොන්දේසි පවතින බව පමණක් ප්රකාශ වන අතර වැඩසටහනේ සෑම ක්රියාවක් සඳහාම මෙම චෙක්පත් පුනරාවර්තනය වේ.
ගතිකව ටයිප් කළ භාෂාවල සංවර්ධනයට බොහෝ විට ඒකක පරීක්ෂණ වැනි ක්රමලේඛන භාවිතයන් සහාය වේ. වෘත්තීය මෘදුකාංග සංවර්ධනයේ දී අත්හදා බැලීම ප්රධාන භාවිතයක් වන අතර ගතිකව ටයිප් කරන ලද භාෂාවල විශේෂයෙන් වැදගත් වේ. ප්රායෝගිකව, නිවැරදි ක්රමලේඛන ක්රියාකාරිත්වය සහතික කිරීම සඳහා කරන ලද පරීක්ෂණයට ස්ථිතික වර්ග පරීක්ෂාවට වඩා පුළුල් පරාසයක දෝෂ හඳුනාගත හැකි නමුත් අනෙක් අතට පරීක්ෂණ සහ ස්ථිතික වර්ග පරීක්ෂා කිරීම යන දෙකම හඳුනාගත හැකි දෝෂ සඳහා පුළුල් ලෙස සෙවිය නොහැක. මෘදුකාංග සෑදීමේ චක්රයට පරීක්ෂණ ඇතුළත් කළ හැකි අතර, එය “සම්පාදක කාල පරීක්ෂාවක්” ලෙස සිතිය හැකිය, එමඟින් වැඩසටහන් පරිශීලකයාට එවැනි පරීක්ෂණ අතින් ක්රියාත්මක කිරීමට සිදු නොවේ.
යොමුව
- පියර්ස්, බෙන්ජමින් (2002). වර්ග සහ ක්රමලේඛන භාෂා. MIT මුද්රණාලය. ISBN 0-262-16209-1.
myObject[remoteDataName]
. එවිට එය කුමන දේපලක් තෝරා ගන්නේද යන්න හෝ එය වලංගු දේපලක් වුවද දැන ගැනීමට ක්රමයක් නොමැත.
"ගතිකව ටයිප්" යන පාරිභාෂිතය අවාසනාවකට නොමඟ යවන සුළුය. සියලුම භාෂා සංඛ්යාත්මකව ටයිප් කර ඇති අතර වර්ග ප්රකාශනවල ගුණාංග වේ (සමහරු සිතන පරිදි අගයන් නොවේ). කෙසේ වෙතත්, සමහර භාෂාවන්ට ඇත්තේ එක් වර්ගයක් පමණි. මේවා ඒක-ටයිප් කළ භාෂා ලෙස හැඳින්වේ. එවැනි භාෂාවක එක් උදාහරණයක් වන්නේ ටයිප් නොකළ ලැම්බඩා කැල්කියුලස් ය.
ටයිප් නොකළ ලැම්බඩා කැල්කියුලස් හි, සියලු පද ලැම්බඩා පද වන අතර, යම් යෙදුමක් මත කළ හැකි එකම මෙහෙයුම එය වෙනත් යෙදුමකට යෙදීමයි. එබැවින් සියලු මෙහෙයුම් සැමවිටම අසීමිත පුනරාවර්තනයක් හෝ ලැම්බඩා යෙදුමක් ඇති කරයි, නමුත් කිසි විටෙකත් දෝෂයක් සං signal ා නොකරයි.
කෙසේ වෙතත්, අප විසින් ටයිප් නොකළ ලැම්බඩා කැල්කියුලස් ප්රාථමික සංඛ්යා හා ගණිතමය මෙහෙයුම් වලින් වැඩි දියුණු කිරීමට නම්, එවිට අපට විකාර මෙහෙයුම් සිදු කළ හැකිය, එනම් ලැම්බඩා පද දෙකක් එකතු කිරීම : (λx.x) + (λy.y)
. කෙනෙකුට තර්ක කළ හැක්කේ මෙය සිදු වූ විට දෝෂයක් සං signal ා කිරීම පමණි, නමුත් මෙය කිරීමට නම්, සෑම අගයක්ම ලැම්බඩා පදය හෝ අංකයක්ද යන්න දැක්වෙන දර්ශකයක් සමඟ ටැග් කළ යුතුය. එකතු කිරීමේ ක්රියාකරු පසුව තර්ක දෙකම සංඛ්යා ලෙස ටැග් කර ඇත්දැයි පරීක්ෂා කරනු ඇති අතර ඒවා එසේ නොවේ නම් දෝෂයක් සං signal ා කරයි. මෙම ටැග් වර්ග වර්ග නොවන බව සලකන්න , මන්ද වර්ග යනු වැඩසටහන් වල ගුණාංග මිස එම වැඩසටහන් මඟින් නිපදවන අගයන් නොවේ.
මෙය කරන ඒක-ටයිප් කළ භාෂාවක් ගතිකව ටයිප් කර ඇත.
ජාවාස්ක්රිප්ට්, පයිතන් සහ රූබි වැනි භාෂා සියල්ලම යතුරු ලියනය කර ඇත. නැවතත්, typeof
ජාවාස්ක්රිප්ට් හි ක්රියාකරුට සහ type
පයිතන් හි ක්රියාකාරිත්වයට නොමඟ යවන නම් ඇත; ඔවුන් මෙහෙයුම් වර්ග හා සම්බන්ධ ටැග් ආපසු ලබා දෙයි, ඒවායේ වර්ග නොවේ. ඒ හා සමානව, dynamic_cast
C ++ සහ instanceof
ජාවා නැහැ නැහැ වර්ගය චෙක්පත් කරන්න.
"ප්රභව කේතය පරිවර්තනය කළ විට"
"වර්ග පරීක්ෂා කළ විට"
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
ගතික ටයිප් කිරීම වඩාත් නම්යශීලී වන අතර සමහරු එය අගය කරති. එය සාමාන්යයෙන් විචල්යයන්ට වර්ග වෙනස් කිරීමට ඉඩ සලසයි, එමඟින් අනපේක්ෂිත දෝෂ ඇති විය හැකිය.
ස්ථිතිකව ටයිප් කළ භාෂා : එක් එක් විචල්යය සහ ප්රකාශනය සම්පාදනය කරන වේලාවේදී දැනටමත් දන්නා කරුණකි.
(ක්රියාත්මක int a;
විය හැකි විට පූර්ණ සංඛ්යා වර්ගයේ අගයන් පමණක් ගත හැක)
උදාහරණ: සී, සී ++, ජාවා
ගතිකව ටයිප් කළ භාෂා : විචල්යයන්ට ධාවන වේලාවේදී විවිධ අගයන් ලබා ගත හැකි අතර ඒවායේ වර්ගය ධාවන වේලාවේදී අර්ථ දැක්වේ.
( var a;
a හට ධාවන වේලාවේදී ඕනෑම ආකාරයක අගයක් ගත හැකිය)
උදාහරණ: රූබි, පයිතන්.
ස්ථිතිකව ටයිප් කළ භාෂා සම්පාදනය කරන වේලාවේදී පරීක්ෂා කරන්න, වර්ගය වෙනස් කළ නොහැක. (යතුරු ලියන අදහස් සමඟ හුරුබුහුටි නොවන්න, නව විචල්යයක් / යොමු කිරීමක් සාදනු ලැබේ).
ගතිකව ටයිප් කළ භාෂාවන් ධාවන වේලාවේදී පරීක්ෂා කරන්න සහ විචල්ය වේලාව ධාවන වේලාවේදී වෙනස් කළ හැකිය.
මිහිරි හා සරල අර්ථ දැක්වීම්, නමුත් අවශ්යතාවයට සරිලන පරිදි: ස්ථිතිකව ටයිප් කළ භාෂාවන් එහි මුළු විෂය පථයටම විචල්යයකට බන්ධනය කරයි (Seg: SCALA) ගතිකව ටයිප් කළ භාෂා වර්ගය විචල්යයක් මගින් නියම කරන ලද සත්ය අගයට බැඳේ.
ස්ථිතිකව ටයිප් කළ භාෂාවන් වන සී ++, ජාවා සහ පයිතන් වැනි ගතිකව ටයිප් කළ භාෂා වෙනස් වන්නේ විචල්යයේ වර්ගය ක්රියාත්මක කිරීමේදී පමණි. ස්ථිතිකව ටයිප් කරන ලද භාෂාවන්ට විචල්යය සඳහා ස්ථිතික දත්ත වර්ගයක් ඇත, මෙහි දත්ත වර්ගය සම්පාදනය කිරීමේදී පරීක්ෂා කරනු ලැබේ, එබැවින් නිදොස් කිරීම වඩාත් සරල වේ ... නමුත් ගතිකව ටයිප් කළ භාෂාවන් එසේ නොකරයි, දත්ත වර්ගය පරික්ෂා කරන්නේ කුමන වැඩසටහන ක්රියාත්මක කරන්නේද යන්නයි. නිදොස් කිරීම ටිකක් අපහසුයි.
එපමණක් නොව ඒවා ඉතා කුඩා වෙනසක් ඇති අතර දැඩි ලෙස ටයිප් කළ හා දුර්වල ලෙස ටයිප් කළ භාෂා සමඟ සම්බන්ධ විය හැකිය . තදින් ටයිප් කළ භාෂාවක් ඔබට එක් වර්ගයක් තවත් වර්ගයක් ලෙස භාවිතා කිරීමට ඉඩ නොදේ. සී සහ සී ++ ... දුර්වල ලෙස ටයිප් කළ භාෂා උදා
ස්ථිතික ටයිප් කළ භාෂා (සම්පාදකයා විසින් ක්රම ඇමතුම් සහ සම්පාදනය යොමු කරයි):
ගතික ටයිප් කළ භාෂා (ධාවන වැඩසටහනේ තීරණ):
ස්ථිතිකව ටයිප් කර ඇත
ධාවන කාලයට පෙර වර්ග පරීක්ෂා කරනු ලබන අතර එමඟින් වැරදි කලින් හඳුනාගත හැකිය.
උදාහරණ = c ++
ගතිකව ටයිප් කර ඇත
ක්රියාත්මක කිරීමේදී වර්ග පරීක්ෂා කරනු ලැබේ.
උදාහරණ = පයිතන්
ගතිකව ටයිප් කළ භාෂාව, විචල්ය වර්ග භාවිතා කළ යුතු දේ ගැන සිතීමකින් තොරව ඇල්ගොරිතම සංකල්ප ඉක්මනින් මූලාකෘතිකරණය කිරීමට උපකාරී වේ (එය සංඛ්යාත්මකව ටයිප් කළ ලැන්ගග් ඊ හි අවශ්යතාවයකි ).
ස්ථිතික ටයිප් කිරීම: ජාවා සහ ස්කාලා වැනි භාෂා ස්ථිතික ටයිප් කර ඇත.
කේතයක් භාවිතා කිරීමට පෙර විචල්යයන් නිර්වචනය කර ආරම්භ කළ යුතුය.
හිටපු සඳහා. int x; x = 10;
System.out.println (x);
ගතික ටයිප් කිරීම: පර්ල් යනු ගතික ටයිප් කළ භාෂාවකි.
කේත භාවිතා කිරීමට පෙර විචල්යයන් ආරම්භ කිරීම අවශ්ය නොවේ.
y = 10; කේතයේ පසු කොටසෙහි මෙම විචල්යය භාවිතා කරන්න
$
), අරාව ( @
) සහ හැෂ් ( %
). පර්ල් හි විචල්යයක වර්ගය සම්පාදනය කරන වේලාවේදී දන්නා අතර ඉතිරි විචල්යයන් ජීවිත කාලය පුරාම පවතිනු ඇත.