2016-02-22 15 views
8

Molto spesso vedo il codice come questo (C, C++ e Java a volte):Parentesi intorno ai valori di ritorno - perché?

return (value); 

non vedo alcun beneficio di queste parentesi. Quindi la mia domanda è, i programmatori suppongono che return sia una sorta di funzione con il valore restituito come argomento o ci sono davvero casi in cui queste parentesi hanno senso?

Capisco che una domanda simile è già stata posta here, ma è correlata solo a ANSI C. Mi chiedo se ci sono aspetti specifici di C++ o Java a cui non è stata data risposta.

+1

'return' è un'istruzione e le _parentheses_ (" parentesi "è usata per' [] ') sono inutili. Grammaticamente sono parte dell'espressione, non l'affermazione. Gli stili di codifica moderni spesso scoraggiano il loro utilizzo. – Olaf

+0

@WillBriggs: Beh, lo fa grammaticalmente. Potrebbe essere molto pertinente per l'analisi del codice. – Olaf

+0

Le parentesi come queste sopprimono gli avvisi di conversione dal tipo di valore al tipo restituito della funzione? So che altri avvertimenti, come i compiti in dichiarazioni condizionali, possono essere soppressi con parens extra. – Sqeaky

risposta

17

quanto riguarda C

parentesi sono messi dove c'è un'espressione e vuole il valore restituito essere quel valore dell'espressione. Anche se le parentesi non sono necessarie. E 'del tutto ok per scrivere qualcosa di simile

return x + y; 

programmatori non rendono return (x + y); per renderlo più leggibile.

Quindi, mettere le parentesi è una questione di opinione e pratica.


Per quanto riguarda C++

C'è un caso in cui arcana parentesi questioni. Citando this domanda

int var1 = 42; 
decltype(auto) func1() { return var1; } // return type is int, same as decltype(var1) 
decltype(auto) func1() { return(var1); } // return type is int&, same as decltype((var1)) 

È possibile vedere i valori restituiti sono diversi, e che è a causa delle parentesi. Puoi leggere la risposta this per capire in dettaglio.


Rispetto a java, le parentesi non fanno alcuna differenza.

Coding convenzione suggerisce di andare con

return x + y; 

di capire di più, leggere this risposta.


NOTA: Non so molto su Java e C++. Tutti i contenuti nella mia risposta su java e C++ sono presi da altre risposte. L'ho fatto per consolidare le diverse convenzioni per le tre lingue.

+0

Sommario: "Quindi, mettendo le parentesi è una questione di opinione e pratica ". Grande!! –

+4

"per renderlo più leggibile" - non è sicuro, può anche essere fuorviante perché sembra una chiamata di funzione. –

+4

@FrankPuffer, no non lo è. – SergeyA

4

Tecnicamente, non vi è alcun motivo per parentesi l'espressione data a return. È davvero una questione di gusti.

Detto questo, in genere metto in parentesi l'espressione return se utilizza operatori booleani. Poiché tali operatori sono generalmente visti come parte di un while o if, rende più chiaro che si desidera fare qualcosa con quel valore oltre a saltare a mio parere.

int out_of_range(int x) 
{ 
    return ((x < 1) || (x > 10)); 
} 
1

Per lo più legacy. K & R C Programming Language (1978) mostra i ritorni usando la parentesi.È possibile che alcuni vecchi compilatori C lo richiedessero, ma non ne sono sicuro.

Problemi correlati