මැජික් නූල් වල ඇති වරද කුමක්ද?


180

පළපුරුදු මෘදුකාංග සංවර්ධකයෙකු ලෙස මම මැජික් නූල් වළක්වා ගැනීමට ඉගෙන ගෙන ඇත්තෙමි.

මගේ ගැටලුව නම්, මම ඒවා භාවිතා කර මෙතරම් දීර් is කාලයක් පැවතීම, එයට හේතු බොහොමයක් මට අමතක වී ඇත. එහි ප්‍රති experience ලයක් වශයෙන්, මගේ අත්දැකීම් අඩු සගයන්ට ඔවුන් ගැටලුවක් වන්නේ මන්දැයි පැහැදිලි කිරීමට මට ගැටලුවක් තිබේ.

ඒවා වළක්වා ගැනීමට ඇති වෛෂයික හේතු මොනවාද? ඔවුන් ඇති කරන ගැටළු මොනවාද?


39
මැජික් නූලක් යනු කුමක්ද? මැජික් අංක හා සමාන දෙයක්ද ?
ලයිව්

14
A ලයිව්: ඒවා මැජික් අංකවලට සමානයි, ඔව්. මම ඩිවික්.කොම් / මැජික්- ස්ට්‍රින්ග්ස් හි අර්ථ දැක්වීමට කැමතියි : "මැජික් නූල් යනු යෙදුම් කේත තුළ කෙලින්ම නියම කර ඇති නූල් අගයන් වන අතර එය යෙදුමේ හැසිරීමට බලපෑමක් ඇති කරයි." (දී ඇති අර්ථ en.wikipedia.org/wiki/Magic_string මම සියලු දී සිතේ ඇති දේ නොවේ)
Kramii

18
මෙය විහිළුවක් වන අතර මම පිළිකුල් කිරීමට ඉගෙන ගතිමි ... පසුව මගේ කනිෂ් ors යන් ඒත්තු ගැන්වීමට මට කුමන තර්ක භාවිතා කළ හැකිද ... කිසිදා නිම නොවන කතාව :-). මම "ඒත්තු ගැන්වීමට" උත්සාහ නොකරමි, මම තනිවම ඉගෙන ගැනීමට ඉඩ දෙමි. ඔබේම අත්දැකීමෙන් ලබාගත් පාඩමක් / අදහසක් හැර අන් කිසිවක් නැත. ඔබ කිරීමට උත්සාහ කරන්නේ ඉගැන්වීමයි . ඔබට ලෙමින්ග්ස් කණ්ඩායමක් අවශ්‍ය නම් මිස එය නොකරන්න.
ලයිව්

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

6
@DavidArno, එනම් හරියටම ඔහු මේ ප්රශ්නය අහනවා විසින් කරන්නේ දේ.
user56834

Answers:


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

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

  3. යතුරු ලියනය බරපතල දෝෂ බවට පත්විය හැකිය. ඔබට ශ්‍රිතයක් තිබේ නම්:

    func(string foo) {
        if (foo == "bar") {
            // do something
        }
    }
    

    යමෙක් අහම්බෙන් ටයිප් කරයි:

    func("barr");
    

    මෙය වඩාත් දුර්ලභ හෝ වඩාත් සංකීර්ණ නූලක් වේ, විශේෂයෙන් ඔබට ව්‍යාපෘතියේ මව් භාෂාව නොදන්නා ක්‍රමලේඛකයන් සිටී නම්.

  4. මැජික් නූල් කලාතුරකින් ස්වයං ලේඛනගත කිරීමකි. ඔබ එක් නූලක් දුටුවහොත්, එම නූලට විය හැකි / විය යුතු දේ ගැන කිසිවක් ඔබට නොකියයි. ඔබ නිවැරදි නූල තෝරාගෙන ඇති බවට වග බලා ගැනීම සඳහා ඔබ ක්‍රියාත්මක කිරීම පිළිබඳව සොයා බැලිය යුතුය.

    එවැනි ක්‍රියාවට නැංවීම කාන්දු වන අතර , ලිවිය යුතු දේ තේරුම් ගැනීමට බාහිර ලියකියවිලි හෝ කේතයට ප්‍රවේශය අවශ්‍ය වේ, විශේෂයෙන් එය අක්ෂර-පරිපූර්ණ විය යුතු බැවින් (3 වන කරුණ මෙන්).

  5. IDE වල "string string" ශ්‍රිතයන්ගෙන් කෙටි, රටාවට සහාය වන මෙවලම් කුඩා සංඛ්‍යාවක් ඇත.

  6. ඔබට එකම මැජික් නූලක් ස්ථාන දෙකක අහම්බෙන් භාවිතා කළ හැකිය, ඒවා ඇත්ත වශයෙන්ම වෙනස් දේවල් වන විට, ඔබ සොයා & ප්‍රතිස්ථාපනය කර දෙකම වෙනස් කළහොත්, ඉන් එකක් කැඩී බිඳී යා හැක.


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

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

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

