サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Appleイベント
ufcpp.net
C# によるプログラミング入門です。C# 初心者の方はもちろん、これからプログラミングを始めようという方も対象としています。
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 の方が「ア
だいぶ炎上してる例のあれ doの意味が全体的に逆になっています。 #118 対応ミスってるとはいえさすがにかわいそうなレベルでいいがかり付けられてる感じもするのでちょっと補足を。 元々の問題 マイクロソフトの機械翻訳がよくやらかすのはいつものことなんですが。 今回は何をやらかしたかというと、よくある ✓DO: 〇〇してください X DO NOT: 〇〇はしないでください みたいなやつを、DOもDO NOTもどっちも「しないで」と訳してしまっているという問題。 「しないで」も不自然だし、ましてDOの方は真逆の意味になっているという誤訳。 どうしてこうなる… みたいな気持ちはもちろんあるものの、こういう「普通の文章」になっていない部分の単語ってのは、機械翻訳では一番ミスを起こしがちな部分です。 たぶん、原文の時点で何らかのアノテーションでも付けておくとかしないと、今後も同様の誤訳は起こりまくる
昔、gist にだけ置いてて、そういえばブログに書いてなかったものを思い出したので書いておくことに。 (一応、部分的には言及したことがあるんですけど、ちゃんとした話はしたことがなかったはず。) 決定論的ビルド 3年くらい前まで、C# コードをコンパイルすると、ソースコードを一切書き換えていなくても、生成結果の exe/dll や pdb のバイナリが変化していました(決定性(deteminism)がない)。 原因は以下の2つです。 バイナリ中に埋め込まれる GUID にタイムスタンプと乱数から生成される値を使っていた デバッグ用のファイル情報がフルパスで埋め込まれていた GUID の方はタイムスタンプと乱数なので本当に致命的で、ローカルで再コンパイルしても毎回バイナリが変化していました。 フルパスの方は基本的には pdb (デバッグ用シンボル情報)だけの問題なんですが、 exe/dll で
Windows Power Shell は、 Windows をコマンドラインから、あるいは、 スクリプトを使って管理するために作られた新しいシェル環境です。 作られた目的のせいか、 Power Shell を解説する書籍・ウェブサイトには、 「管理者向けの TIPS、実例集」 (レジストリの値の変え方とか、WMI の呼び出し方とか) みたいな物が多かったりします。 でも、Power Shell を調べてみた感じ、 Power Shell 用のスクリプト言語や、 コマンドレットの動作・作り方など、 プログラミング的にも結構面白そうな感じなので、 その辺りを中心に話をしてみようかと思います。 (注: コマンドの実行結果など、 ページ表示の収まりをよくするため、 ところどころ省略している部分があります。 )
using static System.Console; class Welcome { /// <summary> /// saying hello to all visitors and welcome. /// </summary> /// <param name="args">visitors</param> public static void Main(string[] args) { foreach(string visitor in args) { WriteLine($"Hello {visitor}."); } WriteLine("Welcome to my web page."); } } C# によるプログラミング入門 コンピュータの基礎知識 アルゴリズムとデータ構造 ブログ ようこそ ++C++; へ。 C#・情報工学を中心に勉強用ページとブログを載せています。
世の中がほぼUnicode前提になってめでたしめでたし。とはいかなかった現実の話。 String型でできる文字列処理とか、ソースコード自体、特に識別子で使える文字とか。 軽くおさらい: Unicode まあいろんなところでいろんな人が書いてると思うのでさらっと概要だけ。 Unicodeは、元々、「65,536文字あれば十分だろ」とかいう幻想の元、2バイト固定長の文字コードとして作られていました。 もちろん足りなくて、ビット数を拡張。基本が2バイトのままでこの拡張した分を取り扱えるようにしたのが今のUTF-16で、拡張分は2文字分(4バイト)を使って表現。 この、2文字分使って1文字を表すやつのことをサロゲートペア(surrogate pair: 代理対)と呼びます。 あと、ASCII文字も2バイトになるのを欧米人が嫌って、ASCII文字はASCIIコードのまま、逆に漢字・ひらがな・カタカナ
概要 デリゲート(delegate: 代表、委譲、委託)とは、メソッドを参照するための型です。 C言語やC++言語の勉強をしたことがある人には、 「デリゲートとは関数ポインターや関数オブジェクトをオブジェクト指向に適するように拡張したもの」 と言った方が分かりやすいかもしれません。 デリゲートは用途も関数ポインターとほとんど同じで、 述語やイベントハンドラ(「イベント」で説明)等に利用します。 ただし、C言語の関数ポインターと違い、 インスタンスメソッドを参照したり、 複数のメソッドを同時に参照する事が出来ます。 delegate(委譲)という言葉のニュアンスとしては、 「他のメソッドに処理を丸投げするためのオブジェクト」というような意味です。 イベントが起きたときのイベントハンドリングをどのメソッドに丸投げ(委託)するかを指示するためなどに使われます。 ポイント C# では、メソッドも他
概要 C# 2.0 で、 C++でいうところのテンプレート、一般にはジェネリック(ジェネリクス)などと呼ばれるものが実装されました。 (C++ のテンプレートとは少し仕様が異なりますが。) ジェネリック※(generics:総称性)、 あるいは、総称的プログラミング(generic programming)とも呼ばれますが、 この機能は、 さまざまな型に対応するために、型をパラメータとして与えて、その型に対応したクラスや関数を生成するもの機能です。 ポイント ジェネリック: 型だけ違って処理の内容が同じようなものを作るときに使う。 ジェネリッククラス:IComparable<T> { int CompareTo(T x, T y); } ジェネリックメソッド:T max<T>(T x, T y) { ... } ※genericsの訳語 英語だと、名詞では generics、形容詞が ge
using System; class Welcome { /// <summary> /// saying hello to all visitors and welcome. /// </summary> public static void Main(string[] args) { foreach(string visitor in args) { Console.Write("Hello {0}.\n", visitor); } Console.Write("Welcome to my web page.\n"); } } C:\WINDOWS\desktop\welcome>nmake -nologo csc /out:welcome.exe /nologo welcome.cs C:\WINDOWS\desktop\welcome>welcome Welcome to my
概要 .NET Framework では、マルチスレッドプログラムを作成するためのクラスライブラリを提供しています。 C# でマルチスレッドプログラムを作成する場合、これらライブラリ中のクラスを用いて行うことになります。 また、C# ではスレッド間の同期を取るために lock 文という構文を用意しています。 ポイント C# なら、Thread クラスとデリゲートで並行処理・並列処理もお手軽。 実際には、スレッドを直接作らず、スレッド プールというものを介して使う。 .NET Framework 4 以降なら、Task クラスを利用。 排他処理は lock 文で。 マルチスレッドとは まず、スレッドに関して簡単に説明しておきます。 簡単に言うと、スレッド(thread: 糸、筋道)とは一連の処理の流れのことを言います。 図1 に示すように、 処理の流れが一本道な物をシングルスレッド、 複数の
2005年9月、C# 2.0 の正式出荷を目前にして、 C# の次世代拡張 C# 3.0 の言語仕様が公開されました。 C# 3.0(そして、同時に発表された VB 9.0)の目玉となる機能は、 Language Integrated Query、略して LINQ と呼ばれるもので、 リレーショナルデータベースや XML に対する操作をプログラミング言語に統合するものです。 (データベースや XML 操作用のライブラリと、 プログラミング言語中にSQL 風の問い合わせ構文を埋め込めるようにする言語拡張から成ります。) C# 3.0 に追加された機能の多くは、基本的にこの LINQ を使うために必要な機能、 あるいは、より便利に LINQ を使うための機能になります。 ちなみに、詳しくは「小さな機能の組み合わせ」で説明していますが、 LINQという大きな目的を、小さな機能の組み合わせで実現し
一昨日のあれ、まだなんかやってんだ… なんか、個人的にはこういうのはもっと機械的に処理されてほしく、 言うこと言ったあとは、 なんか2chみたいな荒れ方し始めたから unsubscribe してたんですけども。 機械的に処理してるのが、冷たくあしらったり避難してるように見えてたら嫌だなぁということで、 ちょっとエモい感じの補足を。 最初の1行コメントについて 最初の1行コメント あー、これはひどい誤訳だわー。よくあるけど。 それじゃたぶん通じてないけど、ご報告ありがとうございます。あとはこっちで処理しておきます。 というつもりだったんだけど、「それじゃ通じない」のところだけを取られて、避難してるみたいに見えたみたいで、そこは本当に申し訳ない… 誤解の原因になったやつについて 誤解の原因になったやつ これが誤解の原因になってるなぁ… まあ、わかりみが深いけども。マイクロソフトのドキュメントに
先週金曜日の、ブログに残しとくの忘れてた。 「開発エキスパートに学ぶ! C# と Visual Studio の今と未来」ってタイトルのセミナーで登壇してきました。 古賀さんの書籍「チーム開発の教科書 C#によるモダンな開発を実践しよう! Visual Studio 」の出版記念だったりします。 ということで、多少チーム開発のことを意識しつつで「C#の今と未来」な話をしてきました。 どういう背景があって今のC#があるか、C#の言語仕様の裏にある設計思想みたいな感じの話を中心に。あと、少しだけ、オープンソースになって少し見えてきている今後の話を。 まあ、前半とかは、C#に限らず、新しめのプログラミング言語には共通して言えるような話かなぁとも思います。良いとされるパターンを楽に書けないといけない。さもないと、特にチーム規模大きくなればなるほど、締め切りに追われて負債の蓄積。 新しい技術、特にプ
概要 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
概要 プロパティ(property:所有物、特性)とは、JavaやC++にはない(Visual Basicにはある)機能で、 クラス外部から見るとメンバー変数のように振る舞い、 クラス内部から見るとメソッドのように振舞うものです。 JavaやC++がこの機能を持ってないことからも分かると思いますが、 プロパティはオブジェクト指向言語に必須の機能ではありません。 しかし、これから説明していくように、あると便利なものです。 ポイント プロパティ: 中(実装側)からはメソッドのように扱え、外(利用側)からはメンバー変数のように見えるもの。 実装の隠蔽(カプセル化)の原則を崩すことなく、 アクセサー関数の煩雑さを解消。 プロパティとは 「実装の隠蔽」で、 メンバー変数はクラス外部から直接アクセス出来ないようにして、 オブジェクトの状態の変更はすべてメソッドを通して行うべきだと書きました。 これを忠
corefx で以下のようなアナウンスが。 .NET Core 3.0 concludes the .NET Framework API porting project buildの時点で .NET を .NET Core ベースに一本化、.NET Framework は 4.8 をもって最後にするという話があったわけですが、 改めてというか、総括的なアナウンスです。 API 数 まず、.NET Framework から .NET Core に移植してきた API 数の総括。 メソッドのオーバーロード1個1個を「1 API」とカウントしてるんだともいますが、以下のような数字が書かれています。 .NET Core 1.0 時点では1.8万個 .NET Standard 2.0 では .NET Framework、.NET Core、Xamarin の共通部分として3.8万個 Windows
概要 属性(attribute)とはクラスやメンバーに追加情報を与えるものです。 例えば、public や private などといったC#のキーワードもある種の属性と考えることが出来ます。 public ならば「このメンバーはクラス外からも参照可能」、 private ならば「このメンバーはクラス内のみから参照可能」という追加情報が与えられます。 C++ などの既存の言語では、このような追加情報を定義する場合、 言語仕様自体を拡張し、新たにコンパイラを作り直す必要がありました。 それに対し、C# では自分で属性を定義し、クラスやメンバーに付加することが出来ます。 すなわち、ライブラリで提供されている属性や自作した属性を用いることで、 コンパイラに対する指示を行ったり、クラスの利用者に対する情報を残すことが出来ます。 属性の情報は、以下のような場面で使われます。 条件コンパイルなどの、コン
概要 C# には、イベント駆動型のプログラム作成を容易にするため、 イベント処理用の構文 event が用意されています。 event は、デリゲートに対する「プロパティ」のようなもので、 以下のような特徴を持っています。 デリゲート呼び出しはクラス内部からのみ可能。 外部からはデリゲートの追加/削除のみが可能。 サンプル https://github.com/ufcpp/UfcppSample/tree/master/Chapters/Event/EventDriven ポイント イベント: プロパティのデリゲート版。イベント駆動処理に使われるのでこの名前になっています。 イベント駆動処理には、単なるデリゲート型のプロパティでは機能が不十分で、 「呼び出しはクラス内からのみ、外部からできるのは登録・削除のみ」という制約が必要になります。 C# には、この制約を満たすような専用の構文(ev
twitterで流れてきてて、気になったやつ。 Porting to .NET Core 内容的には、 フィードバック募集中なのでお願いします .NET Coreは今、ASP.NET、UWP、コンソール アプリに使えるけども、.NET Frameworkからの移植のモチベーションはそれぞれ何か .NET Framework と .NET Coreの関係・差分 意図して.NET Coreには取り込まなかったものがちらほらあるから注意 .NET Core化するかどうか、単純に時間的な不足で検討してないものもちらほら 特にフィードバックほしいのはここ。ほしいかどうか、優先度付けしたい 移植にあたってのコツ みたいなの。 以下、さらっと概要。 何を移植するか ASP.NET 移植する理由: .NET Coreならクロスプラットフォーム。MacやLinuxで動く マシン全体に対するインストールじゃな
概要 注意: 2010年10月時点での CTP (community technology preview)版を元にした記事になっています。 製品版までに変更の可能性があります。 (async や await というキーワードも変更される可能性あり。) Ver. 5.0 スレッドを使った非同期処理を行いたい動機としては、以下の2つが挙げられます。 非ブロッキング処理: I/O 待ちとかで UI スレッドをフリーズさせないようにする 並列処理: マルチコアを活かした並列処理でパフォーマンス向上 このうち、並列処理に関しては、Parallel クラスや Parallel LINQ で簡単に対応可能 (ラムダ式や LINQ を使えば、並列じゃない場合とほとんど変わらず書けます。 参考: 「[雑記] スレッド プールとタスク」)。 一方の、非ブロッキング処理は、今までは結構面倒だったものの、 as
概要 プログラミング言語での値の受け渡しの方法には 値渡し(pass by value)と参照渡し(pass by reference)という2つの方法があります。 C# では、値の受け渡しは基本的に値渡しになります。 しかし、ref や out といったキーワードを使うことで参照渡しにすることが出来ます。 ポイント 値渡し: メソッド内で引数の値を書きかえても、呼び出し元には影響しない。 参照渡し(ref): メソッド内での値の書き換えの影響が呼び出し元に伝搬する。 out: 特殊な参照渡し。戻り値以外にも値を返したいとき(複数の値を返したいとか)に使う。 値の受け渡し 値の受け渡しが発生する場所は何カ所かあります。例えば以下のような場所です。 変数から変数 変数から引数 戻り値から変数 var x = 1; var y = x; // x から y に値を渡す static void
祝 .NET 5.0 GA。 Announcing .NET 5.0 C# 9.0 on the record Visual Studio 2019 v16.8 and v16.9 Preview 1 Release Today Announcing ASP.NET Core in .NET 5 Visual Studio 2019 16.8 リリースノート Visual Studio 2019 18.9 Preview 1 リリースノート .NET Conf 2019 - Day 1 ライブ配信 一応注釈なんですが、 .NET は以下のような状態です。 .NET 5.0 からは単に「.NET」になります .NET Framework, Standard, Core の統合結果です TargetFramework 名、 net5.0 で、 netstandard2.1 と netcorea
概要 拡張メソッドは、静的メソッドをインスタンスメソッドと同じ形式で呼び出せるようにできるものです。 すなわち、 今までなら、 int x = int.Parse("1"); と書いていたものを、 static class Extensions { public static int Parse(this string str) { return int.Parse(str); } } というような静的メソッドを用意することで、 以下のような構文で呼び出せるようになります。 int x = "1".Parse(); ポイント 拡張メソッド: 静的メソッドをインスタンスメソッドと同じ書式で呼び出せるようにすることで、 あたかもクラスに新しいメソッドを追加したかのように見せかける仕組みです。 単に、静的メソッドを後置き記法で呼び出せるようになっただけとも考えることができます。 定義側: 第1引
概要 例外(exception)とは、 本来ならばプログラム中で起こってはいけないことが起こってしまうことをいいます。 堅牢なプログラムを作成するためには、 例外が起こったときでもプログラムが異常な動作をしないよう、 しっかりと例外処理(exception handling)を行う必要があります。 C# では、例外処理を行うための専用の構文が用意されていて、 プログラマが例外処理を容易に行えるようになっています。 ポイント 例外: 「開こうとしたファイルが存在しなかった」など、特別な対処が必要な状況。 例外への対処には、例外用の構文があるのでそれを使いましょう。 try { 例外が発生する可能性のあるコード } catch(例外) { 例外処理 } 例外処理とは 例外の例を挙げると、ユーザーが想定外の文字列を入力してきたときや、 プログラムに必要なファイルが開けなかったときなどがあります。
基本クラスライブラリ 正規表現(文字列パターン マッチング) 文字列の書式設定 コレクション コレクションの内部実装 .NET Framework 概要 Windows Presentation Foundation 概要(WPF) XAML 概要(WPF) XAML の基本構造(WPF) XAML の高度な機能(WPF) WPF のコンテナ(WPF) WPF の GUI 要素(WPF) XAML とプログラムコード(WPF) データバインディング(WPF) テンプレート(WPF) アニメーション(WPF) Windows Communication Foundation 概要(WCF)
次のページ
このページを最初にブックマークしてみませんか?
『++C++; //未確認飛行 C++』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く