Ha senso usare "ys" anziché "i" negli identificatori per facilitare la funzionalità di ricerca e sostituzione? [chiuso]


9

Sebbene grammaticalmente errato, quando si scrivono identificatori per funzioni, variabili ecc. Ha senso semplicemente aggiungere una "s" a plurali di parole che terminano con Y? La mia ragione sarebbe che se fosse necessario trovare e sostituire, ad esempio, la sostituzione di "azienda" con "fornitore", "azienda" corrisponderebbe a forme singolari e plurali (" società e" società "), mentre se il plurale è stato digitato correttamente, dovresti fare due ricerche separate.


8
Che dire di bambini, topi, coltelli, lupi, mans, womans, mogli e denti? Tutto è valido per evitare le temute "due ricerche separate" .
Tulains Córdova,

3
Sono parziale anche per i lupi sui lupi ...
Jimmy Hoffa,

2
Intendi davvero rinominare gli identificatori molto spesso nel tuo flusso di lavoro? Sembra un po 'eccessivo assumere tutta la stranezza cognitiva dei nomi scritti male nel codice solo per supportare una funzione che non potrebbe mai essere usata.
Kent A.

10
Credetemi, non volete applicare un'operazione di ricerca e sostituzione su una base di codice di grandi dimensioni per una parola come "azienda" senza un vincolo di "solo parole intere". Quindi dovrai usare anche due ricerche separate.
Doc Brown,

2
Due. Separato. Ricerche.
Tulains Córdova,

Risposte:


24

Ogni ricerca e sostituzione di questo tipo deve essere eseguita con cura e ogni modifica deve essere controllata manualmente per evitare, ad esempio, di "accompagnare" in un commento che diventa "acvendor" con la modifica dell'azienda / fornitore. Pertanto, due ricerche distinte per "società" e "società" non dovrebbero creare un sovraccarico significativo rispetto al tempo impiegato per ispezionare e approvare ogni modifica.

Quindi parole errate per raggiungere una sola ricerca offrono gli aspetti negativi di apparire cattivi ed essere più difficili da leggere di quanto non sia necessario, senza offrire alcun evidente vantaggio.


11
E, con il miglioramento degli strumenti di refactoring, la ricerca globale e la sostituzione basate solo sul testo stanno diventando il modo meno affidabile per rinominare un identificatore.
Kent A.

Questo non sarebbe un problema usando una ricerca "solo parole intere", come menzionato da Doc Brown.
SHNC,

6
@ user3047082, la ricerca di parole intere non corrisponderebbe nemmeno a "società", rendendo l'intera domanda piuttosto inutile ...
David Arno,

6

Suppongo che stai parlando di rinominare i file di codice sorgente. Con gli IDE di oggi, ciò dovrebbe sempre essere fatto con gli strumenti di refactoring dell'IDE. Se il tuo IDE non ha questo, considera di passare a un altro IDE. La maggior parte degli strumenti di refactoring IDE mantiene anche una cronologia di refactoring, dandoti la possibilità di "annullare" rapidamente se non ti piacciono i risultati del refactoring. Usando la ricerca / sostituzione, potresti non avere la possibilità di annullare l'intera serie di modifiche (a meno che tu non possa utilizzare gli strumenti di controllo delle revisioni e tornare alla versione precedentemente impegnata). Inoltre, usando gli strumenti di refactoring sei più sicuro dal cambiare inavvertitamente qualcosa che non intendevi cambiare.


3
Per chiunque abbia contrassegnato questa risposta come di bassa qualità: sebbene non risponda rigorosamente alla domanda come posta, affronta il quadro più ampio del perché si vorrebbe usare un tale schema di denominazione e un modo migliore per svolgere lo stesso compito. Ho votato "sembra OK" alla recensione della bandiera e ho aggiunto un voto.

Grazie @Snowman. È la natura umana, quando in un'area sconosciuta, inquadrare una domanda basata sulla propria mentalità (inesperta). Sì, mentre non ho risposto alla domanda reale, la mia ipotesi su ciò che è stato veramente chiesto era basata su altri indizi nella domanda. I plurali che ho incontrato di più provengono da strumenti di generazione del codice, ad esempio XSD-to-POJO, Hibernate / JPA reverse engineering dal database, ecc. In sostanza, se questi plurali sono nel codice e all'autore non piaceva la scelta di plurali, quindi molto probabilmente non sono stati scritti dall'autore e più probabilmente sono stati generati automaticamente.
javabeano,

-9

Sì! Sì! Sì! Ha perfettamente senso farlo. E lo faccio da anni.

Divulgazione 1: l'inglese non è la mia lingua madre.

Disclosure 2: La mia conoscenza della grammatica inglese è notevolmente migliore di quella del madrelingua medio.

Disclosure 3: Quando si tratta di comunicare con gli umani, sono una veemente grammatica nazista.

E ora che queste rivelazioni sono fuori mano, lasciatemi dire che la grammatica inglese non ha posto nel codice. Vedete, ecco perché si chiama codice e non prosa . Si suppone che abbia una certa somiglianza con un linguaggio compreso dagli umani, ai fini della leggibilità, ma a parte questo, ciò di cui abbiamo principalmente bisogno dal codice non sono le qualità della prosa; sono altre qualità più tecniche, come precisione , non ambiguità e terseness . Ecco perché la sintassi C di if( x != y ) y++;è molto preferibile alla IF X IS NOT EQUAL TO Y THEN ADD 1 TO Y END-IF.sintassi di Cobol. La presunta desiderabilità dei compilatori che comprendono il linguaggio naturale è un errore, e non crederci sulla parola, guarda cosa ha da dire Oldsger al riguardo:Edsger W. Dijkstra, Sulla follia della "programmazione in linguaggio naturale" .

Un'altra qualità che è importante è la calcolabilità degli identificatori . Il fatto che una proprietà chiamata Colorpossa sempre essere letta tramite un metodo chiamato getColor()e scritto tramite un metodo chiamato setColor()è di fondamentale importanza. Questi identificatori sono calcolabili dal nome della proprietà, quindi non è necessario conoscerli a memoria. Se un programmatore dovesse scegliere una coppia di metodi chiamati getColor()da un lato, ma colorize()dall'altro lato, i loro colleghi prenderebbero giustamente in considerazione questo sabotaggio. Ecco quanto è importante la calcolabilità dell'identificatore.

Inoltre, possono essere scritti strumenti di programmazione (e molti di essi sono stati scritti, ad esempio, Hibernate ) che possono calcolare questi nomi. Senza la calcolabilità del nome dell'identificatore dovresti usare una sintassi aggiuntiva (ad es. In ibernazione, annotazioni extra) per specificare ad ogni strumento esattamente come creare ogni singolo nome identificativo, o precisamente quale nome ad hoc hai dato a ciascuna entità.

Quindi, la calcolabilità dell'identificatore è importante, mentre allo stesso tempo la grammatica inglese è irrilevante (poiché non stiamo programmando il linguaggio naturale), quindi per poter calcolare il nome di una raccolta di entità aggiungendo sempre "s" al nome di una sola istanza ha perfettamente senso, non importa il fatto che viola la sensibilità della maggior parte delle persone (inclusa la mia) in inglese.

E che ci piaccia o no, questa è la tendenza del futuro. La lingua madre della maggior parte dei programmatori sul pianeta non è più l'inglese e la tendenza è quella di continuare molto forte in questa direzione. (Inoltre, non sarei nemmeno disposto a scommettere denaro sul suggerimento che l'inglese è la lingua madre della maggior parte dei programmatori che lavorano negli Stati Uniti in questo momento.) Queste sono persone che, in larga misura, quando provano a calcolare il nome di una collezione dal nome di una singola istanza di "azienda", semplicemente aggiungerà una "s", e la forma "aziende" non passerà nemmeno per la testa. Per una percentuale sempre maggiore di programmatori nel mondo, la conoscenza delle peculiarità della lingua inglese non aggiunge alcun valore al loro lavoro, ma lo rende solo leggermente più difficile.