31
මම දැක ඇති එක් විශාල එකක් වන්නේ සංඛ්‍යා තරම් ප්‍රමාණයක් නොව නූල් සමඟ සිදුවිය හැකි එකකි, ඔබට එකම අගයක් සහිත මැජික් අගයන් දෙකක් ඇති විට. එවිට ඒවායින් එකක් වෙනස් වේ. දැන් ඔබ කේත හරහා යන්නේ පැරණි අගය නව අගයට වෙනස් කිරීම වන අතර එය තනිවම ක්‍රියාත්මක වන නමුත් ඔබ වැරදි අගයන් වෙනස් නොකරන බවට වග බලා ගැනීම සඳහා අමතර වැඩද කරයි. නියත විචල්‍යයන් සමඟ, ඔබට එය අතින් කළ යුතු නොවේ, නමුත් ඔබ වැරදි දේ වෙනස් කර ඇති බවට කරදර නොවන්න.
corsiKa

36
@ යෝගු මම තව දුරටත් තර්ක කරන්නේ නූල් වචනාර්ථයේ අගය සම්පාදනය කරන වේලාවේදී පරීක්ෂා කරන්නේ නම් එය මැජික් නූලක් නොවන බවයි. එම අවස්ථාවේදී එය විහිලු ආකාරයකින් ලිවීමට සිදුවන සාමාන්‍ය සංයුක්ත / එනුම් අගයක් පමණි. එම ඉදිරිදර්ශනය අනුව, මම ඇත්ත වශයෙන්ම තර්ක කරන්නේ ඔබේ ප්‍රකාශය ඇත්ත වශයෙන්ම අර්ඩ්රික්ගේ කරුණු ප්‍රතික්ෂේප කරනවාට වඩා සහාය දෙන බවයි.
GrandOpener

89

අනෙක් පිළිතුරු ග්‍රහණය කර ඇති දේවල සමුළුව “මැජික් සාරධර්ම” නරක යැයි නොව ඒවා විය යුතුය:

  1. නියතයන් ලෙස හඳුනාගත හැකි ලෙස අර්ථ දක්වා ඇත;
  2. අර්ථ දක්වා ඇත්තේ ඔවුන්ගේ සමස්ත භාවිත වසම තුළ එක් වරක් පමණි (වාස්තු විද්‍යාත්මකව හැකි නම්);
  3. ඒවා කෙසේ හෝ සම්බන්ධ වන නියත සමූහයක් සාදන්නේ නම් එකට අර්ථ දැක්වේ;
  4. ඒවා භාවිතා කරන යෙදුමේ සාමාන්‍ය මට්ටමේ සුදුසු මට්ටමක අර්ථ දක්වා ඇත; හා
  5. නුසුදුසු සන්දර්භයන් තුළ ඒවායේ භාවිතය සීමා කිරීම සඳහා අර්ථ දක්වා ඇත (උදා: පරීක්ෂා කිරීම ටයිප් කිරීමට සුදුසු).

