Domanda

In Perl, di riferimento per tutto è un semplice scalare, e ha il $ sigillo.A volte è difficile dire che tipo di riferimento è.

Io personalmente prefisso per i nomi delle variabili per i riferimenti con una lettera, che indica ref type.Esempi:

my $aValues = [];                # arrayref
my $hValue  = {};                # hashref
my $oValue  = bless {};          # object
my $sValue  = \(my $s = 'foo');  # scalarref
...

Ho visto sia i sostenitori e gli oppositori di tale notazione.Si utilizza?Non si hanno tutti gli svantaggi?

È stato utile?

Soluzione

Personalmente trovo la notazione ungherese difficile da leggere. Mi basta usare convenzioni inglesi:

my $values; # is an array
my $value;  # is a scalar
my $value_hash; # is a hash

Io di solito trattare gli oggetti lo stesso scalari perché come viene usato lo rende abbastanza ovvio che si tratta di un oggetto. Tuttavia se mai trovare una necessità di userei:

my $value_obj;  # is an object

Altri suggerimenti

Meh. Arrayrefs e hashrefs e simili non finiscono con l'essere che confondere qui intorno che il problema viene in su per i nostri Perl-tipi di dati molto spesso. (Anche:??? $oValue Come generico si può essere Che tipo di un oggetto è esso)

Dammi semantici-unità notazione ungherese invece: $size_bits, $size_bytes, $size_kb, $size_blocks, $size_mb, $size_gb. Il tipo di dati sottostante? Non è tanto importante quanto l'aggiunta di 3 byte a 10 megabyte al secondo e ottenere 13. che è dove la notazione ungherese di una qualche forma è utile.

Se si desidera lingue staticamente tipizzati, si sa dove trovarli ...

Ma la notazione ungherese è mai stato destinato ad essere sui tipi di dati tecnici (anche se ha guadagnato la maggior parte della sua cattiva reputazione di essere frainteso e ha deciso di porre per i tipi di dati tecnici). L'ungherese che ha originariamente inventato (Charles Simonyi) destinato a convogliare semantica informazioni, ad esempio, utilizzando row e col prefissi nel codice che si occupa di tabelle in modo che non si mescola in su indici di riga e di colonna.

Lo scopo di notazione ungherese è quello di incorporare annotazioni semantiche che

  • non può essere espresso con la lingua, in particolare il tipo di sistema E
  • non sono evidenti dal contesto

i nomi delle variabili.Ora, dal momento che Perl non sono un tipo statico, sistema, potrebbe sembrare che la notazione ungherese dovrebbe essere abbastanza comune.Ma, prendere l'esempio canonico per il valore di notazione ungherese:monitoraggio dell'origine dei dati non attendibili.

Uno dei citato esempi di notazione ungherese è prefisso di tutte le variabili di stringa in un'applicazione con s o u (per cassetta di sicurezza e pericoloso), a seconda che la stringa è venuto da una fonte attendibile (o è stata sterilizzata) o non attendibili uno.Ma:basta sostituire pericoloso con contaminato e si dispone di una perfetta descrizione di snaturare in Perl.Quindi, in questo caso, anche se Perl non sono un tipo statico di sistema, ha un dinamica tipo di sistema che consente di esprimere la semantica di fiducia/non attendibili all'interno della lingua e, quindi, notazione ungherese è superfluo.(E anche in una lingua senza il supporto integrato per sporcando, di solito ci sono più modi migliori, come la sottotipizzazione (Python, Ruby, Smalltalk, ...), le annotazioni, gli attributi (Java, C#, ...), i metadati (Clojure, ...) e la tipizzazione statica (Haskell, ML, ...).)

Inoltre, Perl è maledettamente espressiva, e quindi è molto più facile mantenere l'intero contesto di una variabile nella tua testa, o all'interno di una schermata di codice), quindi, abbastanza spesso la semantica è evidente che la circondano codice.

Buon denominazione aiuta anche, naturalmente.

Ricordate:Notazione ungherese è stato inventato per C, che non è espressiva e ha un tipo statico, sistema di cui praticamente solo uso è come la battuta di scherzo.

Non lo faccio questo perché l'utilizzo di un riferimento chiarirà il suo coso. Ad esempio:

$a->{key};  # hash
... if @$b; # array
$c->foo;    # object

La scelta dei nomi per le variabili che comunicano ciò che rappresentano andrà un lungo cammino. Perl è stato progettato da un linguista e prende in prestito dal linguaggio naturale, in modo da contesto è fondamentale. I nostri cervelli sono già cablati per questo tipo di trattamento. Fare uso di esso nel modo in cui la struttura il vostro codice!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top