Jeffrey Cross
Jeffrey Cross

Константе глуме у Ацтионсцрипту 2.0

Већина људи се суочава са недостатком константних варијабли у АцтионСцрипт 2.0 тако што само именује варијабле чланова у свим великим словима и запамти да не мења њихову вредност. Ово функционише добро, под претпоставком да поштујете правила, али шта ако желите да примените константну вредност тако да се не може мењати током рунтиме-а. Едгар Де Лоа нам је данас писао о овоме:

Константе нису инхерентне у АцтионСцрипт 2.0. Најближе што можете добити је да направите нешто приватно и глобално доступно. Међутим, то не ублажава проблем, јер се варијабла и даље лако може променити, а појам о константи је сломљен.

Пронашао сам веома једноставан начин да симулирам константе. Након што сам погледао около, нисам нашао никог другог који је предложио и / или користио овај метод.

Први корак је креирање статичне класе и дефинисање приватне променљиве са вредношћу коју желите да ускладиштите. Следећи корак је додавање јавне функције која враћа поменуту приватну променљиву. Именовање функције која је идентична приватној варијабли (све у капицама) је одличан и једноставан начин за приступ константи.

статична класа ЦонстантВарс {привате вар АРРАИ_СИЗЕ = 12;

публиц фунцтион АРРАИ_СИЗЕ () {ретурн АРРАИ_СИЗЕ; }}

Дакле, сада се може користити ЦонстантВарс.АРРАИ_СИЗЕ () за приступ константи, без могућности да се промени или да се ослободи. Открио сам и да ће именовање класе нешто једноставно, као што је "Цонст", учинити све још бржим и једноставнијим.

Ово функционише, али мислим да можемо још боље.

Користећи статички "геттер" метод, можете дохватити наметнуту константну вредност и не морате да користите нормалну нотацију са заградама функције да бисте јој приступили. Ово можете користити у више глобалној статичкој класи "Цонст" коју описује Едгар за више глобалних варијабли. Алтернативно, статичну константу можете инкапсулирати у било коју нормалну класу, што је згодно ако је константа релевантна за одређену класу (умјесто само глобалне константе варијабле).

На пример, рецимо да имате класу која аутентификује корисника. То није статична класа. Она има неке променљиве чланова и неколико метода које се баве аутентификацијом и чувањем корисничких акредитива. Такође има неколико низова порука које су релевантне за процес аутентификације, које можда желите да имате на располагању у другим деловима апликације, али желите да се уверите да су ти низови константи и да се случајно не промене током извршавања:

цласс Аутхентицатион {привате вар гуид; привате вар корисничко име; привате вар пассворд; привате вар сервер;

публиц статиц фунцтион гет СУЦЦЕСС_МСГ (): Стринг {повратак "Успешно пријављивање"; } публиц статиц фунцтион гет НОСУЦХУСЕР_МСГ (): Стринг {ретурн "Корисник није пронађен"; } јавна статичка функција добијате СЕРВЕРЕРРОР_МСГ (): Стринг {ретурн "Дошло је до грешке приликом повезивања са сервером"; }

публиц фунцтион Аутхентицатион (сервер, усернаме, пассворд) {...} јавна функција аутхентицате (): Стринг {// изводи аутентификацију и враћа један од низова константних грешака} ...}

Сада се код унутар ваше класе аутентикације може директно позивати на НОСУЦХУСЕР_МСГ, а код који је изван класе може приступити константним вредностима на једноставан начин као што је Аутхентицатион.СЕРВЕРЕРРОР_МСГ. У овом сценарију, ово може бити прилично корисно, јер класа аутентификације може проћи информације о успјеху / грешкама, а вањске класе могу знати што текст значи, чак и ако се мијења у другом пријеводу. Друга класа може да уради нешто попут следећег да би аутентификовала корисника:

Аутентикација усераутх = нова аутентификација (име сервера, корисник, пасс); вар ресулт = усераутх.аутхентицате (); иф (ресулт! = Аутхентицатион.СУЦЦЕСС_МСГ) {дисплаиЕррор (ресулт); }

Ово је заиста поједностављен пример - и вероватно постоји бољи пример који није одмах дошао на памет - али добијате идеју. Стварне константе подржавају Ацтионсцрипт 3.0 користећи синтаксу цонст, али ако радите на АС2 пројекту, још увек постоји решење за вас које ће вам дати исти ефекат.

Удео

Оставите Коментар