පිළිගත හැකි “නියතයන්” “මැජික් අගයන්ගෙන්” වෙන්කර හඳුනාගත හැක්කේ මෙම නීතිවලින් එකක් හෝ කිහිපයක් උල්ලං is නය කිරීමකි.

හොඳින් භාවිතා කළ විට නියතයන් අපගේ කේතයේ ඇතැම් මූලධර්ම ප්‍රකාශ කිරීමට ඉඩ දෙයි.

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

ඉහළ මට්ටමේ භාෂාවන්ට නියතයන් භාවිතා කළ යුතු පහළ මට්ටමේ භාෂාවල රටා සඳහා ඉදිකිරීම් ඇත. එකම රටා ඉහළ මට්ටමේ භාෂාවෙන් ද භාවිතා කළ හැකි නමුත් එසේ නොවිය යුතුය.

නමුත් එය සියලු තත්වයන් පිළිබඳ හැඟීමක් සහ විසඳුමක් කෙබඳු විය යුතුද යන්න මත පදනම් වූ විශේෂ expert විනිශ්චයක් විය හැකි අතර, එම විනිශ්චය සාධාරණීකරණය කරන්නේ කෙසේද යන්න සන්දර්භය මත බෙහෙවින් රඳා පවතී. ඇත්ත වශයෙන්ම එය කිසියම් පොදු මූලධර්මයක් අනුව යුක්ති සහගත නොවිය හැකිය, “මට මේ වන විටත් මේ ආකාරයේ වැඩ දැකීමට තරම් වයසයි, මට හුරුපුරුදු, වඩා හොඳින් කර ඇත”!

සංස්කරණය කරන්න: එක් සංස්කරණයක් පිළිගෙන, තවත් එකක් ප්‍රතික්ෂේප කර, දැන් මගේම සංස්කරණයක් සිදු කර ඇති නිසා, මගේ නීති ලැයිස්තුවේ හැඩතල ගැන්වීම සහ විරාම ලකුණු ශෛලිය එකවර විසඳා ගත යුතු යැයි මම දැන් සලකා බලමි!


2
මම මේ පිළිතුරට කැමතියි. සියල්ලට පසු “struct” (සහ අනෙකුත් සෑම වෙන් කළ වචනයක්ම) C සම්පාදකයාට මැජික් නූලකි. ඔවුන් සඳහා කේතීකරණයේ හොඳ සහ නරක ක්රම තිබේ.
ඇල්ෆ්‍රඩ් ආම්ස්ට්‍රෝං

6
උදාහරණයක් ලෙස, යමෙකු ඔබේ කේතයේ “X: = 898755167 * Z” දුටුවහොත්, ඔවුන් එහි තේරුම නොදන්නා අතර එය වැරදියි කියා දැන ගැනීමට ඇති ඉඩකඩ අඩුය. නමුත් ඔවුන් “Speed_of_Light: නියත නිඛිල: = 299792456” දුටුවහොත් යමෙකු එය සොයා බලා නිවැරදි අගය යෝජනා කරයි (සමහර විට වඩා හොඳ දත්ත වර්ගයක්).
WGroleau

28
සමහර අයට කාරණය මුළුමනින්ම මග හැරී ඇති අතර SEPARATOR = "වෙනුවට COMMA =", "ලියන්න. පළමුවැන්නා කිසිවක් පැහැදිලි නොකරයි, දෙවැන්න අපේක්ෂිත භාවිතය සඳහන් කරන අතර පසුව බෙදුම්කරු තනි ස්ථානයක වෙනස් කිරීමට ඔබට ඉඩ සලසයි.
මාකස්

