• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:F#って何??)

F#とは?初心者プログラマのための解説

バッハ ダニエル(@Ogacha)の回答

  • ベストアンサー
回答No.4

Cross999さん向けの答え方をします。 .NetFramework、そしてその申し子言語であるC#は、プログラミング言語の中では結構後発なので、先輩言語、先輩基盤の成功や失敗を鑑みて設計されており、いろいろな部分で洗練されています。 F#は、C#よりさらに後発の.NetFramework上で動作する言語で、色々な指向を持たせた言語です。 C++のようなオブジェクト指向はもちろん、関数型言語の特徴も持っていて、文法定義もでき、非同期処理に強く、型もいちいち指定しなくても推測してくれるという、素晴らしい言語です。 コード量が少なく、簡潔で、しかもバグが出にくいです。 何ができて……という問いには、何でもできると答えておきます。ただ、.NetFramework主体の言語なので、C++のようなネイティブ処理ではなく、マネージコード(.NetFramework)前提で設計されていると思います。なので、範囲としては、C#と同じような範囲であって、ネイティブならば、C++や、C++/CLIとかがよいと思います。 何をするのに向いている……という問いならば、マルチ指向に設計されているのですから、用途は広いと思います。特に、非同期処理が得意なわけですから、Silverlight、WPF、WindowsForm などのGUIの処理にも向いています。 F# の F は、FunctionalのFで、他からの移植でなくて.NetFrameworkから生まれた言語の中では、初めて関数型言語の性質を持つという特徴を持っています。ただ、関数型だけではなくマルチ指向なので、ご注意ください。 さて、関数型言語について少しだけ書きます。これは、F#ではなく関数型についての特徴です。 CやC++が手続き型言語と言われて、手続きを示すのに対し、宣言型言語とも言われます。 つまり、手続き型言語のように「あれしてからこれをしてそれを返す」といった感じではなく、「○○という処理は、こういうものを返す」という約束を書くようなものです。 SQLは関数型ではありませんが、宣言型言語ではあります。あれしてこれしてという処理ではなくて、Select文やUpdate文で、「これこれこういうものをこうする」と一文で書きますね。 関数型言語は、なるべく状態を持たせない、なるべく変数を使わないものです。手続き型から移行するためには、一度頭を切り替えないとダメなので、一言ではなかなか説明は難しいため、関数型ではないSQLを引き合いに出してしまいましたが、そういう宣言が集まって定義されているものです。 関数を引数として受け取ったり、戻り値が関数だったりするのは、関数型では普通です。逆に、CやC++の戻り値voidに当たる処理はありません。すべての関数は、何らかの戻り値を必ず返します。 そして、数学のように=で結ばれた右辺と左辺は等しいです。Cのように、a = a + 1 みたいなのは、関数型にはありません。F#でいえば、aはあらかじめ変化できる特別なもの(変数)と定義しておいて(通常は一度決めたら変化させないので)、a <- a + 1 と書きます。イコールではないですね。 CodeZineには、いくつか割と解りやすい入門記事が載っています。参考URLに載せておきます。 また、MSDN Magazineにも解りやすい記事があるので、以下に載せておきます。 http://msdn.microsoft.com/ja-jp/magazine/ff714588.aspx

参考URL:
http://codezine.jp/article/detail/4254
Cross999
質問者

お礼

Ogachaさん,回答ありがとうございます. 私はプログラムが強い人間では無いので,Ogachaさんが易しめに書いてくれたので助かりました. >何ができて……という問いには、何でもできると答えておきます。 「何ができるのか?」という質問は愚問でした. たしかに,プログラミングって,やろうと思えば,何でもできますよね,書き方が違うだけで. >何をするのに向いている……という問いならば・・・ 最近は,C#4.0で導入されたTPL等の勉強をしていますので,非同期処理は,大変興味があります. >さて、関数型言語について少しだけ・・・・ な,なんとなくは,分かりました. 結局は,自分で触ってみないと分からないものですが,触ってみる気になりました. ありがとうございました.

