佐々木屋

技術的なことから趣味まで色々書きます

ガード節によるネスト防止

ステートメントをネストし過ぎると可読性が著しく低下します。逆に言えばネストが少なければ見やすくなるのです。 課題 以下のような数値をチェックするような関数を考えます。 private int test1(int x, int y, int z) { int res = 0; if (x < 0) { res = 1…

集計メソッド(Max、MIn、Average、Sum、Count)

数値コレクションの最大値、最小値、平均値、合計、コレクション数を取得することができるメソッドです。 int[] values = { 1, 9, 5, 6, 8, 6, 2, 5, 3 }; Console.WriteLine(values.Max()); Console.WriteLine(values.Min()); Console.WriteLine(values.Ave…

取得メソッド①(First、FirstOrDefaullt、Last、LastOrDefault)

Firstメソッドはコレクションの先頭を取得するメソッドです。 int[] values = { 1, 9, 5, 6, 8, 6, 2, 5, 3 }; Console.WriteLine(values.First()); Dim values As Integer() = {1, 9, 5, 6, 8, 6, 2, 5, 3} Console.WriteLine(values.First()) 1正直単体で…

Visual Studio 2019

docs.microsoft.com 先月の4月2日にVisualStudio2019が公開され、4月30日にバージョン16.0.3がリリースされました。そろそろ安定したかな?ということと、GWでまとまった休みもあったので、この機会に開発環境を2017から2019に乗り換えてみました。 …

Whereメソッド

Whereメソッドはコレクションに対して指定した条件に一致する要素を抽出します。例えば、適当な数配列があって、5以上の要素をListへ格納します。 int[] values = { 1, 9, 5, 6, 8, 6, 2, 5, 3 }; //従来の方法 List<int> res1 = new List<int>(); foreach(int v in v</int></int>…

型推論のススメ

以前型推論を説明しましたが、これが乱用されてしまうと問題になりそう、と思うのは正しい感覚です。ただし、時と場合によっては型推論は非常に有用ですので使える場面においては積極的に使っていこうじゃないか、というのが今回のテーマです。 Variant型で…

HTMLからのPOSTがASP.NETで受け取れない

久々に一人でハマった話。備忘として残しておきます。ひょんなことから、HTML(正しくはASP)からPOSTしてASP.NET側よりRequest.Formで値を取得していますが、突然空(nullではない)が返ってきて正しく取得できない状況になりました。 <form action="http://xxx.aspx" method="post"> <input type="hidden" name="SitenCD" value="5"> 通常であればReques</form>…

OrderByメソッド

OrderByメソッドはLINQのソート機能です。コレクションの要素を並べ替えることが可能です。昇順の場合はOrderByメソッド、降順の場合はOrderByDescendingメソッドを使用します。 int[] values = { 1, 9, 5, 6, 8, 6, 2, 5, 3 }; //昇順 var res_ask = values…

ここがダメだよ!VB.NET④(「=」の意味)

C#の場合、単に「=」の場合は代入を表します。つまり、下記のコードは変数xに1を代入します。 x = 1; では、等価の意味はというと、「==」のようにイコールを重ねます。 if (x == y) { //~ } このように等価と代入が異なる演算子として用意されています。し…

型推論

暗黙的に型付けする変数のことを型推論と言います。C#はvarキーワードを利用します。 //通常の書き方 TestClass cls = new TestClass(); //型推論 var cls = new TestClass(); VB.NETはDimキーワードのみにしてAs以降の型を指定しないと型推論となります。 '…

Selectメソッド

LINQで一番利用されている(と思う)Selectメソッドです。コレクションの全要素に対して処理が行われます。例えば、適当な数値のコレクション全要素に対して3を掛けるような処理を考えてみましょう。 int[] values = { 1, 9, 5, 6, 8, 6, 2, 5, 3 }; //従来…

LINQを始める前に・・・

LINQを始める前にいくつか基礎知識として情報を紹介しておきます。 SQLとの関連 LINQ to Objectにおいて、構文がSQLと似ていますが、SQLと一切関係はありません。例えば、 int[] values = { 1, 2, 3, 4, 5 }; var q = from x in values where x % 2 == 0 ord…

三項演算子の有効活用

課題 例えば以下のような処理を考えます。 bool syoriFlg = true; string naiyo = ""; if (syoriFlg ) { naiyo = "hoge"; } else { naiyo = "piyo"; } Dim syoriFlg As Boolean = True Dim naiyo As String = "" If syoriFlg Then naiyo = "hoge" Else naiyo…

ラムダ式の基本

LINQの話をする前にラムダ式を説明しておきます。ラムダ式(lambda expression)自体は関数型言語で良く使われる機能の一つですが、デリゲートやLINQを利用した際のメソッド引数部分をより簡潔に記述できるようにとC#3.0(VB.NET9)から導入されました。ラム…

ポリモーフィズム(インターフェース)

インターフェースでポリモーフィズムを実現します。 インターフェースはクラスの規程のみを定めたものとなる為、抽象クラスと同様にポリモーフィズムを比較的容易に実現することが可能です。継承の時と同じように、何かメッセージを表示する共通メソッドをイ…

インデクサ

ユーザー定義型(構造体やクラス)のオブジェクトに対して、配列のような特定要素を取得・設定できる仕組みをインデクサと言います。VB.NETでは既定のプロパティとも言います。インデクサはメソッドとプロパティの両方の性質を持ち合わせた機能です。 getter…

ここがダメだよ!VB.NET③(参照渡しの曖昧さ)

メソッドの引数は主にByValの値渡しとByRefの参照渡しがあります。VB.NETでは以下は等価です。 Private Sub Test(ByVal num As Integer) Private Sub Test(num As Integer) ByValの省略は意見が分かれますが、正直どちらでも私はいいと思います。ただ、VB6の…

型変換は何を使う?(string型⇒値型)

おおむね型変換が出そろったところで、「どれを使うか?」をシリーズで考えてみます。今回はstring型⇔値型です。 なお、以下は共通認識とします。 VB.NETのCIntやCDecなどのC●●●は、CTypeと等価なので全てCTypeで検証 時間計測はSystem.Diagnostics名前空間…

MERGE文で高速に条件によってINSERT、UPDATE、DELETEを行う

INSERTかUPDATEかをSELECTしないで操作する方法を前回説明しました。 sasaki816.hatenablog.comこの方法だと、単純なテーブルによる更新処理であれば問題ありませんが、検索対象がより複雑なテーブルになると走査が多くなり低速になってしまいます。SQLServe…

ここがダメだよ!VB.NET②(「()」の省略)

メソッドは必ず「()」が付きます。引数が必須であればいいのですが、VB.NETで引数無しの場合は「()」を省略してもコンパイルエラーにはなりません。 Dim a As String = (123).ToString() Dim b As String = (123).ToString C#は「()」が無いとコンパイルが通…

遅延評価と先行評価

式や配列などの走査で必要な要素を必要な時だけ評価するような挙動を遅延評価と言います。イテレーターは遅延評価される処理の典型です。LINQなどでも遅延評価があります。例えば、イテレーターでも出てきた以下の配列処理を考えます。 private List<string> Naiyo()</string>…

型変換は何を使う?(その②)

型変換は何を使う?(その①)の続きです。 sasaki816.hatenablog.com 数値型で有意なParse、TryParse 数値型はnullは許容しませんので、関数化できるならTryParse一択だと思います。但し、string型からの変換のみ利用できることと、TryParseはout引数を持ち…

抽象クラスと抽象メソッド

クラスを継承した時に仮想メソッドであれば派生先でオーバーライドできることは説明しました。この時、派生先で最初からオーバーライドありきで設計されたメソッドを抽象メソッドと呼びます。抽象メソッドは定義のみを記述し、詳細内容は派生クラスで記述し…

可変長引数②

可変長引数は引数無しで呼べる 可変長引数のメソッドに対してなにも指定せずメソッドを呼ぶと、nullが渡されます。つまり、メソッド側は空配列が作成されます。 private void TotalSum3(params int[] values) { Console.WriteLine(values.Count()); } public…

可変長引数①

ちょっと難しい言葉ですが、要はメソッドに渡せる引数の数が可変ということです。例えば以下のような同じ種の引数を複数必要とするメソッドを考えます。単純に引数を足す処理です。 引数は配列となっているので、当然メンバー変数を一旦配列に変換して引数に…

回復パーティションの削除

パーティション削除はディスク管理より行えますが、特殊なパーティション、例えば回復パーティションなどは削除できません。今回業務用のパソコン設定でパーティションが2つ必要なのですが、既に4つパーティションが存在する状況でしたので、どうしても一…

MBRディスクのパーティション

Windows7以上であればOSインストール後でもWindows標準のディスク管理からパーティションを作成することは可能です。しかし、MBRディスクの場合はパーティション数の最大が4個というちょっとした制限があります。それ以上のパーティションを作成しようとす…

コンストラクタの継承(引数あり)

継承された派生クラスは基底クラスのメソッドを(protected以上であれば)自由に利用することができますが、コンストラクタは通常のメソッドと異なり、サブクラスで暗黙的に利用できるようにはなりません。基底クラスでコンストラクタを定義した場合は、派生…

ここがダメだよ!VB.NET①

どういうタイトルをつけようか迷いましたが、これが一番しっくりくるかな~? 私は手続き型言語もオブジェクト指向言語も関数言語も一通り経験してきましたが、一番好きな言語は何?と聞かれたら、断然C#と答えます。そしてC#とよく比較される言語の一つとし…

コンストラクタの継承(引数なし)

クラスの継承をすると基底クラスのフィールドやメソッドは(protected以上であれば)派生クラスからでも自由に利用することができますが、コンストラクタは少し挙動が異なります。引数が無い場合のコンストラクタは派生クラスが呼ばれた時点で自動的に基底ク…