ようこそ Go!Go! ASP.NET へ ログイン | 登録 | ヘルプ

F# 初体験、F# はやっぱり .NET でした。

このエントリは F# Advent Calendar jp 2010 の第13回のものです。

 

今思い返すと F# 一度も触れたことがない私がこの Calendar に何故登録したのか…

そして、いつの間にか私のところまで順番が回ってきていました。何も考えてない…(;´ρ`)

とりあえず F# も .NET だから一通りのクラスは弄れるよ!という情報は聞いていたので、画像表示アプリでも…

でも何をどうすれば解らないでいたところ、いげ太さんに色々アドバイスを頂き、とりあえず作ることに。

ちなみにいげ太さんから教えてもらったアドバイスは下記の通り。

  • どっちにしろデザイナ サポートが受けられないので、ナウでヤングな F# er としては WPF を推したい! .xaml だけポトペタで作って、それ以外は全部 F# コードで書く感じになります。 http://fssnip.net/H
  • 名前空間のインポートは using でなく open。let は var みたいなもので、しかも変数も関数もローカル以外でも let を使う。んで (fun 引数 -> 本体) がラムダ式。あと :?> がダウンキャスト(ちなみに :> がアップキャスト)。
  • さらに一番大事な、インデントがスコープ ブロックになること(C# でいう { ... } はインデントであらわす!)を押さえておけば、なんとなく書けそうかなーと思いますです。
  • あー、それと、F# の event はすべて IEvent を実装するオブジェクトで、C# で += とするところ F# では IEvent.Add メソッドを使う、て違いもありますね。
  • せっかくなのでまとめるとこんな感じです。 http://ideone.com/i8lp8 #fsharp #wpf

なんと・・・ F# 触りしか知らない自分に差し迫った F# プログラミング入門 意外と簡単なようで特異な感じを受けます。

いげ太さんに教えてもらったページを確認すると、確かに open が名前空間使用時に使っているし、どことなく .NET ぽさも感じられました。

VS 2010 の F# チュートリアルプロジェクトなどで確認後いざ実践!!!と行きたいところでしたが、ちょっと親ばか自慢もしたかったので、当初の予定通り画像を WPF で表示してみました。

悲しいかな F# 自身のソースは結局 XAML を呼び出すためにしか利用していないという事実…(あかいいぬ君と同じ。)

open System
open System.IO
open System.Windows

[<STAThread>]
[<EntryPoint>]
let main(_) =
let w = Application.LoadComponent(new System.Uri("/FSConsoleApplication1;component/Pict.xaml", System.UriKind.Relative)) :?> Window
(new Application()).Run(w)

XAML 側はこんな感じ。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="バックはF#でフロントはWPF!" Height="370" Width="475">
<Grid>
<ComboBox Height="24" HorizontalAlignment="Left" Margin="158,0,0,0" VerticalAlignment="Top" Width="120">
<ComboBoxItem>
<StackPanel Orientation="Horizontal">
<Image x:Name="img" Source="./P1000711.jpg" Height="16" Margin="3"/>
<TextBlock VerticalAlignment="Center">お絵かき中</TextBlock>
</StackPanel>
</ComboBoxItem>
<ComboBoxItem>
<StackPanel Orientation="Horizontal">
<Image x:Name="img2" Source="./P1000945.jpg" Height="16" Margin="3"/>
<TextBlock VerticalAlignment="Center">もぐもぐ中</TextBlock>
</StackPanel>
</ComboBoxItem>
<ComboBoxItem>
<StackPanel Orientation="Horizontal">
<Image x:Name="img3" Source="./P1000961.jpg" Height="16" Margin="3"/>
<TextBlock VerticalAlignment="Center">お昼寝中</TextBlock>
</StackPanel>
</ComboBoxItem>
</ComboBox>
<Label Content="画像ファイルを選んでね" Height="28" HorizontalAlignment="Left" Margin="0,-4,0,0" VerticalAlignment="Top" IsEnabled="True" />
<Image Height="300" HorizontalAlignment="Left" Margin="0,28,0,0" Stretch="Fill" VerticalAlignment="Top" Width="450" Source="{Binding ElementName=img2, Path=Source}" />
</Grid>
</Window>

ほんとは ComboBox の SelectedValue とかに Image の Source あれば下の Image コントロールにも反映できたんだろうなぁと思いつつ、上のソースでは XAML 内で帰結させる方法がぱっと思い浮かばない…残念ながら時間も無かったため、XAML 内の修正や F# 側からアプリを弄るまではたどり着きませんでした(りばてぃさんに相談してようやく大きい Image にバインディングできたレベル…)。

とりあえず、F# 食わず嫌いから一歩だけ前進できたのは良かったです。あと、雑感。

  • いげ太さん優しい!
  • プロジェクト内にフォルダ作れないのに衝撃を受けた
  • プロパティから出力の種類を選択できるのもビックリ
  • F# チュートリアルプロジェクトは構文や使い方を知れるけど、プロジェクト化させる必要はあったのかな…?
  • F# + WPF でおもろいサンプル見つけれなかった。
  • ほんとは F# + Azure(Worker Role) で何かやりたかったけど、まだまだそこにたどり着けるほど解ってない…

他にも色々あったけど、できなかった、触れた、楽しかった!(F# 部分は前述同様に動作確認して実際のアプリのソースには生かしてないけど…)という感じで。

一応出来たアプリは下記の通り、下の大きい画像は変わりません。折角だからちょっと前に撮った可愛い感じの娘載せておきました。

F# 初体験、F# はやっぱり .NET でした。

 

#また回ってくるようだったら F# から WPF のイベント弄る所らへんまで触れてみたいなぁ。

公開 2010年12月21日 18:33 投稿者 naoki
タグ : , ,

コメントの通知

この投稿にコメントが付いた場合にメールを受信するには、登録してください。ここ

また次のフィードから、お気に入りのRSSリーダーを使って最新の状態を知ることもできます。 コメントのRSSフィード

コメント

# F#でASP.NET MVCを構築する基本

2011年12月11日 6:53 by ナオキにASP.NET(仮)

F# Advent Calendar 2011 の参加エントリです。 F# まだあまりいじれてません… 去年も参加して、 F# 初体験、F# はやっぱり .NET でした。 と書いてみました。とは言いつつ忙しさにかまけて

どのような感想ですか?

(必須) 
必須 
(必須)