Des accolades sans mot-clef ?!

Bonjour 4ian,

J’ai vu ça dans le code source des événements :

[code]void ArrayMapEvent::Render(wxBufferedPaintDC & dc, int x, int y, unsigned int width) const
{
EventsRenderingHelper * renderingHelper = EventsRenderingHelper::GetInstance();
const int functionTextHeight = 20;

//Draw event rectangle
dc.SetPen(*wxTRANSPARENT_PEN);
dc.SetBrush(wxBrush(wxColour(255, 255, 255), wxBRUSHSTYLE_SOLID));
{
    wxRect rect(x, y, width, GetRenderedHeight(width));
    wxColor color1 = selected ? renderingHelper->selectionColor : (IsDisabled() ? renderingHelper->disabledColor2 :renderingHelper->eventGradient1);
    wxColor color2 = IsDisabled() ? renderingHelper->disabledColor : renderingHelper->eventGradient2;
    wxColor color3 = IsDisabled() ? renderingHelper->disabledColor : renderingHelper->eventGradient3;
    wxColor color4 = selected ? renderingHelper->selectionColor : (IsDisabled() ? renderingHelper->disabledColor2 :renderingHelper->eventGradient4);

    renderingHelper->DrawNiceRectangle(dc, rect, color1, color2, color3, color4, renderingHelper->eventBorderColor);
}

[/code]

Tu as remarqué les accolades juste avant wxRect et juste après renderingHelper, elles servent à quoi ?

T’a quelque chose contre mes accolades ? :smiley:

Plus sérieusement, j’avoue qu’ici elles ne servent à rien. Mais utiliser le C++ autorise tout à faite la création de blocs de code de ce genre, en mettant des accolades. En pratique, je me sert d’une telle construction quand je veux pouvoir réutiliser plusieurs fois la même variable. Par exemple, si on voulais dessiner plusieurs rectangles :

{
        wxRect rectangle(..DesParamètres..);
        renderingHelper->DrawNiceRectangle(dc, rectangle, ..);
}
{
        wxRect rectangle(..DesAutresParamètres..);
        renderingHelper->DrawNiceRectangle(dc, rectangle, ..);
}
{
        wxRect rectangle(..EncoreDAutresParamètres..);
        renderingHelper->DrawNiceRectangle(dc, rectangle, ..);
}

Par besoin comme tu vois de se casser la tête à trouver un nom différent pour chaque rectangle, vu que chaque rectangle créé est ensuite détruit directement à la fin de l’accolade. Pas de risque de faire un copier coller et d’oublier de renommer un rectangle par un autre. Ca permet aussi d’éviter de réutiliser par mégarde une variable, vu que la portée de tout ce qui est déclaré entre accolade est limité aux accolades. ( Tous les objets créés dans l’accolade sont détruits à la fin ).

Pour parler plus théoriquement, ça n’a rien d’exceptionnel : Tu en met partout dès que tu fais un if ou un while. Simplement, on a tellement l’habitude d’en mettre qu’on ne se rend pas compte que la syntaxe d’un if, c’est :

if ( expression ) instruction 

Mais comme souvent on veut mettre plusieurs instructions dans le if, on utilise un bloc de code, dont la syntaxe en C++ est “{ instructions }”, ce qui donne :

if ( expression ) { ... }

Ok,

Non, j’ai rien contre tes accolades. :laughing: