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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

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

Visual Studio

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

Q&A

解決済

7回答

5719閲覧

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

yukineko184

総合スコア16

C#

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

Visual Studio

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

0グッド

0クリップ

投稿2019/07/12 02:16

前提・実現したいこと

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

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

無し

該当のソースコード

C#

1bool LineVsCircle(Vector p1, Vector p2, Vector center, float radius) 2 { 3 Vector lineDir = (p2 - p1); // パドルの方向ベクトル 4 Vector n = new Vector(lineDir.Y, -lineDir.X); // パドルの法線 5 n.Normalize(); 6 7 Vector dir1 = center - p1; 8 Vector dir2 = center - p2; 9 10 double dist = Math.Abs(DotProduct(dir1, n)); 11 double a1 = DotProduct(dir1, lineDir); 12 double a2 = DotProduct(dir2, lineDir); 13 14 return (a1 * a2 < 0 && dist < radius) ? true : false; 15 } 16

試したこと

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

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

Visual Studio 2019 Community

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答7

0

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

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

投稿2019/07/12 02:23

編集2019/07/12 03:43
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/07/12 02:54

なぜ低評価?
m.ts10806

2019/07/12 02:58 編集

低評価された方へ 今回も提示した質問の回答に倣って「C# はてな コロン」とすると そのものの語句を知らなくても公式ドキュメントに辿り着くことができますが、 どう思っての低評価でしょうか。 理由をコメントください。 過去質問の良回答を紹介するのは度々使われるはずですが・・
m.ts10806

2019/07/12 03:02

「良回答にノった」ような形になるのでちょっと過敏な方には反感買うことになるんでしょうか。 となると「過去の質問とその回答の存在意義」が失われるように思いますが。。
Zuishin

2019/07/12 03:10

同じ質問が何度もあるので、同じ回答が何度もあるのは自然なことですけどね。
m.ts10806

2019/07/12 03:18

中には(自身が気に入らない)特定ユーザーに低評価すべく自身が全く触ったことのないカテゴリの質問についた回答を狙うちょっとおかしな輩もいますしね。 1つだけポツンとついた低評価に何も思わないんだろうか。 そんな低評価の使い方していても自分の成長には何のためにもならないのに(むしろその性格が邪魔してる気が)
fana

2019/07/12 04:07

ググり方を書いた人(+5) >>> 質問への回答を書いた人(+1) みたいな評価の付き方にはこのサイト特有の世界観(?)みたいなのを感じる.
m.ts10806

2019/07/12 04:10

fanaさん 質問内容次第ですが「釣り方を教えたほうが後々役に立つ」というスタンスの人が回答者には多いからだと思います。 今回は「自身でも調べてみたのですが、なかなか答えがわかりません」という質問者のコメントから「調べ方が分かれば大丈夫そう」と感じた人も多いのではないでしょうか。
m.ts10806

2019/07/12 04:12 編集

私はむしろfanaさんがコメントで書いた「今回はこう書けば良さそう」というのは非常に大事だと思ってます。
Zuishin

2019/07/12 04:13

ググって見つけられなかった人にはググり方を教えることこそ正解でしょう。二つのものが同時に得られるので。
fuzzball

2019/07/12 04:16 編集

>>fanaさん 丸投げ回答(特に丸投げ質問に対しての)は嫌われる傾向にあるとは思いますね。(って書いている間に3つもコメントが挟まってた‥)
Zuishin

2019/07/12 04:18

先日「探しても詳しい方法が見つかりませんでした」という質問に、探すためのキーワードと、そのまま使えるコード書いたら低評価で、ggrks 的なことを書いた回答がベストアンサーでしたよ。
m.ts10806

2019/07/12 04:20

ひとまず、 今回のような回答をした経緯も追記したので、低評価した人がそれでも低評価のままなら仕方ない(ほぼ私怨と解釈する)ということで。
mutsuki22

2019/07/12 04:23 編集

>「良回答にノった」ような形になるのでちょっと過敏な方には反感買うことになるんでしょうか。 この理論でいくと自分割と引っかる回答があることになってしまうという・・・ >先日「探しても詳しい方法が見つかりませんでした」という質問に、探すためのキーワードと、そのまま使えるコード書いたら低評価で、ggrks 的なことを書いた回答がベストアンサーでしたよ。 それもそれでどうなんでしょう・・・
fana

2019/07/12 04:24

魚or釣り方 じゃなくて 魚and釣り方 にすれば良さそう,と思っちゃうのは,ここの空気がよくわからん新参者故なのかな. (このタイミングで高評価入れられると,まるで私が「俺を評価しろ」と言ったみたいな…… このサイトの方向性に合わないならむしろ低評価が入れられるべきに思うのだが)
Zuishin

2019/07/12 04:25

魚と釣り方だと、魚があるという理由で低評価でした。質問にはそんなこと一切書いてなかったんですが。
m.ts10806

2019/07/12 04:27

fanaさん 誤解させてごめんなさい。コメント部分に後で気づきました。
m.ts10806

2019/07/12 04:34

mutsuki22さん 私のは今までteratailの活動経験から”一部の過敏な方の行動パターン”を憶測して書いただけなので、 「過去質問の回答にあるよ」と伝えるのは探し方の1つとして重要だと思います。 「Google検索しても引っかからない」を「探し方と探す場所をきちんとできれば出てくるよ」と気づかせてあげることにもなりますしね。気にしなくても良いと思います。 過去質問でも言及されてましたけど、「質問者が役に立ったと思う回答」と「回答者が役に立つと思う回答」は一致しないことが多いです。
katoy

2019/07/15 14:06

はい、そうです。次の回答などまさにそれです。 https://teratail.com/questions/193598#reply-287687 まる投げ質問に解説付きの回答をするにしても何処かから説明するのが良いのかを悩んでしまいます。 そこで私は まずは魚をなげて そこをみた質問者が不明点を聞いきてくれば対話を始めることができるとおもっているのですが。
fana

2019/07/16 01:54

ここでは回答への評価は,内容の正誤とかよりも,「スタンス」的な要素が大勢を占めている感じなんですね.
Zuishin

2019/07/16 02:05

正誤ではなく良いか悪いかです。誤っていれば悪いので低評価が付くでしょうが、正解が必ずしも良いとは限りません。
m.ts10806

2019/07/16 02:13

なお、合っていてもそのまま解決できる回答でも別の理由で低評価がつくこともあるのでご注意を。 あまりここで言及するものあれですが、低評価の際には低評価理由をコメントして「回答内容の改善」を進めて質を高めていくことが推奨されていますが、明らかな誤答でもなく、むしろそのまま解決可能な回答に低評価をつけるのは不純だなと個人的には思います。 (こちらとしては技術的観点からきっちりと批判なり意見をもらいたいのですが、大抵そういう低評価の使い方をする人は技術的観点ではなく個人の好き嫌いや何かでやり返そうという魂胆も見えるので、エンジニアとしては去ってほしいと思ってます) 高評価は、悩みどころはありますね。本来は「解決につながるもの」「役に立つもの」「自身が”なるほど”とためになったもの」であるべきではありますが。 今回の高評価はむしろ元の回答をしてくれた方へ向けられているものとは思っています。 「どのような方向性の回答にするか」はその質問内容次第とは思います。 (あと質問者の質問履歴はある程度参考にします。明らかに魚だけ欲しがる人には私はあげません)
fana

2019/07/16 02:32

どうもです.なんとなくですが,おかげでここの雰囲気がわかったような感じです. この質問もそうですが,ノーコメントでただ±の数字だけが付いているパターンばかりなので,この評価機能に価値が感じられないですね. 私の「誤」を見かけた際にはぜひともコメント付きで低評価連打頂きたく存じます!(+側は特に要らないので)
m.ts10806

2019/07/16 02:35

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

2019/07/16 02:45

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

2019/07/16 04:26 編集

課題は難しいところですね。一応「非推奨」というのがありますし(宿題代行) 質問者も質問するときに最も気を付けなければならないところではあります。 https://teratail.com/help/question-tips#questionTips1-1 >作業依頼のような投稿をして、課題や仕事を無償でやってもらえる場ではありません。 あなたがそのようなつもりで質問しているのだと他のユーザーから誤解されないように、丁寧な質問を心がけましょう。 今回の質問は課題でもなんでもないし「自身でも調べてみたのですが」というところから「探し方さえなんとか分かれば自分で解決できそう」というのがありますしね。 過去質問で既に言及されているということが分かれば、積極的にサイト内検索使ってくれそうに思いますし。 「課題で」といきなり質問に書かれている場合や課題であることが明らかな場合は、質問に指摘だけして静観かなぁと(特に多いのが「PHP 掲示板」) そこにつく回答が解決可能なものであれば悪いとは言い切れないし、どこまでを「本人のためか」と思うかにもよると思います(それもスタンスの違いかなぁと) 中には「とりあえず魚(しかもかなり高級料理並みに味付けされた)を与えておいてそこからヒントを得てほしい」と思って活動している方もいるので、一概にダメとは言い切れないですね。 魚をまんまもらってやっていって成長できていない自分に気が付いたときにちゃんと立ち上がろうとできるならそれで良いし、できなかったら元々資質がなかったと諦められるかもしれませんし。 なんか 長くなってしまった。
guest

0

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 02:52

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/07/12 02:55

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

退会済みユーザー

2019/07/12 03:00

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

2019/07/12 03:02

ありがとうございます。
guest

0

ベストアンサー

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

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

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

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

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

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

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

こんな感じです。

投稿2019/07/12 02:25

編集2019/07/12 02:27
azuapricot

総合スコア2341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

C#

1if(a1 * a2 < 0 && dist < radius) 2{ 3 return true; 4} 5else 6{ 7 return false; 8}

投稿2019/07/12 02:24

yk0x69

総合スコア20

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

投稿2019/07/12 02:19

fana

総合スコア11656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2019/07/12 02:24

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

0

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

イメージ説明

イメージ説明

参考情報

  • Googleで検索できない記号の調べ方

https://teratail.com/questions/17118

投稿2019/07/15 13:46

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2019/07/12 05:55

yukineko184

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/07/16 02:11

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問