7
1. Gli indici e gli indici sono entrambi plurali di indice validi. Ti sbagli nella tua convinzione che solo uno sia corretto, ad es. Vedi oxforddictionaries.com/definition/english/index . 2. Una X privata, che può essere letta tramite getX e scritta su setX non è privata; è un valore pubblico. 3. Il codice è un documento di progettazione. Informa un compilatore su come generare "codice macchina", ma, cosa ancora più importante, descrive quel progetto in un modo che altre persone possono facilmente leggere. La leggibilità è uno dei due aspetti più importanti del codice (la testabilità è l'altro).
David Arno,

3
Il codice è scritto per due motivi: per gli umani da leggere e per i computer da eseguire. Alcuni direbbero che il codice sorgente è scritto principalmente per essere letto dagli umani, poiché la maggior parte viene immediatamente compilato in codice byte prima che il computer lo esegua. Quindi, mentre ai computer potrebbe non interessare la grammatica corretta, gli umani certamente lo fanno.
Eric King,

3
Mentre l'inglese potrebbe non essere la tua lingua madre, potrebbe essere la persona successiva a leggere il tuo codice. Probabilmente confonderà anche altri della tua lingua madre che hanno imparato l'inglese.
Andy,

2
o farai solo del male a quelli che prendono il doppio Companysquando dovrebbe essere Companies. Dopotutto, l'intero punto del codice che di solito scriviamo è di fatto avvicinarlo al linguaggio naturale.
Andy,

2
Comunque sia, trovo quel foglio pieno di merda. Il codice è tra linguaggio naturale e bytecode. Se non fosse per facilitare la comprensione umana del codice, non ci sarebbe alcun motivo non solo per inserire direttamente il bytecode.
Andy,
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.