1
ඇත්තෙන්ම මාකස්! තැනින් තැන සරල වචනාර්ථ අගයන් භාවිතා කිරීම සඳහා ඇත්ත වශයෙන්ම අවස්ථාවක් තිබේ - නිදසුනක් ලෙස, ක්‍රමයක් මඟින් අගයක් දෙකකින් බෙදුවහොත්, එය වෙනත් තැනක අර්ථ දක්වා value / 2ඇතිවාට වඩා සරලව ලිවීමට වඩා පැහැදිලි හා සරල විය හැකිය . CSV හසුරුවන ක්‍රමයක් සාමාන්‍යකරණය කිරීමට ඔබ අදහස් කළේ නම්, ඔබට බොහෝ විට අවශ්‍ය වන්නේ බෙදුම්කරු පරාමිතියක් ලෙස සම්මත කර ගැනීම මිස නියතයක් ලෙස අර්ථ නොදැක්වීමයි. නමුත් මේ සියල්ල සන්දර්භය තුළ විනිශ්චය පිළිබඳ ප්‍රශ්නයකි - @ ඩබ්ලිව්.ග්‍රෝලියෝගේ උදාහරණය ඔබට පැහැදිලිවම නම් කිරීමට අවශ්‍ය දෙයක් වන නමුත් සෑම වචනානුසාරයෙන්ම මෙය අවශ්‍ය නොවේ. value / VALUE_DIVISOR2SPEED_OF_LIGHT
ස්ටීව්

4
මැජික් නූල් “නරක දෙයක්” බව ඒත්තු ගැන්වීමට අවශ්‍ය නම් ඉහළම පිළිතුර මෙම පිළිතුරට වඩා හොඳය. ඒවා “නරක දෙයක්” බව ඔබ දැනගෙන පිළිගන්නේ නම් සහ ඔවුන් නඩත්තු කළ හැකි ආකාරයකින් සේවය කරන අවශ්‍යතා සපුරාලීමට හොඳම ක්‍රමය සොයා ගැනීමට අවශ්‍ය නම් මෙම පිළිතුර වඩා හොඳය.
corsiKa

34
  • ඒවා නිරීක්ෂණය කිරීමට අපහසුය.
  • සියල්ල වෙනස් කිරීම සඳහා සමහර ව්‍යාපෘතිවල බහු ගොනු වෙනස් කිරීම අවශ්‍ය විය හැකිය (නඩත්තු කිරීමට අපහසුය).
  • සමහර විට ඒවායේ වටිනාකම දෙස බැලීමෙන් ඔවුන්ගේ අරමුණ කුමක්දැයි කීමට අපහසුය.
  • නැවත භාවිතා කිරීමක් නැත.

4
“නැවත භාවිතා කිරීමක් නැත” යන්නෙන් අදහස් කරන්නේ කුමක්ද?
බායි

7
එක් විචල්‍යයක් / නියතයක් නිර්මාණය කර ඔබේ සියලු ව්‍යාපෘති / කේතය හරහා එය නැවත භාවිතා කරනවා වෙනුවට ඔබ අනවශ්‍ය අනුපිටපතක් ඇති කරන සෑම එකක් තුළම නව නූලක් නිර්මාණය කරයි.
ජේසන්

ලක්ෂ්ය 2 සහ 4 සමානද?
තෝමස්

4
H තෝමස්මූර්ස් නැත, ඔහු දැනටමත් පවතින මැජික් නූලක් භාවිතා කිරීමට අවශ්‍ය සෑම අවස්ථාවකම ඔබ නව නූලක් සෑදිය යුතු ආකාරය ගැන කතා කරයි , ලක්ෂ්‍යය 2 යනු නූල් වෙනස් කිරීම ගැන ය
පියරේ ආර්ලෝඩ්

26

සැබෑ ජීවිත උදාහරණය: මම "ක්ෂේත්‍ර" සමඟ "ආයතන" ගබඩා කර ඇති තෙවන පාර්ශවීය පද්ධතියක් සමඟ වැඩ කරමි. මූලික වශයෙන් EAV පද්ධතියක්. වෙනත් ක්ෂේත්‍රයක් එක් කිරීම තරමක් පහසු බැවින්, ක්ෂේත්‍රයේ නම නූල් ලෙස භාවිතා කිරීමෙන් ඔබට එකකට ප්‍රවේශය ලැබේ:

