「プログラミング/共通知識」の版間の差分

(→‎変数: {{コラム|静的型付け言語と動的型付け言語}})
タグ: 2017年版ソースエディター
タグ: 2017年版ソースエディター
0.1<sub>10</sub> = 0.000110011001100…<sub>2</sub>)。
{{See also|[[W:桁落ち|桁落ち]]}}
 
== GUIプログラミング ==
=== Windows/macOS ===
アプリをウィンドウで表示したり、マウスでクリックするボタンを配置したり、そのようなグラフィカルな表示をするには、どのようにすれば良いのでしょうか?一番簡単な方法は、WindowsやmacOSの提供するAPIを使い、アプリをプログラミングすることになります。デバッグも重要です。Windows上で動作するGUIアプリを制作したいなら、実際にWindowsでプログラムを動作確認し、GUIを表示させてみることが、確実な方法です。例外として、一部のプログラミング言語には、プレビュー機能がついています。その場合も、それぞれのOSの機能を利用しているので、OSごとによってアプリの表示結果が違う場合が有ります。JavaScriptは、HTML経由でGUI表示ができますが、そのHTMLは、それぞれのOSのGUI機能を利用しています。
 
=== GNU/Linux/*BSD ===
であれば、GNU/Linuxはどうだろうか。結論からすると可能だ。wikibooksの[[GTKプログラミング]]や[[GNOMEフレームワーク]]を参照されたい。*BSDについてもデスクトップ環境を用意しているものであれば、表示できる。
 
=== ChromeBook ===
ブラウザをベースとしたOSなのでHTML/CS/JSで作ることが多い、ただし、ネイティブアプリに関しては、AndroidStudioで制作可能である。AndroidやVulkan等のAPIが利用できる。
 
=== Windows ===
==== 概要  ====
<!-- TODO: Win64、Win RT -->
<!-- DirectXが正式表記 -->
発展的なことをする場合、'''Win32 API'''と'''DirectX'''という機能を使う。
Win32 APIとDirectXのうち、初心者がまず先に学ぶべきは Win32 APIです。DirectXのパラダイムは、文法上Win32 APIを踏襲しているので、まず先にWin32 APIを習得する必要があります。
なお、「Win32」の32とは32ビットのことです。お使いのパソコンが64ビットでも、Win32APIの機能を使います。
Windows95の発売された1995年のころの時代が、CPUのビットが当時は最新だった32ビットに切り替わったころの時代であり(それ以前の時代のCPUは16ビットまたは8ビットのCPUが多かった)、その時代にWindowsのGUIプログラミングの文法が整備されたのでWin32 APIと呼んでいるわけです。
なので、64ビットCPUの普及した今でも Win32 APIの文法を使います。
書店だと、もしかしたらゲームプログラミング書のコーナーで、DirectXの書籍を見かけるのにWin32 API の書籍を見かけないような事態も、あるかもしれません。しかし、 Win32 APIの知識が無い状態で、 DirectX の書籍だけを買って読んでも、書籍の内容を理解できないでしょう。
 
==== Win32 API ====
Win32 APIを使うには、初心者には、Visual C++ で「Windowsデスクトップアプリケーション」というのを選ぶしかないでしょう。(もしかしたらC#などでも出来るかもしれませんが、初心者にはかえって複雑でしょう。)なお、Visual Studio をインストールしただけではVisual C++はインストールされてないので、事前にVisual Studio の設定画面などから Visual C++ をインストールする必要があります。
Windows95の発売されたころにマイクロソフトが開発していたプログラム言語がVisual C++ですので、これからWin32 APIを学ぶならVisual C++ を使うのが一番、マニュアルなども入手しやすくて初心者むけでしょう。
一般のVisual C++入門書でよく紹介される「CLR」では、よほどトリッキーなことをしないかぎり、機能が限定的であり、高度なアプリを作れません。
どれが「Windowsデスクトップアプリケーション」か選択画面では分かりづらいかもしれませんので、実際にそれっぽいのを選んでみて、選択決定後に表示されるソースファイルの20行目あたりに「int APIENTRY wWinMain(_In_ HINSTANCE hInstance,」というのがあれば、それが Win32 APIの開発環境です。
「wWinMain」は、[[C言語|標準C言語]]でのmain関数に相当します。WinMain 関数 は wWinMain と同じですが、コマンドライン引数は ANSI 文字列として渡され、Unicode バージョンが推奨されます<ref>{{Cite web
|url=https://docs.microsoft.com/ja-jp/windows/win32/learnwin32/winmain--the-application-entry-point
|title=WinMain: アプリケーション エントリ ポイント
|date=2021/09/14
|accessdate=2021/10/21
|publisher=Microsoft
}}</ref>。
Visual Studio で、アプリ作成時にダイアログで質問される、アプリの種類のうち、C#の冒頭のほうにある、.NET Framework 関連の開発環境では、じつは、高度なアプリを作るのには、あまり使えません。
そもそもC#に、Win32 API の開発環境がありません。Visual Studio でC言語系を使う場合、Win32 API を使うには、かならず C++ などの Win32 APIに対応した言語を選ぶ必要があります。
この理由は、おそらく歴史的な経緯により、まず、Win32 API (もしくは、その前身)にあたる開発環境が先に用意されました。そのため、このWin32 API で、ひととおりの事が、できるようになっています。
ただし、Win32 API は設定ファイルなどが長すぎます。(プログラマは、これらの設定ファイルを必要に応じてプログラマーが書き換えたりコードを追記したりする方式で、プログラミングをしていく。)また残念ながら、マウス操作のドラッグ&ドロップなどの機能は、無いのです。コマンドを1つ1つ、キーボードで文字入力するなり、コピーペーストでもいいですが、ともかく、一般のC言語のようなコマンド文の入力で、開発しなければなりません。
これは初心者には厳しすぎるので、あとから、代わりのバージョンとして、初心者むけに機能を制限してあるバージョンだけど、マウスのドラッグドロップなどで開発できる開発環境が、作られていきました。
.NET Framework も、この、機能制限版のマウス操作の開発の流れにある開発環境です。
これだけ聞くと、マウス操作でアプリが作れるなんて理想的に聞こえますが、残念ながら、いろいろと機能的に不完全なことも多く、現状では高度なアプリは作れません。なので、2010年代後半の今でも、もしWindowsプログラミングで高度で複雑な動作をするGUIアプリの制作では、Win32 API と Visual C++ を使わざるを得ない状況です。
また、.NET Framework はランタイムが必要になります。
いっぽう、Win32 API で開発すれば、サポート期間中のWindowsなら、よほどの事がないかぎり、ほぼすべてのバージョンで動きます。
しかし、.NET Framework 開発環境で開発されたアプリには、さらに .NET Framework ランタイムがユーザーに必要になります。(プログラマだけでなく、そのアプリを使う人にもまた、専用のランタイムが必要になる。)
 
==== DirectX ====
DirectX は、主に、Windows用の画像関係のランタイムやライブラリのうち、3D-CGの計算や、GPUなどマルチメディア関係デバイスの制御などの、高度な機能が、まとめられています。
初心者は、当面は DirectX のプログラムを書く必要は、無いでしょう。
ですが、Windowsでアプリを作る際に、知識としてDirectX について、いろいろと知っておく必要があります。
なぜなら、現在の Windows では、実はウィンドウは3D-CGとして処理しています。(アナタが今見ているwebブラウザのウィンドウも、マイクロソフト社の公式の仕様上ではDirectX が起動しており、ウィンドウを 3D-CG として処理して、ディスプレイにウィンドウ表示しているハズです。)
ユーザーにはDirectX の名前が表示されてないだけで、実はWindowsの画像処理のいろいろな箇所で、 DirectX は動作しています。
現在のWinodwsの多くの機能は、DirectX をもとにグラフィック描画をしてる部分もあるからです。
.NET Framework で提供されているAPIのうちの画像関係のAPIには、Win32APIの画像APIでは提供されていない高機能なAPIもありますが、おそらく、Net Frameworkの画像関係のAPIは、おそらく背後で DirectX が動作しているものと思われます。
なお、よく、Windows向けのゲームで「DirectXランタイムが必要です」などと説明書などで記載されているので、てっきりDirectX をゲーム専用に追加インストールする必要のある追加機能だと誤解しがちだが、実はのWindows7及び Server 2008 R2以降(Windows7及び Server 2008 R2自身も含む)ではゲームとは無関係に既にWindowsのインストール時点で DirectX は Windowsに標準インストールされています<ref>{{Cite web
|title=最新版の DirectX をインストールする方法
|url=https://support.microsoft.com/ja-jp/topic/%E6%9C%80%E6%96%B0%E7%89%88%E3%81%AE-directx-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95-d1f5ffa5-dae2-246c-91b1-ee1e973ed8c2
|date=2020-11-17
|acdess=2021-10-16
}}</ref>。
Windows95くらいの過去のバージョンではDirectX は購入時点ではWindows製品には付属しておらず追加インストールしないと使えなかった時代もありました。しかし、現時点のWindows7以降(7も含む)のバージョンでは、DirectX はWindowsの購入時点で付属しており、Windowsのインストールと一緒にDirectX もインストールされています。
Win32 API でのプログラミングを行っていくと、何かと機能的に不完全なところがあります。
そのような機能不足でも、Win32 APIを使って改善するプログラムが作れればよいのですが、しかし、そうとは限りません。GPUなど画像関係ハードウェアの制御などは、Win32APIではサポートされていない場合もあります。
世間一般のソースが非公開にされているアプリでは、もしかしたら、ゲームソフトでなくてもDirectXを動作させるコードを書いているアプリケーションもあるかもしれません。
マイクロソフト社がソース非公開のため、Windows内部でのグラフィック描画機能にWin32APIとDirectXとをどう使いわけているかも非公開であり、詳細は不明です。
世間では歴史的経緯から、「WindowsのGUI描画はWin32APIをベースにしており、例外としてDirectXでプログラムされたGUIアプリを動作させる時だけDirectXを使ってる」という解釈が通説ですが、しかし、実はそのような保証は無いのです。
もしかしたら、もはやDirectXがWinodws内部のGUI描画でベースのシステムになっている可能性もあります。ひょっとしたら、近年のWindowsでは(GUIのコードの原則はDirectXとして)、Win32APIのコードのほうが例外的に処理されている可能性もあります。
少なくとも明確な事実として、マイクロソフト社は、最新の画像技術のサポートなどは、Win32APIではなくDirectXを通してサポートを提供しています。
このため、もしかしたら将来的には、マイクロソフト社によるGUI技術のサポートは、Win32APIではなくDirectXを優先する可能性もありえます。
 
=== マルチメディアの扱い方 ===
スクリーンをある時点で固定すると、画像とみなせる。画像ファイルはバイナリファイルである。その証左として、適当な画像を開いてもテキストとして読み取ることはできない。画像の種類ごとにフォーマットと呼ばれる、情報の種類や出現順序が規定されている。C言語でバイナリファイルを入出力する能力が必要になります。よって、かなり乱暴であるが、画像に描画することができれば、スクリーンに描画することもできる。実際には、さらにこのほか、雑多な知識が必要になります。実際は、各OSのAPIやアプリ、外部ライブラリなどで入出力することができるので、自分で実装する必要はない。画像編集ソフトの核心は、フォーマットに従ったバイナリを出力することにある。フォーマットに従っているということは、画像ファイルに限らず、音声や動画などでも同様。
 
 
=== マック風、Android風のWindowsアプリ ===
世間には、たとえばデパートなどの店舗などにある据付モニターのOSなど業務用の用途において、UIの見た目が一見するとmacOS風やi-OS風、Andorid風のUIであっても、実はWindowsで造られているアプリは多い。よく店舗などの据付モニターにあるタッチパネル式の液晶モニターなどが、一般OSでは見慣れない独自UI画面を用いていたりする場合や、あるいは見た目がいかにもスマートフォン風の画面表示UIだったりする場合があるが、しかし店舗にもよるが実はこれは単にWindows上に日本メーカーの作った独自UIアプリケーションをキオスクモードに構成しているだけという場合もある<ref>{{Cite web
|title=Set up a single-app kiosk on Windows 10/11
|url=https://docs.microsoft.com/en-us/Windows/configuration/kiosk-single-app
|date=2021-09-24
|access=2021-10-16
}}</ref>。その理由に関しては、もしモバイル通信をするならAndroidで表示したほうが安上りかもしれないが、しかし単に据付モニターで画面表示するだけでモバイル通信しないのならばWindowsを用いたほうが技術者を調達しやすいし、また資料などもWinodwsのほうが豊富なのである。このように、UIの見た目に騙されたりしてはいけない。世間には、業務用アプリケーションでは、いかにもWindows以外のスマホ風の画面表示をしているWindowsアプリなども多く存在しているのである。一般の商業店舗レベルでは、決してTRON(トロン)などの組込みOSを使っているわけではないと思われる(ただし、製造業大手などの工場ライン中のモニターなどのUIについては別で、場合によってはTRONまたはその他の組込みOSの場合もある)。
 
== 関連項目 ==
3,374

回編集