/ / Je dobrým zvykom mať lokálne premenné začínajúce podčiarkovníkom? - rubín, konvencie pomenovania

Je dobré mať miestne premenné začínajúce znakom podčiarknutia? - rubínové, pomenovacie konvencie

Práve sa dostávam do Ruby a pochádzam z prostredia Java a C / C ++.

Pri programovaní prvého malého projektu v Ruby somnejako si zvykol nechať všetky miestne premenné začínať podčiarkovníkom. Myslím, že mojou hlavnou motiváciou bola lepšia čitateľnosť a odlíšenie od volaní metód.

V zásade existujú iba tri typy premenných ($global, @instance a local), veľká väčšina premenných začína napodčiarknutie. Nie som si istý, či je to dobré alebo zlé. Okrem toho v mnohých iných jazykoch by podčiarknutie nahradilo nejaký iný znak.

Existuje nejako najlepší tréning týkajúce sa pomenovania premenných okrem obvyklých CamelCase a / alebo podčiarknutie oddelené? Aké sú zvyky profesionálnych „rubínov“? Prehliadol som niekoľko všeobecných konvencií Ruby, keď som si vybral popredné podčiarknutie?


editovať
Ďakujem za všetky odpovede a návrhy. Veľmi mi to pomohlo.


Krátke zhrnutie odpovedí a komentárov nižšie
(pre krátkodobého návštevníka)

Popredné podčiarkovníky patria:

  • argumenty metódy: def my_method(_my_arg)
  • argumenty bloku: napr. my_array.each { |_x| puts _x}

Všetky ostatné lokálne premenné bez úvodných podčiarknutí, pretože programátori pochádzajúci napr. JavaScript môže byť zmätený o zamýšľanom správaní premenných.

Na vizuálne oddelenie medzi názvami premenných a volaním metód je nútenie používať „(„zátvorky“)"s všetko volania metód môžu výrazne zvýšiť čitateľnosť.

odpovede:

1 pre odpoveď č. 1

Vášmu nápadu sa nič nestalo. Ale ak by som mal problém rozlíšiť miestne vary od volaní metód, asi by som sa prinútil vždy používať ()„Je o metódach. (Môj tím v práci diskutoval o vytvorení tejto časti našich štandardov kódovania).

a = thing # var
b = thing() # method

Možnou výhodou je čitateľnosť pre ostatných. Niekto sa môže čudovať vašim vedúcim _, ale používa ()„Všetky volania metód by mali byť každému jasné.


4 pre odpoveď č. 2

Existujúce odpovede na túto otázku sú dnes už niekoľko rokov staré a konvencie sa zmenili. Mali by ste vždy používať iba popredné podčiarknutie (_some_param), alebo samostatné podčiarknutie (_), čo znamená, že vám nezáleží na hodnote rubocop Štýl obloženie nástroj bude kapor asi "k ničomu."priradenie "ak priradíte premennú, ale nepoužívajte ju, ale bude ignorovať premenné s úvodným podčiarkovníkom. To vám umožňuje výslovne naznačiť, že vám na hodnote nezáleží a nemienite ju používať.

Tu je trochu vymyslený príklad použitia v kontexte RSpec:

describe "login" do
let(:user) { FactoryGirl.create(:user, login: "bob") }
it "must be unique" do
_user1 = user
user2 = User.new login: "bob"
expect(user2.valid?).to be_false
end
end

Tu naznačujeme, že náš user pomocník pri memoizácii má vedľajší efekt a niečo vráti, ale nestaráme sa o to. Môžete tiež jednoducho úplne preskočiť priradenie, ale vidieť holé user na riadku sám o sebe vyzerá zvláštne a nevyjadruje zámer tak zreteľne:

describe "login" do
let(:user) { FactoryGirl.create(:user, login: "bob") }
it "must be unique" do
user
user2 = User.new login: "bob"
expect(user2.valid?).to be_false
end
end

Medzi ďalšie scenáre patrí ignorovanie hodnôt v iterátoroch alebo prepísanie metódy, pri ktorej chcete zachovať pôvodný podpis metódy, ale nestarajte sa o niektoré z hodnôt:

def greet(name, _title)
puts "Hi, #{name}!"
end

3 pre odpoveď № 3

Podľa mojich skúseností podčiarknuté premennév Ruby sú podobné premenným s predponou podčiarknutia v JavaScripte: príznak „nedotýkajte sa“. Konkrétnejšie sa používajú, keď implementátor robí niečo, čo by skutočne nemalo byť chápané ako súčasť objektu, alebo by nemalo "nemožno považovať za koncepčné rozhranie objektu."

To je jasnejšie vo svete JavaScript, kdeniekto emuluje "súkromné" predponou premennej podčiarkovníkom. Kódujú, že pod krytom sa nachádza časť objektu, ktorú je možné pri pohľade na objekt zvonka ignorovať.

V Ruby som to naozaj videl iba s vecamiako medzipamäť alebo inštancia typu singleton - druh veci, ktorá by mala byť pre spotrebiteľov vášho objektu neviditeľná. Nepodčiarknuté premenné sú veci, o ktorých by sa ľudia používajúci váš objekt mohli zaujímať, že sú tam.

V každom prípade sa zdajú dosť zriedkavé a ja by som sa im vyhýbal, pokiaľ nechcete vyslať signál ďalšiemu chlapovi, že „prichádza spolu s tým, že sa deje nejaká ďalšia mágia alebo vúdú.

Pokiaľ sa obávate rozlíšenia volaní metód, ak sa obávate, že môže dôjsť k zámene medzi metódou a lokálnou premennou, zavolal by som metódu na self objasniť. Napríklad:

def foo
...
end

def some_method
foo # method
bar # variable
end

Ak sa vám to z akýchkoľvek dôvodov zdá nejasné, môžete to objasniť pomocou

def some_method
self.foo
bar
end

1 pre odpoveď č. 4

Vidieť, ako majú inštančné premenné @ znamienko pred nimi a globálne premenné majú znak $ značka pred nimi už v rubíne, to jepravdepodobne nie je potrebné uvádzať pred názvy premenných znak podčiarknutia. To znamená, že si nemyslím, že je to nevyhnutne zlý postup. Ak vám pomôže čítať alebo zapisovať váš kód do Ruby, mali by ste ho použiť.

Niekedy som videl kód Ruby, kde argument pre inštančnú metódu v triede má pred sebou podčiarknutie. Napríklad:

def my_method(_argument1)
# do something
end

A myslím si, že keď máte do činenia s atrieda, ktorá môže mať vlastné atribúty, napríklad modelový súbor v koľajniciach, môže to byť užitočné, aby ste vedeli, že máte na starosti premennú, ktorá bola odovzdaná do metódy, na rozdiel od jedného z atribútov, ktoré patria do triedy / modelu.