関連するQ&A

  • 異なるプログラミング言語を連携する手段はある?

    異なるプログラミング言語を連携する手段はあるでしょうか? 例えば、JavaでGUIの処理を書いておいて、計算をC言語で書いておく。まず、C言語で処理させてその結果をJavaが受け取りJavaのGUIで表示する。のような。 よろしくお願いします。

  • Windowsプログラミング 窓の分割について

    Windowsプログラミング初心者です。現在C言語によるGUIプログラミングを 作っているのですが、ウィンドウを分割して、その分割された各々のウィンドウ領域(例えば3つに分割すると)1つ目の領域にはログ1、2つ目の領域にはログ2、3つ目の領域にはログ3とか出せるように、窓を分割したいのですが、それに関する関数などをご教授していただけないでしょうか。 宜しくお願いいたします。

  • 新しく勉強したいのですが・・・

    将来、プログラマー・SEなどを目指したいのでC言語を勉強しようと思うのですが、プログラミング初心者でも分りやすい、C言語勉強用の本、よい勉強の方法などあったら教えてください。 よろしくお願いします。

  • Windowsのプログラマって

    現在、情報系の大学生です。 講義で教えてもらうのは基本的にC言語のみです。 ここで皆さんに聞きたいのですが、どこかで「Windows(のGUI)プログラマはコンソールプログラミングより難しく、一般ソフトでは必要な人材だから他のプログラマ(いわゆるコンソールアプリ)より待遇がいい」という話をどこかで耳にしたことがあります。 これって本当なのでしょうか。 プログラマの方、教えていただけると助かります。

  • \fはどのように使うのでしょうか。

    言語 :c 処理系:Borland C++ Compiler 5.5 OS  :Windows XP Home c言語でエスケープシーケンスの\fを試しても 上手く機能してくれません。 使い方が間違っているのかも分かりません。 \fは書式送りで、これがあるところで改ページが起こる 事を期待していたのですが、何も起こりません。 \fはどのように使うのでしょうか。

  • C# を始めたいのです. お知恵を拝借させてください

    お手数ですが、お知恵を拝借させてください. お願いします. 最近、C#を始めようと考えました.  参考書として まず、次の書籍を手に入れました. 全部、Microsoft の公式解説書です.   C#によるプログラミング Windows 上 C#によるプログラミング Windows 下 C# 標準リファレンス   Visual C#.NET ランゲージ リファレンス   プログラミング C# ところが、最初からよくわからぬ事ばかりです. どの本を見てみても、私がまず知りたい入出力関数の使い方が 見当たりませんです. 昔のC言語のころは、printf と、%6.2f のようなフォーマットでした. WriteLine となることはわかりましたが、フォーマットの詳細が まったく記述されていません. ファイルのオープンの手続きも同様です.どこにも見当たりません. C言語のころ、これらは命令ではなく、ライブラリ関数だと聞きました. それなら、どこを、何を見れば、この関数が見つけられるでしょう? 全く、困っています. よろしくお願いします.

  • CとC++をスクールで習おうと思うのですが。

    CとC++をスクールで習おうと思うのですが。 私は現在勤め先でデザイナーをしておりまして、アプリを作るのでプログラマーと一緒に仕事をしています。 しかし最近、デザイナーもプログラミングの習得が必要だと感じてきました。 といってもプログラミングが全く未経験なわけではありません。 初級ですが、以下の言語を使って簡単なツールを作った経験があります。 c、c#、javascript、vba(excel)、php、html、perl、独自言語、など ・excel上で外部ファイルを読み込んで様々な解析を行なうツール(vba) ・Web上で外部データや他のサイトからデータを収集して解析し、それをWebで結果を表示(php、js、perl、html) ・windows上で動く特殊な計算機(c#) ・CGツール(コンピュータグラフィック)上で動作する独自言語 こういう経験があるのですが、function関数を作ってファイルを読み書きして超初歩的なGUIを作れる程度のことしかできないんです。 私に足りないのは、「クラスって何?」「ポインタって?」「メモリ管理なんてしかことない」「リソースってどういうこと?」。 これらが仕事上で使わないので全然使い方がわからないのです。 しかしプログラマーと会議するときにこういう話が出てきて、理解できていないのでなんとかしなくてはなりません。 あと、VisualStudioを使ってみたことはあるのですが、いろいろなファイルが最初からあってこれらの意味もわかりません。 私は多少使ったことがある言語は習ったわけではなく本で勉強しながら覚えたので、プログラミングの基本が全くわかっていないようなのです。 こういうときにスクールに通うのは有効でしょうか? 都内なのでKen Schoolとかいいのかなあと思っているのですがどうでしょうか?

  • C言語について。

    C言語プログラマとしては、スタートアップコードは・・・ ・自分が書いたプログラムを、直接動かすために必要なライブラリ ・それはコンパイル後、リンカによって追加されるライブラリこれは、 どういう意味でしょうか?分かりやすく教えていただけると幸いです。すみません。で、 以下のかぶくんまんさんの回答です。 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11247611941 で、 C言語におけるプログラミングとは「main関数を書くこと」に他ならない。なぜ「main関数を書く」ことがC言語におけるプログラミングに他ならないのかと言えば、それは偏に「C言語のコンパイラはmain関数を呼び出すプログラムを生成するから」です。それがmain関数を求めるので結果的にmain関数がリンクされ、そしてmain関数が求めるままに他の関数もリンクされていくわけです。 で、その「main関数を呼び出すプログラム」こそが、C言語における「スタートアップコード」。 という回答で、main関数以降は、プログラマが書くのですよね?プログラマが関数をリンクさせる様なプログラムを書くということでしょうか?教えていただけると幸いです。すみません。 という所が分かりません。教えていただけると幸いです。すみません。以下のURL https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12247932542

  • 言語としてCを選択する理由

    VB.NETをちょっとかじった初心者です。 よく「プロのプログラマーになるにはC言語を学ぶべき」と聞くのですが、なぜプログラマを仕事とするのにC言語を習得するのがいいのかわかりません。 また、「最初の言語はCがいい」もよく聞くのですが、なぜかわかりません。 どなたかC言語を習得する意義を教えてください。

  • プログラミングについて。

    プログラミング初心者です。 ちょっと興味があり、プログラミングの勉強をしています。 テキストベースでプログラムを書いていったとして、どうやってGUIベースにすればいいのでしょうか? Linux上で簡単なプログラムをつくってコンパイルしましたが、コマンドから実行するともちろんCUIでの実行になります。 どうすれば、GUIベースで作れるのでしょうか。 言語以外の知識(専用ソフトウェア等)を必要とするのですか。 それとも、htmlのように画像などを読み込ませ完成させるのでしょうか。 iPhoneアプリ製作などは XCodeなどがありますが、プログラマーとして仕事をしている人は基本的にそのような専用ソフト上でプログラミングしているのでしょうか。