2009-12-16 14 views
7

Supponendo che un progetto stia usando il prefisso della classe C per un lungo periodo e sarebbe una perdita di tempo cambiare in una fase avanzata e che la persona che ha originariamente scritto la guida di stile sia stata investita da un bus e che non ci sono già strutture nel codice ...Se usiamo il prefisso C per le classi, dovremmo usarlo anche per struct?

È una domanda piuttosto banale, ma se una guida di stile in codice C++ dice "usa C per il prefisso del nome classe", questo dovrebbe essere inteso anche come uso C per il prefisso struct anche, o dovremmo usare qualcosa di diverso, come S per esempio.

class CFoo { }; 
struct CBar { }; 

... o ...

class CFoo { }; 
struct Bar { }; 
+6

Abbiamo Boh ... Chiedete al vostro team che cosa hanno significato. –

+1

Bene, la persona iniziale che ha scritto la guida di stile è stata investita da un autobus (aggiornerò la mia risposta). –

+0

Se questo è un vecchio progetto, quale stile viene usato per le strutture esistenti? –

risposta

12

Se la guida di stile non specifica, vorrei (probabilmente) usare le "structs are classes con tutti i membri public" -rule per usare anche C per le strutture, sì. O penserei "ah, ecco una scappatoia per aggirare quella stupida regola iniziale, yay" e non usarla. In altre parole, questo è altamente soggettivo.

+3

Haha, scappatoia, sono d'accordo! +1 –

25

Semplice risposta - non utilizzare il prefisso C per le classi. Questa è la notazione ungherese del tipo più inutile. Probabilmente è tempo di riscrivere la guida allo stile. Francamente (e parlando come qualcuno che ha scritto molte delle cose), molte di queste guide sono spazzatura e/o sono state scritte molto tempo fa e non sono mai state aggiornate.

+3

Dato che la domanda riguarda la coerenza della guida di stile, in pratica dici che non hai una risposta ... – xtofl

+6

Ho sempre pensato che questa fosse la notazione mongola ... –

+1

La notazione è piuttosto inutile, io d'accordo, ma quella non era la domanda, come diceva xtofl. La domanda era se fosse stato usato per le classi, quindi dovrebbe essere usato per le strutture? –

5

Se la guida di stile del codice non specifica, trovare il codice che segue la guida di stile e vedere cosa è già stato fatto.

Se non c'è codice che segue già la guida di stile, raggiungere un accordo con tutti coloro che sono coinvolti nel progetto.

Se nessun altro è coinvolto nel progetto, basta decidere ed essere coerenti.

3

Penso che questa linea guida sia stupida e confusa ... Il fatto che tu abbia dovuto fare questa domanda lo dimostra.

Gli stili di codifica hanno lo scopo di aumentare la leggibilità; è ovvio se un identificatore è una classe o meno, soprattutto se si utilizza un IDE decente con suggerimenti del mouseover.

+0

Questo tipo di guida allo stile deriva in effetti dall'era pre-ideologica. Questo non lo rende inutile. – xtofl

+1

Bene, il rifiuto di utilizzare un IDE per qualche motivo e quindi ricorrere a queste soluzioni alternative è spararsi ai piedi. –

+0

Le guide di stile, in realtà, non hanno nulla a che fare con gli IDE. Come altri hanno affermato, le guide dovrebbero essere di leggibilità e coerenza. Aiutano anche nelle revisioni del codice (al minimo per accendere le persone che non le seguono). –

2

Generalmente usiamo il prefisso C per le classi e il prefisso T per le strutture che non hanno metodi (cioè le strutture "C").

+0

Lo stesso qui. (-blocco per soddisfare il limite di 15 caratteri) – n0rd

+2

E se un metodo viene inserito nella struttura o nella classe, il nome deve essere modificato (per soddisfare la linea guida) e tutto il codice esaminato per propagare la modifica del nome. Voto primario contro ungherese e stili simili. –

2

Per me sarebbe sceso a:

Vuoi i lettori del vostro codice di distinguere immediatamente tra i due tipi di dichiarazione?

Mentre l'uso del prefisso è generalmente di cattivo gusto, considerare attentamente la vista del gestore del codice. È utile per loro pensare: "Ah! No prefisso C, questa è una struttura". Usare una struct al posto di una classe può implicare qualcosa di specifico nel tuo codice. In caso contrario, ha più senso continuare a utilizzare il prefisso per il mantenimento del manutentore.

2

Se una guida di stile non ha lo scopo di facilitare la leggibilità, la coerenza e la correttezza, dovrebbe essere modificata fino a quando non viene eseguita o gettata nel file circolare (cestino).

Inoltre, se le persone non lo seguono, devono essere aggiornati in modo che sia più semplice da seguire (o gli strumenti modificati per semplificare la codifica alla guida).

0

In base al modello esistente di prefisso C per le classi, è necessario il prefisso S per struct, I per l'interfaccia.

Inoltre, prefisso E per enum, D per delegato, D per directory, F/M per funzione/metodo, F per file, F per campo, N per spazio dei nomi, P per pagina, P per parametro, P per proprietà, R come valore di ritorno, v come variabile.

Come di variabili, prefisso

  • una per matrice
  • b per boolean
  • c char
  • f per galleggiare
  • g per GUID
  • h per la maniglia
  • i per int
  • j per json
  • k per chiave
  • l listino
  • m per MarshalByRefObject
  • n per Annullabile
  • o per oggetto
  • p per puntatore
  • q per la coda
  • r per registro
  • s per singolo
  • t per TimeZone
  • u per Uri
  • v versione
  • w per WeakReference
  • x da XmlDocument
  • y per yoda
  • z per ZipFile

Esempio

Buono:

namespace NGqqnbig.NConsoleApplication1 
{ 
    class CProgram 
    { 
     static void Main(string[] pasArgs) 
     { 
      FMain(pasArgs); 
     } 

     static void FMain(string[] pasArgs) 
     { 
      var vsLine= CConsole.FReadLine(); 
      var viSVN= CConvert.FToInt32(vsLine); 

      var occCVC = new CCCCVC(); 
      occCVC.PICVC = viSVN; 
     } 
    } 

    class CCCCVC 
    { 
     private int fiCVC; 

     public int PICVC 
     { 
      get { return fiCVC; } 
      set { fiCVC = pivalue; } 
     } 
    } 
} 

Bad:

namespace Gqqnbig.ConsoleApplication1 
{ 
    class CProgram 
    { 
     static void Main(string[] args) 
     { 
      var line= Console.ReadLine(); 
      var svn= Convert.ToInt32(line); 

      var cardVerificationCode = new CreditCardVerificationCode(); 
      cardVerificationCode.VerificationCode = svn; 
     } 
    } 

    class CreditCardVerificationCode 
    { 
     public int VerificationCode { get; set; } 
    } 
} 
Problemi correlati