මට ආචාර්ය උපාධියක් හෝ වෙනත් ආකාරයක උපාධියක් CS හෝ ගණිතය හෝ වෙනත් කිසිදු ක්ෂේත්රයක් නොමැත. මට ස්කාලා හෝ වෙනත් සමාන භාෂාවක් පිළිබඳ පූර්ව අත්දැකීම් නොමැත. දුරස්ථව සැසඳිය හැකි ආකාරයේ පද්ධති සමඟ මට අත්දැකීම් නොමැත. ඇත්ත වශයෙන්ම, මා හට මතුපිට දැනුමක් ඇති එකම වර්ගයේ පද්ධතියක් පවා ඇති එකම භාෂාව පැස්කල් වන අතර එහි නවීන වර්ගයේ පද්ධතියට හරියටම නොදැනේ. (එය වුවත් කරන්නේ AFAIK එච්චරමයි වෙනත් කිසිදු භාෂාවක් තිබෙනවා, නමුත් මෙහි ඇත්තටම අදාළ නොවන පරාසය වර්ග, ඇත.) වෙනත් භාෂා තුනක් මම දන්නේ කිසිවක් පවා වර්ගයක් පද්ධතිය ඇති, මූලික, Smalltalk හා රතු වේ.
එහෙත්, mapඔබ පළ කළ ශ්රිතයේ අත්සන තේරුම් ගැනීමට මට කිසිඳු කරදරයක් නැත . එය mapමා මෙතෙක් දැක ඇති අනෙක් සෑම භාෂාවකම ඇති එකම අත්සන මෙන් පෙනේ. වෙනස නම් මෙම අනුවාදය වඩාත් ජනක ය. එය හස්කල්ට වඩා C ++ STL දෙයක් මෙන් පෙනේ. විශේෂයෙන්, එය කොන්ක්රීට් එකතු කිරීමේ වර්ගයෙන් IterableLikeවියුක්ත වන්නේ තර්කය පමණක් අවශ්ය වීමෙන් පමණක් වන අතර , කොන්ක්රීට් නැවත පැමිණීමේ වර්ගයෙන් වියුක්ත වන්නේ එම ප්රති result ල අගයන් එකතුවෙන් යමක් ගොඩනගා ගත හැකි ව්යංග පරිවර්තන ශ්රිතයක් පැවතීම පමණි. ඔව්, එය තරමක් සංකීර්ණ ය, නමුත් එය සැබවින්ම සාමාන්ය ක්රමලේඛනයේ සාමාන්ය පරමාදර්ශයේ ප්රකාශනයක් පමණි: ඔබට ඇත්ත වශයෙන්ම අවශ්ය නොවන කිසිවක් උපකල්පනය නොකරන්න.
මේ අවස්ථාවේ දී, mapඇත්තටම නැත අවශ්ය ලැයිස්තුවක් විය කිරීමට රැස් කිරීම, හෝ නියෝග හෝ sortable හෝ මේ වගේ දෙයක් වීම කරමින්. mapසැලකිලිමත් වන එකම දෙය නම් , එකතුවේ සියලුම අංග වෙත එකින් එක ප්රවේශ විය හැකි නමුත් නිශ්චිත අනුපිළිවෙලකට නොවේ. එහි ප්රති collection ලයක් ලෙස ලැබෙන එකතුව කුමක්දැයි දැන ගැනීමට අවශ්ය නැත, එයට අවශ්ය වන්නේ එය ගොඩනඟන්නේ කෙසේද යන්න පමණි. ඉතින්, එහි වර්ගයේ අත්සන අවශ්ය වන්නේ එයයි.
ඉතින්, ඒ වෙනුවට
map :: (a → b) → [a] → [b]
සාම්ප්රදායික වර්ගයේ අත්සන mapවන එය සාමාන්යකරණය කර ඇත්තේ කොන්ක්රීට් අවශ්ය Listනොව IterableLikeදත්ත ව්යුහයක් පමණි
map :: (IterableLike i, IterableLike j) ⇒ (a → b) → i → j
එය තවදුරටත් සාමාන්යකරණය කරනු ලබන්නේ පරිශීලකයාට අවශ්ය ඕනෑම දත්ත ව්යුහයකට ප්රති result ලය පරිවර්තනය කළ හැකි ශ්රිතයක් පැවතීම පමණි .
map :: IterableLike i ⇒ (a → b) → i → ([b] → c) → c
සින්ටැක්ස් ටිකක් ක්ලන්කියර් බව මම පිළිගනිමි, නමුත් අර්ථ නිරූපණය එක හා සමානයි. මූලික වශයෙන්, එය ආරම්භ වන්නේ
def map[B](f: (A) ⇒ B): List[B]
සඳහා සාම්ප්රදායික අත්සන mapඑයයි. (ස්කලා හි වස්තු-නැඹුරු ස්වභාවය නිසා ආදාන ලැයිස්තු පරාමිතිය අතුරුදහන් වන්නේ කෙසේදැයි බලන්න, මන්ද එය දැන් තනි යැවීමේ OO පද්ධතියක සෑම ක්රමයක්ම ඇති ව්යංග ග්රාහක පරාමිතියයි.) ඉන්පසු එය කොන්ක්රීට් Listසිට වඩාත් සාමාන්යය දක්වා සාමාන්යකරණය වියIterableLike
def map[B](f: (A) ⇒ B): IterableLike[B]
දැන්, මේක ද විස්ථාපනය IterableLikeකරන කාර්යය සමඟ ප්රතිඵලයක් එකතුව නිෂ්පාදනය ඇත්තටම කිසිම දෙයක් ගැන, හොඳින්,.
def map[B, That](f: A ⇒ B)(implicit bf: CanBuildFrom[Repr, B, That]): That
මම ඇත්තටම විශ්වාස කරන දේ තේරුම් ගැනීමට එතරම් අපහසු නැත. ඔබට අවශ්ය බුද්ධිමය මෙවලම් කිහිපයක් පමණි:
- ඔබ (දළ වශයෙන්) කුමක්දැයි
mapදැනගත යුතුය. ක්රමයේ නමක් නොමැතිව ඔබ ටයිප් අත්සන පමණක් ලබා දුන්නේ නම් , සිදුවන්නේ කුමක්දැයි සොයා ගැනීම වඩා දුෂ්කර වනු ඇති බව මම පිළිගනිමි. කළ යුතු දේ ඔබ දැනටමත් දන්නා නිසාත් map, එහි අත්සන කුමක් විය යුතු දැයි ඔබ දන්නා නිසාත්, ඔබට ඉක්මනින් අත්සන පරිලෝකනය කර විෂමතා කෙරෙහි අවධානය යොමු කළ හැකිය, "මෙය mapකාර්යයන් දෙකක් තර්ක ලෙස ගන්නේ ඇයි , එකක් නොව?"
- අත්සන වර්ගය කියවීමට ඔබට හැකි විය යුතුය. ඔබ මීට පෙර කවදාවත් දැක නැති වුවද, මෙය බෙහෙවින් පහසු විය යුතුය, මන්ද එය ඇත්ත වශයෙන්ම ඔබ දැනටමත් වෙනත් භාෂාවලින් දන්නා ආකාරයේ සින්ටැක්ස් වල මිශ්රණයක් පමණක් වන බැවිනි: VB.NET පරාමිතික බහුමාපකය සඳහා වර්ග වරහන් භාවිතා කරයි, සහ ඊතලයක් භාවිතා කිරීමට දැක්වේ ආපසු වර්ගය සහ නම සහ වර්ගය වෙන් කිරීම සඳහා මහා බඩවැලක් ඇත්ත වශයෙන්ම සම්මතයයි.
- සාමාන්ය ක්රමලේඛනය යනු කුමක්දැයි ඔබ දළ වශයෙන් දැනගත යුතුය. (කුමන නොවේ බව එය මූලික වශයෙන් සියලු නාමය තුල සඳහන්ව තිබීම, තියෙන්නේ සිට, වෙහෙස මහන්සි වී හොයාගන්න: එය ප්රායෝගික පමණක් Generic බලපත්රය යටතේ අවසර ලබා ඇත විලාසිතා වැඩසටහන් ඇති).
මෙම තිදෙනාගෙන් කිසිවෙකු කිසිදු වෘත්තීය හෝ විනෝදාංශ වැඩසටහන්කරුවෙකුට බරපතල හිසරදයක් ලබා නොදිය යුතුය. mapපසුගිය අවුරුදු 50 තුළ නිර්මාණය කරන ලද සෑම භාෂාවකම සම්මත කාර්යයක් වී ඇති අතර, විවිධ භාෂාවන්ට විවිධ සින්ටැක්ස් ඇති බව HTML සහ CSS සමඟ වෙබ් අඩවියක් නිර්මාණය කර ඇති ඕනෑම කෙනෙකුට පැහැදිලිව පෙනෙන අතර ඔබට දුරස්ථ වැඩසටහන්කරණයකට දායක විය නොහැක. සාමාන්ය ක්රමලේඛනයේ ගුණාංග පැහැදිලි කරමින් ශාන්ත ස්ටෙපනොව් දේවස්ථානයේ සිට කරදරකාරී සී ++ රසිකයින් නොමැතිව අදාළ තැපැල් ලැයිස්තුව.
ඔව්, Scala වේ සංකීර්ණය. ඔව්, ස්කලා සතුව මිනිසා දන්නා අති නවීන ආකාරයේ පද්ධති වලින් එකක් වන අතර, හස්කල්, මිරැන්ඩා, පිරිසිදු හෝ සුළි සුළඟ වැනි භාෂාවන් සමඟ තරඟකාරී හා අභිබවා යයි. නමුත් සංකීර්ණත්වය යනු ක්රමලේඛන භාෂාවක සාර්ථකත්වයට එරෙහි තර්කයක් නම්, C ++ බොහෝ කලකට පෙර මිය යනු ඇති අතර අප සියල්ලන්ම යෝජනා ක්රමය ලියනු ඇත. ස්කාලා සාර්ථක නොවීමට හේතු රාශියක් ඇත, නමුත් යතුරුපුවරුව ඉදිරිපිට වාඩි වීමට පෙර ක්රමලේඛකයන්ට ඔවුන්ගේ මොළය ක්රියාත්මක කිරීමට කරදර විය නොහැකි වීම බොහෝ විට ප්රධාන එකක් නොවනු ඇත.