XAMLが難しいと思ったのでXAMLとは何かについて調べた


XAMLとはなにか

この記事はこちらのXAML Tutorialを翻訳・要約・補足した内容となります。
他記事からの引用も有るため多少原文にはない内容がありますので、
原文を当たりたい方はリンクまでお願いします。原文も平易な英語で読みやすいです。

リンクのチュートリアルはプラットフォームに依存しないXAMLの解説を狙いとしていますが、
本記事はWPFアプリケーション開発を前提としたXAMLの解説としている点ご理解ください。

Xamarin、UWPはわかりません。

対象読者

XAMLに少し触ったがいまいち理解が深まらない初学者。

XAMLとは何か?

XAMLとは「宣言型マークアップ言語」

  • 宣言型:
    • SQLなどのように「何を得たいか」を定義するプログラム構成。 『SQLのクエリは「どのようなデータが欲しいか」を宣言し、どのテーブルから先に見るかなどといった「いかにしてデータベースにアクセスするか」という命令・手続きには関与しない。』 (Wikipedia-宣言型プログラミング引用)

XAMLはインスタンスを階層的に表現する言語

  • 『XAMLはオブジェクトのインスタンスを組み立てるための言語』

私はHTMLのような感覚で書いて本質が理解できずつまづきましたが、XAMLの本質はC#コード(のようなもの)で
インスタンスを初期化してプロパティ値を入れる作業に過ぎません。
実際、XAMLをC#コードで表現することもできます。

ですからXAMLは『UI特化言語ではない』のです。(XAML入門より引用)

//下記2つの記述は同じ結果となる。
//XAML
<StackPanel> 
    <TextBlock Text = "Welcome to XAML"/>
    <Button Content = "Ok" Height = "20"/> 
</StackPanel> 

//C#コード
         //StackPanelインスタンス作成
         StackPanel stackPanel = new StackPanel();
         this.Content = stackPanel; 

         //TextBlockインスタンス作成
         TextBlock textBlock = new TextBlock(); 
         textBlock.Text = "Welcome to XAML Tutorial"; 
         stackPanel.Children.Add(textBlock);  

         //Buttonインスタンス作成
         Button button = new Button(); 
         button.Content = "OK"; 
         button.Height = 20; 
         stackPanel.Children.Add(button); 

(XAML vs C#Code)[https://www.tutorialspoint.com/xaml/xaml_vs_csharp_code.htm]

XAMLの利点

初期のGUIフレームワークでは、アプリケーションの見た目と振る舞いを分けて考えることができませんでした。
C#やVB.netなど、GUIと振る舞いを同じ言語で作成していたため、UIとそれに付随する動作の両方を実装するには開発者の手間がかかっていました。

XAMLでは、デザイナーのコードからビヘイビアを分離することが非常に簡単です。
そのため、XAMLプログラマーとデザイナーは並行して作業することができます。XAMLのコードは非常に読みやすく、理解しやすい。

XAMLはどうやって動いているのか?

前述の通り、XAMLはXAMLプロセッサによってコードにコンパイルされ、C#コード同様.NETコンパイラーがアプリを構築します。

まとめ

今回はXAMLとは何かという概要だけ説明しました。
要点としては「インスタンスを階層で表している」に尽きると思います。

これを理解していれば究極MSDNを参照しながら開発してゆけることでしょう。究極は、ね………。