はてなキーワード: オイラーとは
出羽守の発言力は在住国によって左右される。まあ例えばだけど出羽守のオッサンが「今日ザンベジ川のほとりをハイキング中にザンビア人から『なぜ日本は…』と言われた。世界が日本を見る目は厳しい。」とかつぶやいたところで、誰も何も気にしなかったであろう。出羽守のオッサンがドイツからつぶやいたからこそ物議をかもした。良し悪しはともかく、この発言力の大きさで出羽守ヒエラルキーが決定されるとして、どの国が出羽守ヒエラルキー上位なんだろうか。
自分としては
英米仏独≧北欧>イタリアスペインポルトガル>中韓>東欧≧東南アジア>その他
という感じかなと感じている。
アメリカ出羽守はアメリカの空気に毒されて『おれ!世界の中心に!いる!』と思っている節があるけれど、欧州出羽守からすると遠くにある大陸にいるだけの日本人って感じだし、ぶっちゃけ西欧の方がアメリカよりマシじゃない?と思っている。後、アメリカ在住組はリベラル出羽守が多いイメージ。母数が多いから右も左も多いけれど割合的に一番左翼が多いのがアメリカな気がする。(州によっても違うんかな。アメリカ住んでないから知らん)欧州は現地がゴリゴリにリベラルな国(ドイツ、オランダ、イギリス、北欧などのプロテスタント国家)に意外と右翼系出羽守が多い。フランスとかイタリアとかおしゃれっぽい国は出羽守とか右左とか関係なくキラキラ海外在住アカみたいなのが多い気がする。
中国韓国は当然だけどリベラル(?)が多い。中国はすごい、韓国は進んでる、それに比べて日本はぁぁぁぁぁ。自分は多少デジタル化が遅れていようと、トイレに紙流せて水道水飲める国の方が住みやすいと思うが……まあ好みは人それぞれですからね。ちなみに欧米出羽守と中韓出羽守はお互いにほぼ関わらない。恐らく欧米勢からすると遠いアジアの国&母国ですらないに住んでいる日本人は視界に入らないから。中韓勢が欧米勢スルーな理由は知らない。
書いてて思ったけど、リアルの生活が楽しそうな国ほど出羽守少ないなぁ。イタリアとか出羽守やってるのプロオリーブオイラーくらいしか知らん。
それは必然ではなくて偶然の要素が大きいでしょ。
より高位にあることの結果というわけではない。
どっちも「美しい」と言われてるけど、
宇宙際タイヒミュラー理論がもし真だと
生まれるだろうけど、あれを美しいと言う人は
たぶんいないでしょ。
プライベートなメソッドや関数をテストする必要は無いと考えています。プライベートなメソッドは、実装の詳細であるからです。
ほとんどの場合、プライベート メソッドをテストする必要はありません。 プライベート メソッドは実装の詳細です。
「プライベートメソッドはテストするな」と強く主張されるのは、ケント・ベックの影響もあるかもしれない。
例えばtwitterで、パブリックメソッドにだけテストを書き、テストが必要なほどプライベートメソッドが複雑ならそれを別のオブジェクトに切り出す必要があると発言している(twitter/kentbeck)ように、プライベートメソッドのテストに強く反対している。
またベックの書いたSUnit(xUnitの源流にあたる)には「ひとつのテストをひとつのオブジェクトで表し、それによってテストの独立性を高める」というアイディアが使われている(そのアイディアを実現するためにとても複雑な設計をしている Simple Smalltalk Testing: With Patterns)。テスト自身がひとつのオブジェクトとして独立しているなら、テスト対象となるオブジェクトのプライベートメソッドがテストできないのは当然のことになる。
が問題になる。
テストファーストで開発するなら手を動かしながら軽い気持ちで書きたい。
privateなルーチンの自動テストは面倒だ。実際にコーディングするときは最初publicにしておいてテストしてうまく動いていそうならprivateにするのだけど、この「いそう」がくせ者。いっそのことすべてpublicにしたくなる。
私は元々メソッドはprivateにしない主義なのでメソッドの場合は問題ないのだけれど、ファイル内の「関数」が問題になる。和了点計算だと和了形判定とか符計算とか和了役判定とか単体でテストしたい内部関数が山ほどある。(twitter/koba0367)
private メソッドをテストすべきか問題、原則論だけだと袋小路に入りがちだから、private メソッドをテストしたくなる具体的な場面について議論したほうがいいと思う。
自分がレビューでよく見る例としては、複数の public メソッドの重複部分を private メソッドに抽出した結果、濃い private メソッドと薄い public メソッドが一対多関係になる場合が挙げられる。設計としては間違っていないし、わざわざ public メソッド経由でテストする意義があるかというと微妙。(twitter/ts7i)
きれいなインターフェースを作ろうとすればするほどpublicメソッドじゃない部分に複雑性を追いやることになり、壊れた時に手戻りが大きすぎると思ったら、プライベートにバックドア開けてでもテスト書くようにしてます (twitter/mizchi)
しかしプライベートメソッドに対するテストを書こうとすると大概リフレクションなどで可視性の制限をすり抜けるとかメソッドの可視性を変更するといった回りくどさやコストの導入が必要になるので、じゃあプライベートに対するテストはそうしたコストに見合うのかが問題になる。
伊藤さんの答えは「原則書かないほうがいいという大前提のうえで、どうしてもというときは、"これはテストのためにpublic"にしているというコメントの上でpublicにする」だった。
自分は「テスタビリティのためにメソッドをpublicにする」っていう"実プログラムの挙動を変えること"の方が、「privateなメソッドをテストコードのみsendで叩く」よりも怖いって思ってることに気がついた。(twitter/highwide)
単体テストがホワイトボックステストだとするなら、publicかprivateかでテストの有無が変わるのは明らかにおかしいだろ。ややこしいロジックはprivateに隠蔽すべきだが、そこがテストできないなんて。 (twitter/kmaebashi)
private メソッドをテストするかどうか? まず最初に言っておきたいのは public/private は抽象の設計の問題であって、テストすべきかどうかとは当然無関係だろうということ。(twitter/qeigoi)
特定の言語の貧弱な機能に思考が制限を受けて誤った結論を出している典型的な例。
https://b.hatena.ne.jp/entry/4684049296462116226/comment/megumin1
テストの粒度とメソッドのアクセス権は独立したものなので、「プライベートメソッドをテストすべきか否か」という切り方自体がナンセンスではあるのだが、現実問題としてはアクセス権がテストに影響するので難しい。(twitter/AoiMoe)
private メソッドのテストはすべきかどうかというより、「できるべき」であって、それができないというのも、ある種、言語機能とテストのインピーダンスミスマッチと言えるのではないだろうか、と思っている。(twitter/aetos382)
RustやGoではプライベートメソッドに対するテストが簡単にできる。
そのためかプライベートメソッドをテストすることに対して拒否反応があまりないようだ。
Rustのテストはファイル内とtests/以下の2箇所に書ける。
テストには開発用のホワイトボックステストと仕様確認用のブラックボックステストがあり、前者をファイル内に、後者をtests/に書けば良い。
例えば度々議論になるプライベート関数のテストについてはもちろんホワイトボックステスト。(twitter/blackenedgold)
Rustではプライベートに対して何の手間もなくテストが書ける。
Rustでprivateなメソッドのテストを書きたいなら、そのメソッドのすぐ隣に書けば内部アクセスになるから普通に書けるよ、ってのは目からウロコだった。できるだけ近いところにテストを書こうっていう文化と相まって最高。(twitter/kuy)
Rust のようにユニットテストをプロダクションに混ぜる方式はおれもいいと思ってて、テストとプロダクションを分離することで private 関数のテストができない問題があるけど(テストしたければクラスを分けよ/メソッドを公開せよ/テスト必要なし、に分かれるよね)、そもそもこの議論が不要になるよね (twitter/nunulk)
昨日「private method の単体テストは書くか否か」という話題がちょいとあったのだが、わしは当然書く感じの昨今を送ってきたもんで何で書かんのやくらいに思ってたんだけど、Go だと private なやつのテストが書きやすいってのがデカそう。(twitter/pankona)
golangのテスト書いてたけど、テストプログラムの名前空間(パッケージ)が、対象のプログラムと一緒で、そのためプライベートメソッドでもテストできるの良い感じ (twitter/74th)
Goのテストコード、テスト対象と同じパッケージにすればエクスポートしてない関数でもなんでもテストコードから参照できるんだけど、これってプライベートメソッドはテストすべきか議論するよりテスト書けと言われているようで好き。(twitter/plan9user)
「プライベートメソッドをテストするか?」とは別に「ドキュメントをソースコードと同じファイルに書いていい(文芸的プログラミング)なら、単体テストをテスト対象と同じファイルに書いてもいいのでは?」というのも論点になるかもしれない。
https://twitter.com/mathmatsuri
問2
この問題はオイラー線の性質を知らないと厳しい。何もないところからオイラー線の存在を示せるほどの頭脳の持ち主は、おそらくオイラー線の存在は知っているだろう。
https://ja.wikipedia.org/wiki/%E3%82%AA%E3%82%A4%E3%83%A9%E3%83%BC%E7%B7%9A
H, G, Oがこの順で同一直線状に並び、かつHG:GO=2:1なのでLもDも同一直線状にありHG:GO:OL:LD=2:1:3:4n/(m-n)とわかる。特にGO:GD=1:4m/(m-n)である。 …①
オイラー線の性質を利用せずに解きほぐすなら座標系を利用するのがよいだろう。Oは外心なので∠AOC=2∠ABC=π/2。ということで外心Oを原点、外接円の半径をrとしてC(r,0), A(0,r), B(-r/√2,r/√2)とおくのが一例。HとLは原点に関して対称で、形を眺めればH, G, O, L, Dが同一直線状に並ぶことに気付けるだろう。ちゃんと計算したよ。
必要な点だけ残して図を描くとBCを底辺としてA, G, O, L, Dの高さの比を計算していけばよいとわかる。
https://twitter.com/totsuration/status/1300788313414971393
あと△ABC:△OBCを求めればほぼ答えは出たようなもの。Oは外心なので∠AOC=2∠ABC=π/2, AO=COより△AOCは直角二等辺三角形。∠ACB=π/8なのでBCは∠ACOを二等分する。
https://twitter.com/totsuration/status/1300788363784605699
よってBCはAOをAC:COつまり√2:1に分ける。これは△ABC:△OBCに等しい。 …③
①②③から△ABC:S=△ABC:(□BGCD+△ABC*2/3)
=△ABC:((△GBC+△OBC)*4m/(m-n)+△ABC*2/3)
=△ABC:((△ABC/3+△ABC/√2)*4m/(m-n)+△ABC*2/3)
=1:(2(√2+1)m-2n/3)/(m-n)
△ABC=AB*BC*sin(π/4)/2=(中略)=3(√2-1)/√2なので
S=(3√2m-(2-√2)n)/(m-n)
-------------------------------------------------------------------------------------------------