タグ

ブックマーク / ufcpp.net (17)

  • 絵文字の連結と、書記素クラスター判定

    みんな絵文字好きすぎだろ… というRT状況なわけですが。 emoji zwj sequences 元々、👪 (U+1F46A)という、1文字で家族を表す絵文字があったわけですが。 「白人の絵しかないのはおかしい」とか「LGBT に配慮しろ。なぜ男女ペアしかないんだ」とかいろいろと地雷になってしまった結果、 合字で解決しようとかいう仕様が Unicode に入ってしまって今に至っているわけですが。 ちなみに、単に合字になるというだけじゃなくて、 「合字は1文字として扱え」という仕様も決まっています。 仕様は以下のページにあり。 Unicode® Standard Annex #29 UNICODE TEXT SEGMENTATION まあ、仕様があるといってもそれにアプリが対応しているかどうかというとまちまち。 以下の動画でのChromeの動作みたいに、「ページ中ではちゃんと1文字として扱

    絵文字の連結と、書記素クラスター判定
    quodius
    quodius 2020/11/06
  • 書記素分割/Unicode カテゴリー判定 | ++C++; // 未確認飛行 C ブログ

    なんか、昔作ったGraphemeSplitterがC++方面のUnicodeがらみのブログから参照されてたので、ちょっと補足。 UNICODE TEXT SEGMENTATION 「書記素って何?」って話は詳しくは昔書いた記事でも見てもらうとして。 とりあえず、「人間が見て1文字と思うようなもの」を指して書記素(grapheme)といいます。複数の Unicode コードポイントが結合しまくるので、可変長。 いつも例に出すのが家族絵文字(👩🏻‍👦🏼👨🏽‍👦🏾‍👦🏿👩🏼‍👨🏽‍👦🏼‍👧🏽👩🏻‍👩🏿‍👧🏼‍👧🏾とか)ですが、1書記素で11コードポイント、UTF-8で41バイトになったりします。 で、問題は、書記素の機械的な判定方法。 コンピューター上でもちゃんと書記素単位で処理してくれないと、人間の感覚からすると「backspace/dele

    書記素分割/Unicode カテゴリー判定 | ++C++; // 未確認飛行 C ブログ
    quodius
    quodius 2020/10/28
  • await って言う単語

    C# 5.0で非同期メソッドが導入されてから、 正式リリースを基準にしても5年以上、 最初の発表からだと7年以上経っています。 で、5年経っても、「なんて読むの」「asyncのaとawaitのaは違う」などなどが「定番ネタ」として定期的に出てくるわけですが。 特に、ECMAScript 2017がasync/awaitを導入したり、 Unity 2017がやっとC#のバージョンを6.0に上げれる感じになってきたり、 5年の断絶を経て去年からasync/awaitに触れる人が増えているようです。 5年も離れたら、世代断絶も起こりますよね… そりゃ、「定番ネタ」が改めて増えもしますよね… ということで、5年くらい前に同じようなことをどこかで書いてるはずなんですけど、改めて。 英単語 えいしんく まず読み方。 async: エイシンク await : アウェイト ってやつ。async の方が「ア

    await って言う単語
    quodius
    quodius 2018/01/09
  • 型推論(暗黙的型付け)と匿名型

    概要 (※修正予定: 型推論だけに絞って、「変数と式」の直後にでも移動。 匿名型の話は「クラス」の辺りか、「メソッド指向」か「データ処理」の辺りに移動。 Ver. 3.0 C# 2.0 以前、「静的型付け言語は冗長な記述が多くてめんどくさい」などと言われることがありました。 例えば、以下の例について考えてみてください。 System.Collections.Generic.List<int> list = new System.Collections.Generic.List<int>(); 「なんでこんな長ったらしい型名を左辺と右辺の両方で書かなきゃいけないんだ、 どっちか片方書けば、もう片方は推論できるだろう」という話です。 これに対して、C# 3.0 では、可能な限り型推論を行うような構文が追加されています。 ポイント var: 変数の型を推論してくれる。var x = 1;なら x

    型推論(暗黙的型付け)と匿名型
    quodius
    quodius 2017/11/06
  • 組込み型変換

    概要 C# には int 型から double 型というように、 ある型から別の型に変換する機能があります。 型変換は、代入などの操作を行うだけで暗黙的に行われる変換と、 変換先の型を明示的に指定して行う変換があります。 また、いずれの変換も、変換できる型・できない型が予め決まっています。 ポイント C# では、ほとんどの場合、型変換は自動的には行われません short x = (short)5; というように、明示的に型変換します short → int のように、変換しても値の精度が失われない物についてのみ、暗黙的な型変換が用意されています 暗黙的な型変換 暗黙的(implicit)な型変換とは、ある型の変数を別の型の変数に代入するだけで自動的に型を変換してくれる機能です。 以下に暗黙的な型変換の例を挙げます。 short m = 365; long n = m; // short か

    組込み型変換
    quodius
    quodius 2017/11/06
  • 組込み型

    int は integer (整数)の略で、short と long の意味は名前通り、記憶領域サイズの長い/短いの違いです。 byte も名前通りで「1バイトの変数」という意味です。 sbyte の「s」は signed の s で符号付きを意味します。 また、uint, ushort, ulong の「u」は unsigned の u で符号無しを意味します。 ちなみに、8バイトよりも大きな整数値を扱いたい場合、BigInteger構造体(System.Numerics名前空間)という物を使います。 (構造体や名前空間については別項にて説明します。) また、C# 9.0 で追加された nint、nuint は、 32ビット CPU で使う場合は int、uint と同じで、 64ビット CPU で使う場合は long、ulong と同じ範囲の値を使えます。 ただし、どちらのタイプの C

    組込み型
    quodius
    quodius 2017/11/06
  • 小ネタ 正規分布の丸み

    今日もたいがい、数学の話です。 一瞬、「動きにコクが出る」って表現で話題になったあれの話。 そっかー、アニメーション付ける人に一言で説明するには「コク」って言葉になるのかー… という衝撃は結構ありますが、まあ、乱数をいくつか足すと丸みが出るというの自体は事実。 ちゃんとした数学的な説明をすると、 中心極限定理によって、独立な乱数を数多く足せば足すほど正規分布に近づく 自然界は多数の独立な乱雑さが重なってできてるので結構な頻度で正規分布が出てくる 正規分布で作った図形は丸みがかってる(というか、完全に真円・真球を作れる) みたいな話です。 C#関係ない… こころなし程度にC#に関係している点というと、「Math.NET っていう数学ライブラリがあるよ」という話。 例: 2次元上の点の分布を作る 「丸み」の例として、2次元上の点(x, y)を乱数を使って作ることを考えます。 以降のサンプル コ

    小ネタ 正規分布の丸み
    quodius
    quodius 2017/01/16
  • 例外処理(C# によるプログラミング入門)

    概要 例外(exception)とは、 来ならばプログラム中で起こってはいけないことが起こってしまうことをいいます。 堅牢なプログラムを作成するためには、 例外が起こったときでもプログラムが異常な動作をしないよう、 しっかりと例外処理(exception handling)を行う必要があります。 C# では、例外処理を行うための専用の構文が用意されていて、 プログラマが例外処理を容易に行えるようになっています。 ポイント 例外: 「開こうとしたファイルが存在しなかった」など、特別な対処が必要な状況。 例外への対処には、例外用の構文があるのでそれを使いましょう。 try { 例外が発生する可能性のあるコード } catch(例外) { 例外処理 } 例外処理とは 例外の例を挙げると、ユーザーが想定外の文字列を入力してきたときや、 プログラムに必要なファイルが開けなかったときなどがあります。

    例外処理(C# によるプログラミング入門)
    quodius
    quodius 2016/12/26
  • C# 6 の新機能 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

    「C# 5.0」正式リリースの後、「.NET Compiler Platform」の開発が始まり、 当初は既存の C# コンパイラーとの互換性を保つことが優先されていて、しばらく C# の新機能実装が止まっていました。 これまでだと、C# 4.0の正式版がリリースされた瞬間に C# 5.0 のプレビュー版が提供されたりといったように、ほぼ切れ目なく新機能の発表がありましたが、 今回、C# 6 は、 5.0 から2年ほどの空きができました。 しかし、「.NET Compiler Platform」が完成したことで、 かかるコストの割には効果が薄いということでこれまで実装されてこなかったような、ちょっとした便利機能が実装されやすくなりました。 結果として、C# 6 では(C# 5.0 の時の非同期メソッドのような)大きな機能はない代わりに、 (C# 3.0 の時にも似たような)細々とした便利な

    C# 6 の新機能 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
    quodius
    quodius 2016/08/24
  • WPF のコンテナ(WPF)(.NET Framework 3.0)

    概要 WPF では、 コントロール(ボタンやテキストボックス)などの配置を容易にするために、 配置制御のためのコンテナがいくつか用意されています。 Canvas まず、一番分かりやすいのは Canvas でしょうか。 Canvas では、 Canvas の左上からの相対座標を直接指定して子要素を配置します。 座標は、以下のように、Canvas.Left, Canvas.Top を使って指定します。 <Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="200" Height="200" Background="LightGray" > <TextBox Canvas.Left

    WPF のコンテナ(WPF)(.NET Framework 3.0)
    quodius
    quodius 2016/05/20
  • [雑記] スタックとヒープ(C# によるプログラミング入門)

    ポイント メモリにはスタックとヒープの2種類の使い方がある 概要 (書きかけ) 「スタックとは」「ヒープとは」の説明を入れる予定。 とりあえず、デモ用のアプリだけ先に公開。 「値型と参照型」の理解の手助け用。 模擬的に視覚化 スタックとヒープの挙動を模擬的にデモするような Silverlight アプリを作ってみました。 以下、使い方の説明。 疑似コード(左半分) 疑似コードで記述されたプログラム。 コードの先頭から選択した行までの実行結果が右側に表示されます。 疑似コードの書き方は、 変数の宣言とインスタンスの生成、参照関係だけを記述する独自言語。 疑似コード 説明 対応する C# の例

    [雑記] スタックとヒープ(C# によるプログラミング入門)
    quodius
    quodius 2014/08/13
  • メモリ管理 - コンピュータの基礎知識 | ++C++; // 未確認飛行 C

    概要 「仮想メモリ」があるからと言って、場当たり的にメモリ領域を使っていいわけではありません。 メモリ上の空き領域を効率的に管理するのもオペレーティング・システムやフレームワークの仕事です。 メモリ領域の管理手法には大きく分けて、スタックとヒープという2種類のものがあります。 スタック スタック(stack)とは、「積み上げる」、「堆積物」というような意味ですが、 その言葉通り、データ領域を積み上げていくような形で管理する方式です。 すなわち、最後に確保した領域を最初に開放します(上に積んで、上から降ろす)。 スタックによるメモリ管理の模式図を図1に示します。 プログラムで使うデータの多くは、あらかじめ決まっている短い範囲でのみ利用されます。 データの利用される範囲のことをスコープ(scope)と呼びます。 図中に示すように、一般に、スコープは入れ子になっていて、内側のスコープで使うデータ

    メモリ管理 - コンピュータの基礎知識 | ++C++; // 未確認飛行 C
    quodius
    quodius 2014/08/13
  • C# のメモリ管理 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

    概要 C# をはじめとした .NET Framework 上で動く言語は、メモリ管理を .NET Framework のガベージ コレクションに任せることで、管理の手間を削減できます。 しかし、.NET Framework に任せれたとしても、 メモリ管理の方法を知ることは有益でしょう。 例えば、サイト内でも「コンピュータの基礎知識」の「メモリ管理」で説明しているので、興味があれば参照してください。 セクションでは、C# のメモリ管理と関連して、次節以降、以下のような話をしていきます。 「値型と参照型」 「引数の参照渡し」 「[雑記] スタックとヒープ」 「ボックス化」 「Nullable 型」 「リソースの破棄」 このページは、「コンピュータの基礎知識」とC#の橋渡しのようなもので、 次節以降の話と、「メモリ管理」で説明しているような概念の関わりについて説明します。 C# とスタック

    C# のメモリ管理 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
    quodius
    quodius 2014/08/13
  • オプション引数・名前付き引数(C# によるプログラミング入門)

    概要 Ver. 4.0 C# 4.0 でオプション引数と名前付き引数が追加されました。 ポイント オプション引数と規定値:int Sum(int x = 0, int y = 0) { return x + y; }とか書けるようになった オプション引数の省略:Sum(); Sum(1); Sum(1, 2); 名前付き引数:Sum(x: 1, y: 2); Sum(y:1, x: 2); Sum(y: 1); 引数の規定値も、引数名も、public なものは後から変更してはいけない(利用側コードを壊す)ので要注意。 オプション引数は C++ にもある機能ですね。 これは、メソッドのオーバーロードで似たようなことが可能なので、 今まで C# では敬遠し続けてきたようです。 まず、C++ 同様、 以下のように規定値(default value)を持ったメソッドを定義します。 static i

    オプション引数・名前付き引数(C# によるプログラミング入門)
    quodius
    quodius 2013/04/10
  • 反復処理

    概要 プログラム中で、条件が満たされるまで何度も同じ処理を繰り返したい場面がよくあります。 C#ではそういう反復処理のためにwhile、do、for、foreach などのキーワードを用意しています。 (このうち、foreach は「foreach」のところでより詳しく説明します。) ポイント while (条件) 条件が真の間繰り返し do 条件にかかわらず、最低1度は実行される while (条件); for (初期化; 条件; 更新) 反復したい処理 foreach (変数 in コレクション) コレクション内の要素の列挙 while 文 while 文は以下のような書き方をします。 while(条件式) 繰り返したい文 // 条件式が真の間繰り返される if と同じく、英文法に近い書き方になっています。 while A, B (A の間、B)。 while の後ろの括弧内の条件式が

    反復処理
    quodius
    quodius 2012/09/21
  • デリゲート

    概要 デリゲート(delegate: 代表、委譲、委託)とは、メソッドを参照するための型です。 C言語やC++言語の勉強をしたことがある人には、 「デリゲートとは関数ポインターや関数オブジェクトをオブジェクト指向に適するように拡張したもの」 と言った方が分かりやすいかもしれません。 デリゲートは用途も関数ポインターとほとんど同じで、 述語やイベントハンドラ(「イベント」で説明)等に利用します。 ただし、C言語の関数ポインターと違い、 インスタンスメソッドを参照したり、 複数のメソッドを同時に参照する事が出来ます。 delegate(委譲)という言葉のニュアンスとしては、 「他のメソッドに処理を丸投げするためのオブジェクト」というような意味です。 イベントが起きたときのイベントハンドリングをどのメソッドに丸投げ(委託)するかを指示するためなどに使われます。 ポイント C# では、メソッドも他

    デリゲート
    quodius
    quodius 2012/09/19
  • C# によるプログラミング入門 [データ処理] LINQ

    概要 Ver. 3.0 C# 3.0(そして、同時に発表された VB 9.0)の目玉となる新機能は、 Language Integrated Query、略して LINQ と呼ばれるもので、 リレーショナルデータベースや XML に対する操作をプログラミング言語に統合するものです。 LINQ を用いることで、様々なタイプのデータソースに対する検索や操作を、 共通の構文で行うことができます。 IEnumeable を実装するコレクションクラスに対するもの(LINQ to Object)や、 XML に対するもの(LINQ to XML)、 それに、リレーショナルデータベースサーバに対する SQL クエリを生成するもの(LINQ to SQL)などがあります。 LINQ には以下のような利点があります。 オブジェクト指向言語らしい書き方でデータベースへの問い合わせができます。 in-memor

    C# によるプログラミング入門 [データ処理] LINQ
    quodius
    quodius 2012/09/19
  • 1