cpp-intro icon indicating copy to clipboard operation
cpp-intro copied to clipboard

5章の論理否定演算子のコードについて

Open chiepomme opened this issue 6 years ago • 1 comments

5章 https://github.com/EzoeRyou/cpp-intro/blob/master/005-the-restaurant-at-the-end-of-the-branch.md の、論理否定の説明のところでうまく理解ができず質問させていただきたく issue を立てさせていただきました。

以下の部分で「ロケットが発射可能なときに実行される」というコメントがあるのですが、コードは「ロケットが発射可能ではないときに実行される」ように読めます。ただ、そうすると一つ前の例と is_rocket_ready_to_launch() の中以外は同じになってしまいますし、実行される内容も発射可能ではないはずなのに、発射シーケンスに入ってしまうように読めます。

int main()
{
    // ロケットが発射可能なときに実行される
    if ( !is_rocket_ready_to_launch() )
    {   // カウントダウン
        std::cout << "3...2...1...Hallelujah!\n"s ;
    }
}

本文の説明の方も、

論理否定演算子を使うと、falseのときのみ実行されてほしい条件分岐が書きやすくなる。 同じように、trueのときに実行されてほしくない条件分岐も書ける。

と2つの例が同じ条件について例示をしているように読めてしまい、この2つでどういう違いがあるのかわからず、間違いであるのか私の理解が追いついていないのかわからず困っております。

chiepomme avatar Dec 03 '19 08:12 chiepomme

trueのときに実行されてほしくない条件分岐も書ける。

が主題なのだからこのようになるべきだったのではないでしょうか?

// ロケットが発射可能かどうかを返す関数
bool is_rocket_ready_to_launch()
{
    // もういいよ
    return true ;
}

int main()
{
    // ロケットが発射可能なときに実行されてほしくない
    if ( !is_rocket_ready_to_launch() )
    {   // もうしばらくそのままでお待ちください
        std::cout << "Standby...\n" ;
    }

}

yumetodo avatar Dec 03 '19 17:12 yumetodo