質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.38%

  • C#

    9489questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Visual Studio

    2505questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C# ?の意味が分からない

解決済

回答 7

投稿

  • 評価
  • クリップ 0
  • VIEW 661

yukineko184

score 2

前提・実現したいこと

すごい初歩的なことかもしれないのですがコード上の記号の意味が分かりません・・・
「return (a1 * a2 < 0 && dist < radius) ? true : false;」
この一文の「?」が何を指示しているのかがわかりません

発生している問題・エラーメッセージ

無し

該当のソースコード

bool LineVsCircle(Vector p1, Vector p2, Vector center, float radius)
        {
            Vector lineDir = (p2 - p1);                   // パドルの方向ベクトル
            Vector n = new Vector(lineDir.Y, -lineDir.X); // パドルの法線
            n.Normalize();

            Vector dir1 = center - p1;
            Vector dir2 = center - p2;

            double dist = Math.Abs(DotProduct(dir1, n));
            double a1 = DotProduct(dir1, lineDir);
            double a2 = DotProduct(dir2, lineDir);

            return (a1 * a2 < 0 && dist < radius) ? true : false;
        }

試したこと

自身でも調べてみたのですが、なかなか答えがわかりません
http://nn-hokuson.hatenablog.com/entry/2017/08/21/193912
↑こちらのサイトを参考に学習しています。

補足情報(FW/ツールのバージョンなど)

Visual Studio 2019 Community

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 7

+12

最近別の言語で同様の仕組みを聞く質問がありましたが、それについた回答で良い(割とそこに目がいかない、けど「なるほど」となる)探し方を提示してくれています。

追記:
確かに「魚か釣り方か」というところで賛否両論あるかとは思いますが、
「こういう探し方もある」というのが分かれば今後分からないことがあったときに自己解決の手法の1つとして有用と思い、提示の回答を紹介させていただいています。
私も大体記号そのまま入れてヒットしない経験を沢山しているので、ぜひ取り入れてもらいたいと思っています。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/16 11:35

    >この評価機能に価値が感じられないですね.
    段々機能しなくなっている雰囲気は感じます。ひしひしと。
    +はともかくーはきちんと機能させてほしいとは思ってます。質問の低評価と同じように理由を選ばせるとか〇字以上のコメント必須にするとか。

    キャンセル

  • 2019/07/16 11:45

    高評価・低評価ともに理由がわかりにくい時にはコメントするようにしています。katoy さんのその回答には低評価を入れていませんが、課題に魚だけ与えると、課題が本来の機能を損なうので、良くないと思います。

    キャンセル

  • 2019/07/16 13:26 編集

    課題は難しいところですね。一応「非推奨」というのがありますし(宿題代行)
    質問者も質問するときに最も気を付けなければならないところではあります。
    https://teratail.com/help/question-tips#questionTips1-1
    >作業依頼のような投稿をして、課題や仕事を無償でやってもらえる場ではありません。
    あなたがそのようなつもりで質問しているのだと他のユーザーから誤解されないように、丁寧な質問を心がけましょう。

    今回の質問は課題でもなんでもないし「自身でも調べてみたのですが」というところから「探し方さえなんとか分かれば自分で解決できそう」というのがありますしね。
    過去質問で既に言及されているということが分かれば、積極的にサイト内検索使ってくれそうに思いますし。
    「課題で」といきなり質問に書かれている場合や課題であることが明らかな場合は、質問に指摘だけして静観かなぁと(特に多いのが「PHP 掲示板」)
    そこにつく回答が解決可能なものであれば悪いとは言い切れないし、どこまでを「本人のためか」と思うかにもよると思います(それもスタンスの違いかなぁと)
    中には「とりあえず魚(しかもかなり高級料理並みに味付けされた)を与えておいてそこからヒントを得てほしい」と思って活動している方もいるので、一概にダメとは言い切れないですね。
    魚をまんまもらってやっていって成長できていない自分に気が付いたときにちゃんと立ち上がろうとできるならそれで良いし、できなかったら元々資質がなかったと諦められるかもしれませんし。

    なんか 長くなってしまった。

    キャンセル

+7

mts10806 さんの回答とダブルところがありますが・・・

たぶん質問者さんの方でもググって調べたと思いますが、キーワードの選択が良くなくて期待する記事がヒットしなかったのではないかと想像しています。キーワードの選び方は重要です

例えば、今回のケースでは、c# ? をキーワードにググってもダメですが、c# question mark でググると以下の記事が最初にヒットします。ここに質問者さんの求める答えがあります。

?: 演算子 (C# リファレンス)
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/operators/conditional-operator

ただし、? は三項条件演算子だけに使われるわけではないです。他に、

Null 条件演算子 ?. および ?[]
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/operators/member-access-operators#null-conditional-operators--and-

とか、

?? 演算子 (C# リファレンス)
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/operators/null-coalescing-operator

・・・がありますが、それらの記事も一番上に紹介した記事の下の方の「関連項目」からリンクが張ってありますので、必要な情報にたどり着けると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/12 11:55

    私の回答は私自身が「こういう探し方もあるんだ」と思った回答を紹介しているだけなので・・。

    キャンセル

  • 2019/07/12 12:00

    mts10806 さんの回答は自己解決するための重要なヒントだと思います。なので + 評価させていただきました。

    キャンセル

  • 2019/07/12 12:02

    ありがとうございます。

    キャンセル

checkベストアンサー

+5

「三項演算子」で調べてみましょう。

? の前にある式が、 判定に使う計算式です。
この式の結果によって、処理で使う値を分けています。

計算式  ? trueの時に使う値 : false の時に使う値

if (a1 * a2 < 0 && dist < radius) {
    return true;
} else {
    return false;
}

質問されている式はこれと同じだといえば伝わるでしょうか。

ちなみに、 return 文以外でもよく使います。

String str = (判定式) ? trueのとき設定したい文字列 : falseのとき設定したい文字列;

こんな感じです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+4

以下と同じ意味です。三項演算子と呼ばれ、1行で省略して書きたいときによく使われます。

if(a1 * a2 < 0 && dist < radius) 
{
  return true;
}
else
{ 
  return false;
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+3

三項演算子

https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/operators/conditional-operator

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/12 11:24

    この例だと return (a1 * a2 < 0 && dist < radius); と書けば良さそうだが.

    キャンセル

  • 2019/07/12 11:40

    タシカニィ

    キャンセル

+2

まずは "c#" "?" 文法 で検索します。
そのなかの 例えば、
C# の式と文の一覧 - 未確認飛行 を開いて、
ページ中で ? を検索します。(ctrl-f して 検索窓に ? 指定)
これをとっかかりにさらにしらべて行けば 知りたいことにいきつけると思います。

イメージ説明

イメージ説明

参考情報

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

-1

azuapricotさんの回答が私の求めていた答えそのものだったので、ベストアンサーにさせていただきました。
SurferOnWwwさんの回答にある、検索方法もこれから参考にさせていただきます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/16 11:11

    私は低評価していませんが、「回答」は質問者の結果発表のような使い方をするためにあるわけではないので、
    面倒なのであればベストアンサーに選んだ回答、他に参考になった回答にコメントを個別につけてあげてください。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.38%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • C#

    9489questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Visual Studio

    2505questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。