2012-01-13 5 views
3

저는 현재 학생용 프로그래머로서 Qt가있는 회사의 GUI를 디자인하고 있습니다. 단지 웹에서 대답을 찾을 수없는 간단한 질문이 있습니다. 누군가가 전에 물어 보았던 것 같아서, 만약 당신이 그 대답이 어디서 이드인지를 안다면 레퍼런스에 만족해야합니다. 내 질문은; C++의 부울 데이터 유형은 if 문을 사용하여 처리 할 수 ​​있습니다. 그래서 부울 값 중 하나 또는 제로 그래서 당신은 정말 여기에 무엇을 찾고이If 문을 사용하여 Bool 값 처리

bool trueOrFalse() 
{ 
    myclass temp; 
    QString tempstr; 
    double candidate; 
    bool validate; 

    tempstr = ui->tableWidgetInjectionLocations->item(i,9)->text(); 
    candidate = tempstr.toDouble(&validate); 
       if(validate == true) 
       { 
        temp.tempProperty = candidate; 
       } 
       else 
       { 
        QMessageBox error; 
        error.setText("Error"); 
        error.exec(); 
       } 
    if (validate == true) 
     { 
     return true; 
     } 
    else 
     { 
     return false; 
     } 
} 

같은이 부울 함수의 마지막 부분에 작업을 수행 할 수 있습니다. 반환 값을 사용할 때이 함수가 보유 할 값을 실제로 반환하거나 키워드 반환을 부적절하게 사용합니까? 유효성 검사가 끝나면 다른 기능으로 진행할지 여부를 나타내는 기능을 사용할 수 있기를 원합니다. 제 비판을 건설적인 자세로 유지하십시오. 학생으로서 나는 향상에만 관심이 있습니다.

+4

마지막'if' 문 전체를 삭제하고 단순히'반환 유효성 검사를 말할 수 있습니다;' . 그보다는 합리적으로 보입니다 - 값으로 'bool'을 반환하기 때문에 함수에 의해 "유지"되지 않습니다 – Flexo

+0

이 코드가 잘못되었다고 생각합니까? 나는 당신의 질문이 실제로 여기에 있음을 이해하는 것을 어렵게 생각하고 있습니다. – mattjgalloway

+1

StackOverflow에 오신 것을 환영합니다! – fbrereto

답변

11

당신이 함수를 호출 할 때마다 return 문이 그대로 반환 사용하여 반환 값과 이전

if (validate == true) 

.

그래서 당신은 당신의 프로그램에서 다른 곳이 코드를 작성하는 경우 :

bool returnValue = trueOrFalse(); 

다음 returnValue 변수는 trueOrFalse() 함수에 의해 반환 된 무엇에 부울 값에 해당이 포함됩니다.

함수 자체는 값을 "보유하지"않으므로 함수 호출자는 함수 호출이 완료된 후에 값을 보유 할 변수를 정의합니다. 두 번째 질문에 대해서는


, 당신 있습니다 올바르게 return 문을 사용하지만, 실질적으로 trueOrFalse() 기능의 코드를 단순화 할 수 있습니다.

if (validate == true) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 

당신이 필요로하는 모든이입니다 : 대신이의

return validate; 

validate 지역 변수가 이미 bool이기 때문에!

부울 값 (true)에 대해 부울 값을 검사하는 중복성을 제거하여 이상한 오류가 들쑥날쑥하게 들어가는 것을 방지하고 코드를 읽고 이해하기 쉽게 만듭니다.

사실, 부울 값 (bool)으로 작업 할 때 언제든지이 일반 패턴을 사용할 수 있습니다.오히려 문자 false 또는 true에 대해 그들을 비교하는 것보다, 그냥 쓸 수 있습니다 :

if (validate) // test for truth 
{ 
    // do whatever... 
} 

또는

if (!validate) // test for falsity 
{ 
    // do whatever... 
} 
+0

경우 그 이유는 내가 형식 이 (검증 == true)를 {사실 반환; }? 다른 { 을 return false; } if (validate1 == true && validate2 == true && validate3 == true && ... ) 내 정품 확인 문이 true를 반환하기 때문에 if 데이터가 필요하다면 입니다. vecto에 추가하다 r을 생성 한 다음 부모 함수에 true 값을 제공합니다. 나는이 경우에 맞습니까? –

+1

예, 맞습니다. 그러나 Blastfurnace와 마찬가지로 간단한 구문 (if (validate1 && validate2 && validate3))을 사용할 수 있습니다. 제대로 작동하는 이유는'&& '연산자로 인해 모든 케이스가 참임을 보장하기 때문입니다. –

+0

그렇다면 if 문은 데이터가 사실인지를 어떻게 알 수 있습니까? 접두어가없는 한 bool 값이 모두 참이기 때문입니까? trueOrFlase 함수가 true 또는 false bool인지 여부를 선언하려면 if 문이 필요하므로 다른 함수에서 진행 여부를 결정할 때 사용할 수 있습니다. –

7

을 테스트하고 다른 부울을 반환 할 이유가 없다

return validate; 

if (validate == true) 
     { 
     return true; 
     } 
    else 
     { 
     return false; 
     } 

를 교체합니다.

당신이 그것에 인 동안, 대체

if (validate) 
관련 문제