by
Anonymous Coward
on 2022年01月09日 12時21分
(#4181971)
if (DateTime.Now.ToString("MMdd") == "0101") { Console.WriteLine("Happy New Year"); } else { Console.WriteLine($"It\'s still {DateTime.Now.Year}..."); }
try {
(DateTime.Now.ToString("YYYYMMdd001").ToInt32 } catch(Exception e) {
Console.WriteLine("Happy New Year to Everyone and especially Microsoft as well as Honda devs"); } finally {
Console.WriteLine($"It\ presently is year {DateTime.Now.Year}."); }
正しい例 (スコア:0)
if (DateTime.Now.ToString("MMdd") == "0101")
{
Console.WriteLine("Happy New Year");
}
else
{
Console.WriteLine($"It\'s still {DateTime.Now.Year}...");
}
#異論は認める
Re:正しい例 (スコア:1)
try
{
(DateTime.Now.ToString("YYYYMMdd001").ToInt32
}
catch(Exception e)
{
Console.WriteLine("Happy New Year to Everyone and especially Microsoft as well as Honda devs");
}
finally
{
Console.WriteLine($"It\ presently is year {DateTime.Now.Year}.");
}
Re:正しい例 (スコア:1)
コンパイルが通りません。バグですか?
Re: (スコア:0)
コンパイルする系統の言語に見えません
Re: (スコア:0)
コンパイルする系統の言語ですよ。
Re: (スコア:0)
毎日がハッピーニューイヤー!
Re:正しい例 (スコア:2)
やだなぁ、年末年始以外に動かす人がいるわけないじゃないですか。自明でしょう。絶対大丈夫ですよ! 心配性だなぁ。新年シーズン以外に……そんな……
Re:正しい例 (スコア:1)
そうですよねえ
2023年に思い出したようにやってみる人なんて絶対いませんよね。
そしてコードが書かれた時期よりさかのぼって2020年に実行したりなんて、もっとあるはずないですよね。
Re: (スコア:0)
Exceptionでキャッツしちゃうと新年以外の要因でもそこに分岐しちゃう可能性が……
Re: (スコア:0)
発生しうる例外が明示されたメソッドしか呼んでなくて、
無関係な例外が発生しない事を確認済みなら許容範囲では。
Re: (スコア:0)
どうやって確認するのよ。自分のとこだけで走ってるわけじゃないんだよ?
Re: (スコア:0)
例えばDateTime.ToStringならFormatExceptionとArgumentOutOfRangeExceptionが発生というようなことがMSDNに書かれてる。そういうのを確認すればいい。それ以外のが発生しうるなんて特殊な状況を考えるのは無駄だよ。
https://docs.microsoft.com/ja-jp/dotnet/api/system.datetime.tostring?v... [microsoft.com]
#こういう例外の使い方を肯定してるわけではない
Re: (スコア:0)
Win32 APIだとMSDNに書かれていないエラーコードが返ってきたり、Windowsのバージョンが上がると追加されたりというのはごく日常的でとうてい「特殊な状況を考えるのは無駄」なんて切り捨てられないんだけど、C#はそういうことないの?
というか返される可能性のある例外すべてをあらかじめ想定するというのはまさにJavaの検査例外が失敗したパターンなんだけど。
Re: (スコア:0)
https://docs.microsoft.com/ja-jp/dotnet/api/system.string.system-iconv... [microsoft.com]
C#知らんけど、ToInt32ってこれで良いんだよね?
例外が発生するとは書いてないから、結局ダメじゃん。
Re: (スコア:0)
勿論ありえます。
実際、MSDNに書かれていない例外だって投げられることはあります。
特定の例外だけで処理したいならそう書かないといけない。
# そう書かないのは悪いコードという以前に、そもそも例外で処理する内容じゃないだろとか、突っ込みどころはそこじゃない気がしますけどね。
Re: (スコア:0)
こっちによると [microsoft.com]例外発生する。
MSDNは日本語ページは信用するなとか色々パターンあって読むのに慣れがいるw
Visual Studio上のツールチップでも例外の有無は表示されることになってるんだけど、そこに表示されないものも多いし。困ったものだ。
Re: (スコア:0)
function greeting() {
static past_year=""
if past_year!=""
if past_year!=get_year()
print get_year(), "is coming"
else
print get_year(), "now"
end
end
past_year=get_year()
end
Re: (スコア:0)
最近だと
if (DateTime.Now is { Month: 1, Day: 1 }) { Console.WriteLine("Happy New Year"); }
みたいな書き方が出来る。
それから処理中に年が変わる可能性を考慮してDateTime.Nowを二回使う場合は一度変数を入れた方が良いかな。
Re: (スコア:0)
どっちにしても1月2日になって実行する可能性が排除されてるのは変わってないなあ
Re: (スコア:0)
1月2日は「It\'s still 2022...」ってなるよ。新年なのにこのセリフよ
Re: (スコア:0)
笑点の小遊三師匠だったと思うけど、2月になると
「今年も残りあと11ヶ月になりました、みなさん年越しの支度はお済みでしょうか」
って挨拶してたな。
それがありなら1月2日に「まだ2022年だよ……」もありじゃね
Re: (スコア:0)
正月明けにいきなり今年も残すところあと365日とか言い出さないあたりなんとも言えない味を感じる…
んで今年はあと366日ですよとか突っ込ませる。
Re: (スコア:0)
DateTimeをToStringして比較するのはどうにかならんかったのか
面倒なのはわかる
.Net6ならDateOnlyがいるから幸せにになれるはず
Re: (スコア:0)
・・・elseなら「It's still 2021..」になるなら
YYYYとって2021以下になるかどうかで見ればいいんとちゃうん?