Field nameField = myEntity.GetField("ProductName");

("ProductName" යන මැජික් නූල සටහන් කරන්න)

මෙය ගැටළු කිහිපයකට තුඩු දිය හැකිය:

  • "ProductName" පවා පවතින බවත් එහි නිශ්චිත අක්ෂර වින්‍යාසය දැන ගැනීමට මට බාහිර ලියකියවිලි වෙත යොමු විය යුතුය
  • ප්ලස් එම ක්ෂේත්‍රයේ දත්ත සමුදාය කුමක්දැයි බැලීමට මට එම ලේඛනයට යොමු විය යුතුය.
  • මෙම කේත රේඛාව ක්‍රියාත්මක වන තුරු මෙම මැජික් නූලෙහි යතුරු ලියනය නොවනු ඇත.
  • යමෙකු සේවාදායකයේ මෙම ක්ෂේත්‍රය නැවත නම් කිරීමට තීරණය කළ විට (ඩේටලෝස් වැළැක්වීමේදී අපහසු නමුත් එය කළ නොහැකි දෙයක් නොවේ), එවිට මට මෙම නම සකස් කළ යුත්තේ කොතැනදැයි බැලීමට මට පහසුවෙන් මගේ කේතය හරහා සෙවිය නොහැක.

එබැවින් මේ සඳහා මගේ විසඳුම වූයේ වස්තු වර්ගය අනුව සංවිධානය කරන ලද මෙම නම් සඳහා නියතයන් ජනනය කිරීමයි. දැන් මට භාවිතා කළ හැකිය:

Field nameField = myEntity.GetField(Model.Product.ProductName);

එය තවමත් නූල් නියතයක් වන අතර හරියටම එකම ද්විමය සමඟ සම්පාදනය කරයි, නමුත් වාසි කිහිපයක් ඇත:

  • මම "මාදිලිය" ටයිප් කළ පසු, මගේ IDE මඟින් ලබා ගත හැකි ආයතන වර්ග පමණක් පෙන්වයි, එබැවින් මට පහසුවෙන් "නිෂ්පාදන" තෝරා ගත හැකිය.
  • එවිට මගේ IDE මඟින් සපයනු ලබන්නේ මෙම වර්ගයේ ආයතන සඳහා ලබා ගත හැකි ක්ෂේත්‍ර නාමයන් පමණි.
  • ස්වයංක්‍රීයව ජනනය කරන ලද ලියකියවිලි මඟින් මෙම ක්ෂේත්‍රයේ අර්ථය කුමක්ද සහ එහි අගයන් ගබඩා කිරීම සඳහා භාවිතා කරන දත්ත සමුදාය පෙන්වයි.
  • නියතයෙන් පටන් ගෙන, මගේ IDE හට එම නියතය භාවිතා කරන සියලුම ස්ථාන සොයාගත හැකිය (එහි වටිනාකමට වෙනස්ව)
  • යතුරු ලියනය සම්පාදකයා විසින් අල්ලා ගනු ඇත. නියතයන් නැවත ප්‍රතිනිර්මාණය කිරීම සඳහා නැවුම් ආකෘතියක් (ක්ෂේත්‍රයක් නැවත නම් කිරීම හෝ මකා දැමීමෙන් පසුව) භාවිතා කරන විටද මෙය අදාළ වේ.

මගේ ලැයිස්තුවේ ඊළඟට: ප්‍රබල ලෙස ටයිප් කරන ලද පංති පිටුපස මෙම නියතයන් සඟවන්න - ඉන්පසු දත්ත සමුදාය සුරක්ෂිත වේ.


+1 ඔබ කේත ව්‍යුහයට පමණක් සීමා නොවූ හොඳ කරුණු රාශියක් ගෙන එයි: විශාල ව්‍යාපෘතිවල ජීවිතාරක්ෂකයෙකු විය හැකි IDE සහාය සහ මෙවලම්
kmdreko

