Uso di "this" in Golang

9

Sulla cosa più vicina a Golang è stata trovata una qui , sotto i nomi dei ricevitori questo è scritto:

The name of a method's receiver should be a reflection of its identity; often a one or two letter abbreviation of its type suffices (such as "c" or "cl" for "Client"). Don't use generic names such as "me", "this" or "self", identifiers typical of object-oriented languages that place more emphasis on methods as opposed to functions. The name need not be as descriptive as a that of a method argument, as its role is obvious and serves no documentary purpose.

Personalmente ho sempre usato "questo" come identificatore perché "questo" è il fulcro di ciò su cui sto lavorando quando scrivo e modifico la funzione. Sembra giusto, e (almeno per me) ha senso.

Se il nome non deve essere descrittivo, il suo ruolo è ovvio e serve nessun fine documentario , perché l'uso di "questo" dovrebbe essere disapprovato?

    
posta Adam 10.06.2015 - 17:52
fonte

3 risposte

10

Dovremmo chiedere all'autore di quella guida di stile di saperlo con certezza, ma penso che il motivo principale per cui sono d'accordo con lui sia che la connessione tra struct e method è molto più loose in Go di altri lingue .

In sostanza, quando scrivi un metodo come questo:

func (m *MultiShape) area() float64 {
  ...
}

È quasi esattamente la stessa cosa che scrivere una funzione come questa:

func area(m *MultiShape) float64 {
  ...
}

L'unica differenza è una leggera modifica della sintassi nel modo in cui chiamiamo la funzione / metodo.

In altre lingue la this / self / qualunque variabile ha tipicamente alcune proprietà speciali come essere magicamente fornite dalla lingua, o avere accesso speciale a metodi privati (ricorda che Go non ha campi / metodi privati) . Anche se il "ricevitore" viene ancora "magicamente fornito" in una certa misura, è così simile a un argomento di funzione normale che probabilmente non conta.

Inoltre, nei linguaggi OOP "tradizionali" i metodi struct / class vengono tutti con la definizione struct / class, in modo tale che non è possibile aggiungere altro dall'esterno. In Go, per quanto ne so chiunque può aggiungere più metodi a qualsiasi cosa (nell'ambito del proprio codice, ovviamente).

Non ho scritto abbastanza Vai a creare la mia guida di stile, ma personalmente userò probabilmente this in metodi definiti nello stesso file della struct che ricevono, e qualche altro nome descrittivo del destinatario su metodi che allegare alle strutture da altri file.

    
risposta data 10.06.2015 - 18:17
fonte
3

Non sono convinto da questa guida allo stile e non penso che nulla sia migliore di this , me o self . Poiché this , me o self rendono superfluo che la variabile sia un'istanza della struttura di contesto. Non sto dicendo che una variabile del nome della struttura con una cassa inferiore sia una cattiva idea, mi piace solo il modo in cui this lo rende super trasparente.

    
risposta data 26.12.2016 - 02:24
fonte
0

Questo è da una prospettiva di JavaScript dove this ha una vera parola chiave che significa il compilatore, ma dalla mia comprensione, se stanno bene con le abbreviazioni a due lettere per il tipo di oggetto, dovrebbe essere abbastanza facile da usare anziché. La ragione della differenza è che in un blocco decentemente ampio di codice asincrono progressivamente più profondo, potrebbe essere molto facile interpretare erroneamente cosa "questo", o il destinatario, si trova in un contesto più profondo; ed è possibile che non sia lo stesso oggetto.

Ad esempio in JavaScript, un modulo di controllo potrebbe avviare una finestra di dialogo e dichiarare una funzione onLoad in linea per esso. Ma a quel punto, potrebbe essere molto facile per un altro codificatore interpretare erroneamente this all'interno di onLoad per fare riferimento al modulo di controllo, non alla finestra di dialogo; o vice versa. Questo potrebbe essere evitato se il controllo fosse chiamato ctrl e il dialogo come dg .

    
risposta data 10.06.2015 - 18:05
fonte

Leggi altre domande sui tag