Come fare riferimento a ByRef e ByVal in un'etichetta a discesa? [chiuso]


9

La pagina MSDNByRef e le ByValparole chiave non sono molto utili; a meno che non lo abbia in qualche modo ignorato, vengono semplicemente definiti ovunque "parole chiave".

Uno dei principali contributori del progetto Rubberduck sta lavorando a un refactoring Encapsulate Field molto interessante , e l'interfaccia utente sta procedendo abbastanza bene .. tranne che ho un problema con l'etichetta sopra il menu a discesa per ByRef/ ByVal, che dice "Accessibilità":

Finestra di dialogo del refactoring "Encapsulate Field" di Rubberduck

Non mi piace "Accessibilità" perché lo sto usando altrove per Public/ Private/ Friendmodificatori di accesso dove sembra più preciso.

Non voglio usare "Modificatore" perché IMO è solo l'abbreviazione di "modificatore di accesso".

Vorrei che quell'etichetta fosse accurata, ma a quanto pare il mio vocabolario manca e non so come chiamare queste parole chiave.

Cosa dovrebbe dire questa etichetta per essere precisi? Qual è la parola che sto cercando? A quale "famiglia di parole chiave" appartiene ByRef/ ByValappartiene?


2
Come dice uno dei commenti, non dovrebbe essere affatto lì - ByRef per una proprietà è un po 'folle. Se possibile, è malvagio, permettendoti di cambiare le variabili dei chiamanti a loro insaputa.
jmoreno,

Molta documentazione nell '"Universo VB" (quindi, non specificamente VBA) sembra riferirsi a questo come al "Meccanismo di passaggio".
Damien_The_Unbeliever il

@jmoreno Sono completamente d'accordo. Lo farò ByValsenza possibilità di cambiarlo in ByRefaltro che modificare manualmente il codice generato e "problema risolto"! VBA è in grado di compilare un'enorme quantità di sciocchezze malvagie che conosci :-) tuttavia, mi piace che finalmente c'è un posto online che dia un nome a queste parole chiave.
Mathieu Guindon,

Risposte:


14

In questo caso, utilizzerei "Passa come" (o "Passa").

Hai un flusso che si abbina perfettamente a questo utilizzo.

  • Nome della variabile : foo
  • Passa come: ByVal / Passa: ByRef

Questo si adatta perfettamente al tuo flusso di lavoro e, per inciso, è esattamente ciò che indica l'articolo a cui fai riferimento.

Mentre leggi le tue opzioni, si legge perfettamente quando usi "Passa come", in quanto puoi semplicemente leggere l'intestazione e selezionare il testo in modo appropriato: "Nome della variabile", valore "Passa come". "

Se si voleva fare leggermente leggere meglio si potrebbe fare le opzioni della lista "Valore" e "di riferimento" a seconda se il vostro target di riferimento è programmatori VBA o programmatori non-VBA che possono essere un po ' meno familiarità con ByVal e ByRef parole chiave.

O in alternativa, cambiarlo in "Pass:" e renderlo "Per riferimento (ByRef)" e "Per valore (ByVal)" nel menu a discesa. Sembra che il tuo menu a discesa abbia lo spazio per mostrare tutto questo testo. O solo le parole chiave ByRef / ByVal.


Userei "Pass as ByVal" o "Pass by value". "Pass by ByVal" sembra strano.
user253751

@immibis buona chiamata!
Enderland,

3
Inoltre, potresti considerare i pulsanti di opzione anziché i menu a discesa, dato che ci sono così poche scelte.
Kyralessa,

@Kyralessa è esattamente quello che ho detto anche a Mat in chat. E penso che sia quello con cui sono andati per il progetto finale :-)
Enderland il

5

Vorrei utilizzare uno di questi 3 termini per etichettare un menu a discesa selezionando quello:

  1. Semantica
  2. Passa vicino
  3. Modificatore di parametri

Mi piace "Semantics"
Mathieu Guindon il

Mi piace "Parameter Modifier".

3

"Pass By Semantics" è probabilmente il più vicino a quello che stai cercando.


argh rubando il mio cappello di consegna veloce! Eeeeevil!
Jimmy Hoffa,

2
Ne ho già uno, felice di darti questo ...
Oded,

3

Il termine più esatto e formale per questo sarebbe "Aliasing semantics".

Quando ByRefviene utilizzato, il nome all'interno della funzione è un alias per la variabile del chiamante: tutte le modifiche a una sono immediatamente visibili all'altra. Con ByVal, il nome all'interno della funzione è una copia distinta della variabile del chiamante (ovviamente, sia la copia del chiamante che quella della funzione possono riferirsi allo stesso oggetto, ma sono distinti in quanto la riassegnazione del parametro all'interno della funzione non riassegna la variabile del chiamante ).

Le opzioni sarebbero

  • Alias ​​( ByRef)
  • Copia ( ByVal)

Alcune piattaforme aggiungono una terza possibilità, in cui viene eseguito l'aliasing della variabile del chiamante ma non è consentito per più di un parametro alias oggetti sovrapposti. (L'idea alla base della restrictparola chiave C , questa si trova anche in IDL, dove si trova la parola chiave dell'attributo unique). .NET non ha un buon modo per codificare questa conoscenza.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.