Глобалне променљиве су Променљиве којима се може приступити било где у програму, без обзира на обим. Означене су тако што ћете започети знаком $ (долар). Међутим, употреба глобалних променљивих често се сматра „ун-Руби“, и ретко ћете их видети.
Дефинисање глобалних променљивих
Глобалне променљиве су дефинисане и користе се као и свака друга променљива. Да бисте их дефинисали, једноставно им доделите вредност и почните да их користе. Али, као што њихово име сугерира, додељивање глобалним променљивим из било које тачке програма има глобалне импликације. Следећи програм то показује. Метода ће изменити глобалну променљиву и то ће утицати на то друго метода се покреће.
$ брзина = 10. деф убрзати. $ брзина = 100. крај. деф пасс_спеед_трап. ако је $ брзина> 65. # Дајте програму брзу карту. крај. крај. убрзати. пасс_спеед_трап.
Непопуларно
Па зашто је то "ун-Руби" и зашто не видите глобалне променљиве врло често? Једноставно речено, ломи се енкапсулација. Ако било која класа или метода по својој вољи може да модификује стање глобалних променљивих без било каквог слоја интерфејса друге класе или методе које се ослањају на глобалну променљиву могу се понашати неочекивано и непожељно манир. Надаље, такве интеракције могу бити веома тешке за уклањање погрешака. Шта је променило ову глобалну променљиву и када? Прегледаћете прилично много кода да бисте пронашли шта је то учинило, а то је могло да се избегне кршењем правила енкапсулације.
Али то не значи да су глобалне променљиве никад користи се у Руби-у. Постоји велики број посебних глобалних променљивих са једнозначним именима (а-ла Перл) који се могу користити у вашем програму. Они представљају стање самог програма и раде ствари попут модифицирања сепаратора записа и поља за све добива методе.
Глобалне променљиве
- $0 - Ова променљива, која је означена са 0 УСД (то је нула), садржи назив скрипте највишег нивоа која се извршава. Другим речима, датотека скрипте која је покренута из командна линија, а не датотека скрипте која тренутно држи извршни код. Па ако сцрипт1.рб је покренут из командне линије, задржао би се сцрипт1.рб. Ако овај скрипт захтева сцрипт2.рб, $ 0 у тој датотеци скрипте такође би било сцрипт1.рб. Назив $ 0 огледа се у конвенцији именовања која се користи у скрипту за УНИКС шкољке у исту сврху.
- $* - Аргументи командне линије у низу означени са $ * (знак долара и звјездица). На пример, ако бисте трчали ./сцрипт.рб арг1 арг2, тада би $ * био еквивалентан % в {арг1 арг2}. Ово је еквивалентно посебном АРГВ матрице и има мање описни назив, па се ретко користи.
- $$ - ИД процеса преводиоца, означен са $$ (два знака долара). Познавање сопственог ИД-а процеса често је корисно у демонским програмима (који се покрећу у позадини, нису повезани са било којег терминала) или системским услугама. Међутим, ово се постаје мало сложеније када су укључене нити, зато будите опрезни да их користите слепо.
- $ / и $ \ - Ово су раздвајачи улазних и излазних записа. Када читате објекте користећи добива и штампајте их користећи ставља, користи их да зна када је читав "запис" прочитан или шта да се штампа између више записа. Подразумевано би то требало да буде знак нове линије. Али пошто то утиче на понашање свих ИО објеката, ретко се користе, ако уопште. Можете их видети у мањим скриптама где кршење правила енкапсулације није проблем.
- $? - Излазни статус последњег извршеног подређеног процеса. Од свих овде наведених променљивих, ово је вероватно најкорисније. Разлог за то је једноставан: не можете добити статус излаза дечјих процеса по њиховој повратној вредности из вредности систем метода, само истинита или лажна. Ако морате знати стварну повратну вредност дечијег процеса, морате да користите ову специјалну глобалну променљиву. Опет, назив ове променљиве је преузет из љуске УНИКС-а.
- $_ - последњи низ који је прочитао добива. Ова варијабла може бити збуњујућа за оне који долазе у Руби са Перла. У Перлу $ _ променљива значи нешто слично, али потпуно другачије. У Перлу, $_ држи вредност последње изјаве, а у Руби-у држи низ који је вратио претходни добива позив. Њихова употреба је слична, али оно што они заиста држе је веома различито. Ни ову варијаблу често не видите (помислите на то, ретко видите неку од ових променљивих), али можете их видети у врло кратким Руби програмима који обрађују текст.
Укратко, ретко ћете видети глобалне променљиве. Често су лоше форме (и „ун-Руби“) и заиста су корисни само у веома малим скриптама, где се у потпуности може уважити пуна импликација њихове употребе. Постоји неколико посебних глобалних променљивих које се могу користити, али углавном се не користе. Не морате заиста толико много знати о глобалним променљивим да бисте разумели већину Руби програма, али требали бисте барем знати да они постоје.