2022-01-01から1年間の記事一覧

配列内の指定文字列を結合する

やりたいこと 指定文字列をABとした時{"x", "A", "B", "AB"} ⇒ {"x", "AB", "AB"}のような配列を作成する。 処理フロー 配列の要素を取り出す。 指定文字列を含む⇒そのまま追加※ 指定文字列を含まない 末尾が指定文字列の先頭の一部と一致する。⇒次の要素を…

文字列を指定文字列を含む形で分割

やりたいこと 指定文字列をTargetとした時Targetx⇒{ Target, x }xTarget⇒{ x, Target }のような配列を作成する。 切り出しの開始位置を求める まずは単純にするために指定文字列をAとして分割する文字列をxAxxAとする。指定文字列の開始位置はString.IndexOf…

【C#】MS Test

MS Test VisualStudioで作成できるテストプロジェクトAssert機能を使用して比較を実行することができる。 Assert 期待値と実際の値を比較することができる。 Assert.AreEquals(T Expect, T Actual); Expect:期待値Actual:実際の値 失敗時 Assert.AreEquals…

【C#】Lazy

Lazy<T> 初期化はコストがかかる作業。⇒必要になったときに準備できれば良い。Lazyは初期化遅延で、オブジェクトが初めて使用されるまで、作成が延期される。 internal class Lazy101 { Lazy<Dictionary<int, string>> lIdStrs = new Lazy<Dictionary<int, string>>(() => new()); internal void Exec() { Consol</dictionary<int,></dictionary<int,></t>…

【C#】インターフェイス

インターフェイス(Interface) 単語自体は接触面・境界面という意味。プログラミングではクラスとの境界面のイメージ インターフェイスの実装 public interface IPublicClz1 { public void Display(); } public class PublicSingleClz : IPublicClz1 { public…

【C#】virtual

virtual インスタンスに応じて実行する処理を変える(ポリモーフィズム)を実現する。

【C#】抽象

抽象 "動物"などあくまで抽象的な概念 抽象クラス abstractキーワードが指定されたクラス。 abstract class ClassName{} 抽象メソッド abstractキーワードが指定されたメソッド。実装を持たず、メソッドの意味のみを定義したメソッドで、継承先で必ずオーバ…

【C#】キャスト is as

is 戻り値がboolで型がキャスト可能かを返す。 as 戻り値はキャスト対象で、キャストできない場合はnullを返す。

【C#】パターンマッチング

パターンマッチング データの型およびその中身を確認し、指定したパターンと一致した場合に処理を実行する機能。 switch switch caseで使用する。 class A{} class B : A{} class C : A{} public void Something(A inst) { switch(inst) { case A a: // some…

【C#】インライン展開

インライン展開 関数の呼び出しは呼び出し時と戻り時のジャンプでコストがかかる。基本的にコンパイラーは前後の文脈からある程度最適化してくれる。C#にはないが、.NETでは属性を指定することでインライン展開を指定できる。 [MethodImpl(enum MethodImplOp…

【C#】overrideとnewの違い

new 派生クラスに新たに追加される。フィールドの型に応じて呼び出しメソッドが決められる。 override 基底クラスのメソッドをオーバーライドする。インスタンスの型に応じて呼び出しメソッドが決められる。 フィールドの型とインスタンスの型 class A { int…

【Office Open XML】表の条件付き書式設定

表の条件付き書式設定 表のスタイルでは、表全体の書式に対して特定箇所に書式を上書きすることができる。これを条件付き書式設定(Conditional Formatting)という。特定箇所は以下の12箇所を設定することができる。 右上のセル 左上のセル 右下のセル 左下…

【Office Open XML】隠し文字

17.3.2.41 vanish(Hidden Text)[p.329] runの表示・非表示を定義する要素。モデルはCT_OnOffでval属性の値によって表示(true)・非表示(false)を指定する。val属性が存在しない場合は表示(true)として扱われる。 段落に対する設定 スタイルに指定 段落スタイ…

XML

XML(eXtensible Markup Language) 文章の見た目や構造を記述するためのマークアップ言語の一種。主にデータのやりとりや管理を簡単にする目的で使用される。 マークアップ言語 タグと呼ばれる特殊な文字列を使用して、文章の構造やタイトル、文字の修飾情…

デリゲート

デリゲート メソッドを参照するための型(デリゲート型)。 Delegateは委譲という意味で、委譲する内容は処理(メソッド)。 定義方法は、処理を記述しない以外は、通常のメソッドと同様で、それにdelegateキーワードを指定する。 デリゲート型の変数には、…

【Office Open XML】stylesのnumFmtについて

numFmtについて ttkcd.hatenablog.com に記載した通り、numFmts要素の子要素であるnumFmtは0ベースのインデックスではなく、numFmtのnumFmtIdを指定することによって参照される。 numFmtIdが同じだが、フォーマットが異なる値が存在した場合は? numFmtの定…

【C#】単体テスト

Visual Studio 公式としては、1プロジェクトに対応して1つの単体テストプロジェクトを推奨以下のような、TargetProjectについて考える。 namespace TargetProject { internal class InternalClz { public void PublicAdd(int a, int b) => a + b; internal v…

【Office Open XML】stylesパーツ

stylesパーツ 以下で、主要な要素について簡単な説明をしたが、いまいち分かりづらかったので、再度 ttkcd.hatenablog.com styles.xml SpreadSheetのワークシートのセルは、塗りつぶしをして色を設定したり、フォントを変えたりすることが出来る。この情報を…

【Java】FileとPath(+Files)

FileクラスとPathインタフェース(+Filesクラス)のどちらを使えばよいのか ttkcd.hatenablog.com に書いたように、PathはFileで可能な操作は基本的に可能 はじめに、似たような機能を持つのにそもそもパッケージが異なるFileクラスがjava.ioなのに対して、P…

【Java】ファイル操作

Javaでのファイル操作 Fileクラス(java.io) ファイルまたはディレクトリについての情報である抽象パス名をもとにファイルに関する様々な操作を行う コンストラクタ 4つのコンストラクタが存在する。 情報はあくまで"抽象パス名"であるため、指定された値の…

【C++】プリコンパイル済みヘッダ

ライブラリ作成時にエラー ライブラリを作成中に以下のコンパイルエラーが発生した。 C1010:プリコンパイルヘッダーを検索中に不明なEOFが見つかりました。'#include pch.h'をソースに追加しましたか? ttkcd.hatenablog.com pch.h プリコンパイル済みヘッ…

【C++】ライブラリとリンク

ライブラリ 複数の機能をまとめた部品 静的リンク プログラムを動かす際に、ライブラリ内のルーチンを実行可能プログラムに含める方法これに対応したライブラリが静的リンクライブラリ 動的リンク プログラムの実行時に、メモリ上でリンクを行う方法これに対…

【C++】リンカー

リンカー 関数や変数は、宣言(declaration)と定義(definition)することが出来る。 宣言(declaration) 型の情報や名前などのシンボルの概要をコンパイラに伝える。以下のような関数を宣言すると、コンパイラにMyPrint(symbol)という関数が存在する(fun…

【C++】実行までの流れ

実行ファイルの作成 テキストファイル C++の文法に従って、人間が分かるように書かれたテキストファイル(拡張子がcpp)。Javaとは異なり、クラス名とファイル名が違っても良い。 プリプロセス プリプロセッサがプリプロセスステートメントの加工を行う。代…

【C#】Enumerable.OfType<TResult>(IEnumerable) メソッド

OfType<TResult> 配列やリストなどのシーケンス内に、指定した型に変換できる要素を取得する。 public static IEnumerable<TResult> OfType<TResult>(this IEnumerable source) { if (source == null) throw Error.ArgumentNumm("source"); return OfTypeIterator<TResult>(source); } static IEn</tresult></tresult></tresult></tresult>…

【C#】IEnumerable<T>インタフェースの実装

IEnumerable<T>インタフェースの実装 ttkcd.hatenablog.com に記載の通り、IEnumerable<T>インタフェースは抽象メソッドGetEnumerator()を持っているため、IEnumerable<T>インタフェースを実装する際には、GetEnumerator()を実装する必要がある。また、IEnumerator<T>を</t></t></t></t>…

【C#】IEnumerable<T>

IEnumerable<T>インタフェース ジェネリックコレクション(System.Collections.Generic)に対する単純な反復処理をサポートする列挙子を公開する。IEnumerator<T>インタフェースを返す抽象メソッドGetEnumerator()を持つ。 ttkcd.hatenablog.com</t></t>

【C#】IEnumerableインタフェースの実装

IEnumerableインタフェースの実装 ttkcd.hatenablog.com に記載の通り、IEnumerableインタフェースは抽象メソッドGetEnumerator()を持っているため、IEnumerableインタフェースを実装する際には、GetEnumerator()を実装する必要がある。 internal class MyCo…

【C#】yieldキーワード

yieldキーワード C#2.0で追加されたIEnumerableまたはIEnumeratorをより直感的に作成できる仕組み。 ttkcd.hatenablog.com yield return文 以下のように使用する。 yield return expression; // expressionにはイテレータの要素を指定 yield return文の評価…

【C#】IEnumerable

IEnumerableインタフェース 非ジェネリックコレクション(System.Collections)に対する単純な反復処理をサポートする列挙子を公開する。IEnumeratorインタフェースを返す抽象メソッドGetEnumerator()を持つ。 IEnumeratorインタフェース 反復処理をサポートす…