あたしは、C#でのプログラミングを始めて4年くらいになりますが、
だからと言って、プログラミング歴が4年な訳ではありません。
「C#の××××××××が糞すぎる」
(×は特定の文字ではありません。特定の記事を刺しているわけではないので、出典なども特にありません。)
って記事をたまたま偶然見掛けたので、こういう人も居るのだなぁと思いました。
プログラムは、その人の思考パターンに似ている部分もあるため、
同じ課題であっても、作る人によって構造はかなり違います。
だから、どんな形であれば、課題が達成出来るのであれば、それは構わないとも思っていますが、
だからと言って、何でも、好き放題で良いと言うことではありません。
C#に適したプログラム方法があって、それに沿ったプログラムを組みつつも自分の独自なアルゴリズムにおいて、より優れたプログラムを組めば良いんじゃなイカと思っています。
なので、上記記事も含めて、なんでこういったことを書く人が、ここまでC#の特性を無視したプログラムを書きたがるのか、
高級言語における、スコープの概念を全く理解していないのか、不思議でなりません。
上記記事は既に古い物なので、当人はとっくに反省しているかもしれませんが、
変数をvarで宣言することの無意味さ。
バリアント形はそれとは全く別に存在しますので、通常はObjectで宣言すべきです。
しかし、そもそも何故型指定無しで宣言するのでしょうか?
それでもって、コンパイルが通らないとか言い始めて、
型を無指定で作成したのであれば、その後のプログラムにおいて、型が不明なので動作しない部分も出てくるでしょう。
それが{}で囲われているかどうかとは、全く関係の無い部分です。
型未定な変数において、正常にコンパイルを通す方法は、当然型をキャストすれば良いだけです。
そして、そもそもの問題として、コンストラクタでエグゼプションを起こして、オブジェクトの初期化を失敗させる。
(注:もちろん、コンストラクタでエラーが出た場合の処理)
この方法がそもそもの間違い、(なのは、他のコメント投稿者からも言われていますが?)
C++のメモリリークの回避方法的に紹介している人も居ますが、どちらにしろ、コンストラクタでは不要な初期化はしない、
コンストラクタはあくまでオブジェクトの準備であって、致命的なエラーで落ちる場合を除き失敗させるべきではない。
オブジェクトが正常に動作するかどうかは、オブジェクトが作成完了してから、チェックすべき事で、コンストラクタでそこまでしてはいけない。
まぁ、なんでもいいんですけどね、
c#には高級言語としてとても優れている部分が多く
何らかの問題が在る場合、「大抵は利用者が活用方法を間違えている」のが原因です。
「c#が・・・・・すぎる」ではないのです。
c#で機能が足りないのであれば、C++でも使えば良いのです。自分で直接APIを叩けば良いじゃないですか?
まぁ、これからプログラムを習おうとする人は、言語の特性と、正しい書式をしっかりと覚えてくださいな。
{}で囲うのはif文だからとかfor文だからとかwhileだから、switchだからとか
void main(void)だからとか、そういった理由ではありませんからね?
{}はブロック定義です。
ifだとか関係なくブロック定義は何処でも、いつでも出来ます。お忘れ無く☆ミ
|