ඔබේ වස්තු වර්ගයේ සමහර කොටස් ස්ථිතික නම් එය සඳහා නියත නමක් නිර්වචනය කිරීම වටී නම්, මම හිතන්නේ ඒ සඳහා නිසි දත්ත ආකෘතියක් නිර්වචනය කිරීම වඩාත් යෝග්‍ය වනු ඇත, එවිට ඔබට එය කළ හැකිය nameField = myEntity.ProductName;.
බොරු රයන්

IeLieRyan - සරල නියතයන් ජනනය කිරීම සහ ඒවා භාවිතා කිරීම සඳහා පවතින ව්‍යාපෘති වැඩි දියුණු කිරීම වඩා පහසු විය. මම කිව්වේ, ඒක මම මම හරියටම කරන්න පුළුවන් ඒ නිසා ස්ථිතික වර්ග ජනනය මත වැඩ
හාන්ස් කෑ වන ING

12

මැජික් නූල් සැමවිටම නරක නැත , එබැවින් මෙය වළක්වා ගැනීම සඳහා ඔබට හිස් හේතුවක් ඉදිරිපත් කළ නොහැක. ("මැජික් නූල්" මගින් ඔබ උපකල්පනය කරන්නේ වචනාර්ථයෙන් ප්‍රකාශනයක කොටසක් ලෙස මිස නියතයක් ලෙස අර්ථ දක්වා නැත.)

සමහර විශේෂිත අවස්ථාවන්හිදී, මැජික් නූල් වළක්වා ගත යුතුය:

  • එකම නූල කේතයේ කිහිප වතාවක් දිස් වේ. මෙයින් අදහස් කරන්නේ ඔබට එක් ස්ථානයක අක්ෂර වින්‍යාස දෝෂයක් ඇතිවිය හැකි බවයි. තවද එය නූල් වෙනස්වීම් වල කරදරයක් වනු ඇත. නූල නියතයක් බවට පත් කරන්න, එවිට ඔබ මෙම ගැටළුව මග හරිනු ඇත.
  • නූල පෙනෙන කේතයෙන් ස්වාධීනව වෙනස් විය හැකිය. උදා. නූල අවසන් පරිශීලකයාට පෙන්වන්නේ නම් එය ඕනෑම තර්කන වෙනසකින් ස්වාධීනව වෙනස් වනු ඇත. එවැනි නූල වෙනම මොඩියුලයකට (හෝ බාහිර වින්‍යාසයකට හෝ දත්ත ගබඩාවට) වෙන් කිරීමෙන් ස්වාධීනව වෙනස් කිරීම පහසු වේ
  • නූලෙහි අර්ථය සන්දර්භයෙන් පැහැදිලි නොවේ. එවැනි අවස්ථාවක නියතයක් හඳුන්වා දීමෙන් කේතය තේරුම් ගැනීමට පහසු වේ.

නමුත් සමහර අවස්ථාවලදී "මැජික් නූල්" හොඳයි. ඔබට සරල විග්‍රහයක් ඇති බව පවසන්න:

switch (token.Text) {
  case "+":
    return a + b;
  case "-":
    return a - b;
  //etc.
}

මෙහි ඇත්ත වශයෙන්ම මැජික් නොමැති අතර, ඉහත විස්තර කර ඇති ගැටළු කිසිවක් අදාළ නොවේ. string Plus="+"ආදිය නිර්වචනය කිරීමෙන් IMHO හට කිසිදු ප්‍රතිලාභයක් නොලැබේ . එය සරලව තබා ගන්න.


7
"මැජික් නූල්" පිළිබඳ ඔබේ අර්ථ දැක්වීම ප්‍රමාණවත් නොවන බව මම සිතමි, එයට සැඟවී / අපැහැදිලි / සෑදීම-අභිරහස් පිළිබඳ යම් සංකල්පයක් තිබිය යුතුය. එම ප්‍රති-උදාහරණයේ ඇති "+" සහ "-" මම "මැජික්" ලෙස හඳුන්වන්නේ නැත, මම ශුන්‍යය මැජික් ලෙස හඳුන්වන්නෙමි if (dx != 0) { grad = dy/dx; }.
රූප සටහන

