Functie Declaratie Parameter Best Practices benoemen (C ++)

In een functie-declaratie, terwijl de parameters niet hoeven te worden benoemd, heeft het de voorkeur om ze een naam te geven? Wat zijn de voor- en nadelen hiervan?

4

6 antwoord

Het voordeel van een naamgeving is dat u ernaar kunt verwijzen in de documentatie. (Dit omvat uw editor/IDE die ze ophaalt en aan u presenteert als hints wanneer u een oproep naar een dergelijke functie typt.)

Een nadeel zou zijn dat namen kunnen veranderen afhankelijk van de uitvoering van de functie, behalve dat de namen in een functieverklaring kunnen verschillen van die in de definitie van de functie. (IOW: ik zie geen nadeel.)

7
toegevoegd
+1 maar je zou ook kunnen vermelden dat als je variabele namen in een declaratie plaatst, IntelliSense (of wat dan ook) deze kan ophalen. Dit is niets meer dan documentatie, maar een nuttige uitwerking ervan.
toegevoegd de auteur John Dibling, de bron
@JohnDibling: Inderdaad, ik was dat vergeten!
toegevoegd de auteur sbi, de bron

Vooral om documentatie-redenen

3
toegevoegd
Onderhoud is ook gemakkelijker als de definitie en verklaring identiek zijn (een puntkomma geven of nemen)
toegevoegd de auteur Paul R, de bron

Het benoemen van parameters heeft een aanzienlijk voordeel wanneer u werkt met IDE's die automatische aanvulling ondersteunen. Wanneer u begint met het typen van de naam van uw functie, geeft de IDE een lijst met suggesties weer. Het zien van findUser (string firstName, string lastName) vertelt veel meer dan alleen findUser (string, string) .

3
toegevoegd

Dit is meer een kwestie van stijl. Persoonlijk, als ik een functie-declaratie zie zonder benoemde parameters, vind ik het moeilijk om te lezen. Ik denk dat hoe sterker je C ++ kunt typen, hoe beter het is.

1
toegevoegd

Een voordeel is dat ze meer informatie kunnen overbrengen als de parametertypen hetzelfde zijn

Overwegen

CoordSystem CreateCoordinateSystem( const UnitVector& xdirection, 
    const UnitVector& ydirection, const UnitVector& zdirection
)

over-

CoordSystem CreateCoordinateSystem( const UnitVector& , 
    const UnitVector& , const UnitVector& )
1
toegevoegd

In de verklaring zijn er eigenlijk geen programmatische voor- of nadelen. Er is echter één stijlvoordeel dat ik kan bedenken:

Wanneer u geen parameter in een functie gebruikt, kunt u deze parameter niet in de aangifte EN de definitie vermelden:

void foo(int);

void foo(int)
{
}

Het benoemen van parameters die u niet gebruikt in de definitie is niet illegaal, maar het is een lekwaarschuwing! Het stijlvoordeel dat ik noemde, zou niet de parameters in de declaratie benoemen, zodat iemand die een headerbestand doorbladert, weet dat een bepaalde parameter niet in de definitie wordt gebruikt. Dit is echter alleen als u de niet-benoemde mate synchroniseert tussen de definitie en de declaratie.

Hier is een voorbeeld van wanneer u een parameter misschien niet een naam wilt geven:

class Base
{
    virtual void foo(int a) = 0;
};

class Child1
{
    virtual void foo(int a) { std::cout << a + 1 << std::endl; }
};

class Child2
{
    virtual void foo(int) { std::cout << "mwahaha" << std::endl; }
};

In dit geval krijgt de parameter geen naam, maar moet deze wel worden opgegeven omdat het functieprototype moet overeenkomen met dat van het bovenliggende element.

0
toegevoegd
Ik ga niet stemmen, maar dit is niet precies van toepassing. De vraag had specifiek betrekking op het benoemen van parameters in aangiften , maar het (geldige) punt dat u opgeeft is alleen van toepassing op functie definities .
toegevoegd de auteur John Dibling, de bron