Essential C# 5.0読書メモ #1

2015年4月30日木曜日

Essential C# 5.0はよいものだ、ということで読んだメモを残していく。
#1だけど途中(chapter 2)から。chapter 1は特にメモを取ることもないかなーと思ってさらさら読んだため。
今回はデータ型について。C#では数値型の種類が充実してるという話から、浮動小数点型やdecimal型の話まで展開していく。

string

Stringは単純にSystem.Stringの省略というのは見落としてた。言われてみればそりゃそうだ。

decimal

decimal型について、これまで全然使ったことがなかったので知らなかったことや誤解してたことがいっぱいあった。
JavaのBigIntegerのようなもので十進格納の多倍長型だと思ってたけれど、128-bit固定のものだった。値の範囲が±N * 10^k (N: 96-bitの正の整数、-28 <= k <= 0)ということでああなるほど、となった。
軽く計算した感じ、96-bitだと28.896桁ぐらいが有効、ということで有効桁数が28-29となっているのも納得いった。
decimal型のリテラル・サフィックスがMまたはmというのも全然知らなかった。ひょっとするとこれまでにどこかで見てるのかもしれないけど、脳で拾ってなかったっぽい。
リテラル・サフィックスは基本的に大文字で書くようにとある(これ自体はlongのlが1と紛らわしいから+他のも揃える意かな)けれど、まあそうならなかった環境もあるよなぁ(Unityとか)。
string.FormatでのR(またはr)フォーマット指定、知らなかった。Parse()すれば元の数値へと戻せるようなラウンディングをしてくれるのは便利なのかもしれない(単純にこれまで使ったことがない)。

char

charの実体は8-bit(byte)だと思い込んでたけれど16-bit(ushort)だと知った。これも完全に意識してなかったやつだ。運の良い日本語文字はcharに収まるということか…。試してみないと。
リスト1のコードをコンパイルしてみると
リスト1 サロゲートペアを含む文字をcharへ突っ込んでみる
using System;

class A {
  public static void Main() {
    char c1 = 'ヴ';
    char c2 = '𠮟';
    System.Console.WriteLine("{0}", c2);
    return;
  }
}
リスト2のようにエラーとなる。
リスト2 サロゲートペアを含む文字をcharで表現するのはコンパイルエラー
mcs a.cs
a.cs(6,13): error CS1012: Too many characters in character literal
Compilation failed: 1 error(s), 0 warnings
なるほど。日本語を扱う時にはstringばかり使うので全然気付かなかった。

var

右辺値の型が明確である場合に暗黙の型指定を使うように、というポリシーが書かれてた。昨今は特に考えず暗黙の型指定をしてるけど、もう少しは意識してみようかな。
値型と参照型のところまで進みかけたけど、まだこのチャプターの先が長いことに気付いてやめた。

0 件のコメント:

コメントを投稿