2
@Rupe: මම එකඟ වෙමි, නමුත් විශ්රාම වැටුප් අර්ථ දැක්වීම භාවිතා " යෙදුම හැසිරීම මත බලපෑමක් ඇති බව ඉල්ලුම් කේතය තුළ සෘජුවම නිශ්චිත බව ඈඳීම. මේ අර්ථ දැක්වීම මම භාවිතා වේ නම්, අභිරහස් ලෙස වැල අවශ්ය නොවන" පිළිතුර.
ජැක් බී

9
ඔබගේ උදාහරණයට අදාළව, ස්විච් ප්‍රකාශයන් ප්‍රතිස්ථාපනය කර ඇති "+"අතර ඒවා "-"සමඟ TOKEN_PLUSසහ TOKEN_MINUS. එය කියවන සෑම අවස්ථාවකම මට දැනුනේ එය කියවීමට හා නිදොස් කිරීමට අපහසු බවය! සරල නූල් භාවිතා කිරීම වඩා හොඳ බව මම එකඟ වන ස්ථානයක්.
Cort Ammon

2
මැජික් නූල් සුදුසු අවස්ථාවන් ඇති බව මම එකඟ වෙමි: ඒවා වළක්වා ගැනීම මාපට ඇඟිල්ලේ රීතියක් වන අතර මාපට ඇඟිල්ලේ සියලු නීතිවලට ව්‍යතිරේක ඇත. ඒවා නරක දෙයක් විය හැක්කේ මන්ද යන්න පිළිබඳව අපට පැහැදිලි වූ විට , දේවල් කරනවාට වඩා බුද්ධිමත් තේරීම් කිරීමට අපට හැකි වනු ඇතැයි අපි බලාපොරොත්තු වෙමු. (1) වඩා හොඳ ක්‍රමයක් තිබිය හැකි බව අප කිසි විටෙකත් තේරුම් ගෙන නැත, හෝ (2) අපි ජ්‍යෙෂ් senior සංවර්ධකයෙකු හෝ කේතීකරණ ප්‍රමිතියක් මගින් වෙනස් ආකාරයකින් දේවල් කිරීමට මට පවසා ඇත.
ක්‍රාමි

2
මම දන්නේ නැහැ මෙතන "මැජික්" මොකක්ද කියලා. ඒවා මට මූලික වචන වචනාර්ථයෙන් පෙනේ.
tchrist

6

පවතින පිළිතුරු වලට එකතු කිරීම සඳහා:

ජාත්‍යන්තරකරණය (i18n)

තිරය ​​මත දර්ශනය වන පෙළ දෘඩ කේත කර ශ්‍රිත ස්ථර තුළ තැන්පත් කර ඇත්නම්, එම පා text ය වෙනත් භාෂාවලට පරිවර්තනය කිරීම ඔබට ඉතා අසීරු කාලයක් වනු ඇත.

සමහර සංවර්ධන පරිසරයන් (උදා: Qt) මූලික භාෂා පෙළ පෙළක සිට පරිවර්තන භාෂාවට බැලීමෙන් පරිවර්තන හසුරුවයි. මැජික් නූල් සාමාන්‍යයෙන් මෙයින් නොනැසී පැවතිය හැකිය - ඔබ එකම පෙළ වෙනත් තැනක භාවිතා කර යතුරු ලියනය ලබා ගැනීමට තීරණය කරන තුරු. එසේ වුවද, ඔබට වෙනත් භාෂාවක් සඳහා සහය එක් කිරීමට අවශ්‍ය විට කුමන මැජික් නූල් පරිවර්තනය කළ යුතුද යන්න සොයා ගැනීම ඉතා අපහසුය.

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


3

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

නමුත් නැවතත්, මෙය බොහෝ සංවර්ධකයින් සැලකිලිමත් වන දෙයක් නොවේ.

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.