この記事は、Yılmaz Yörü氏のhttps://blogs.embarcadero.com/15-tips-to-graduate-from-classroom-c-to-modern-c-part-3-3/の抄訳です
Table of Contents
(10)モダンなC++標準の採用
C++は、1998年に標準化された素晴らしいプログラミング言語です。C++標準規格は、C++の使い方を教えるためのものではありません。C++のコンパイラや標準ライブラリの実装を行う方を主な対象とした、正式かつ非常に詳細な技術文書です。これにより、開発者は自分のコードが同じC++標準規格を実装している他のツールチェーンでも動作することを認識してながらコーディングすることができ、また開発者のニーズに合わせて最新の新しいものをC++標準規格に追加することができます。
最新のC++17標準は、ほとんどのC++コンパイラでサポートされています。コア言語機能の詳細については、こちらをご覧ください。C++20は新しい標準であり、コンパイラ側でサポートするには時間がかかります。モダンなC++標準またはすべてのC++標準との互換性のあるコードを使用することで、C++コードをよりモダン的にできます。
ですがケースバイケースで、古い方法(例えば、Cの標準はすべてのC++コンパイラとより親和性が高い)の方が、より便利で、より速く、開発者によって特別に最適化されていることがあります。モダンなC++という言葉は、モダンなC++標準が使われていることを意味するだけでなく、他のコンパイラやプラットフォームでも最新のデバイスで使用できることを意味すると考えています。
例えば、C++11標準からautoが言語機能として採用されており、この優れた機能を使用して、以下のようにデータ型を自動的に定義します。
1 2 3 |
auto a = 200; // defines integer automatically auto g = 9.81; // defines float automatically auto ptr = &g; // defines pointer automatically |
上記以外にもモダンなC++言語仕様でサポートされている機能は多数あります。エンバカデロのブログでも過去に「C++Builderで使用方法を学ぶ」シリーズとして、いくつか紹介しています。もしご興味がありましたら、ご参照ください。
- C++BuilderでC++17ラムダ式の使用方法を学ぶ
- C++Builderで高いパフォーマンスを実現するC++17 string_viewの使用方法を学ぶ
- C++Builderで戻り値の型推論(auto)の使用方法を学ぶ
- C++Builderで最新C++ constexprの使用方法を学ぶ
- C++BuilderでC++17 構造化束縛(Structured Bindings)の使用方法を学ぶ
Tip 10: C++11、C++14、C+17、C++20 などの CLANG 標準の新機能を使用しましょう
(11) モダンなI/O操作を使用する
現代では、オペレーティングシステムは32ビットから64ビットに移行してより多くのデータ使用量をサポートし、ASCII形式からUnicode形式に移行してすべての世界言語をサポートしています。
ファイル名とファイル形式は、世界中のアプリケーションをサポートするためにモダナイズされています。 テキストファイルや非テキストファイル(バイナリ、blob、画像など)の入出力(I/O)操作は非常に重要です。
fopen()、fclose()、FileOpen()、FileClose()のような古いハンドルベースのI/O操作ではなく、モダンな標準メソッドやファイルストリーミングメソッドを使用します。いくつかの特定のメソッドは、データファイルのロードとセーブに使用できます。
例えば、以下のコード例はC++でよく知られているハンドルベースのファイル読み取り操作です。
1 2 3 4 5 6 7 8 9 10 |
if( fp=fopen(“D:test.txt”, "rb") ) { do { fgets(s,255,fp); // fscanf(fp,"%d %d", &x, &y); // sscanf(s,"%d %d", &x, &y); } while (!feof(fp)); fclose(fp); } |
古いメソッドの代わりにC++の新しいファイルI/Oメソッドに置き換えると、以下のようなコード例になります。
1 2 3 4 5 6 7 8 9 10 11 |
#include <iostream> #include <fstream> int main () { ofstream myfile; myfile.open( L"D:test.txt" ); myfile << L"Writing this to a file.n"; myfile.close(); return 0; } |
例えば、C++Builderでファイルストリームを使用すると、以下のコード例のようによりモダン的になっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <memory> struct st_dat { int X, Y; } dat; int _tmain(int argc, _TCHAR* argv[]) { dat.X = 960; dat.Y = 540; std::unique_ptr< TFileStream >fs ( new TFileStream( "D:test.dat" , fmCreate | fmOpenReadWrite) ); if(fs) fs->Write( &dat, sizeof(dat) ); return 0; } |
Tip 11: UnicodeをサポートしたモダンなI/O操作を使用し、ファイルの入出力処理を多言語対応しましょう
(12)最新のサードパーティ製ライブラリやコンポーネントの使用
この記事の冒頭で述べたように、C++はプログラミング言語の世界で非常に幅広い分野です。標準パッケージで使用される多くのプロパティとメソッドがあります。例えば、単純なGNU C/C++には400以上のインクルードファイルがありますが、C++Builderには他のOSプラットフォームをサポートする7,000以上のインクルードファイルが付属しています。Visual C++にも多くのインクルードファイルがあります。それぞれのインクルードヘッダには、使用できる多数のプロパティやメソッドがあります。
これらの標準ライブラリに加えて、例えば、Nvidiaのグラフィックカードを使うには、そのSDKが必要です。また、IoTアプリの多くはSDKが付属していますし、特定のソフトウェアには独自のSDKやAPIが付属しています。これらの中にはC++でコーディングされているソフトウェアも多く存在します。
このようにC++は、ドライバ、C++ソースコード、ダイナミックライブラリ、API、コンポーネントなど様々な分野に適用した膨大なライブラリが拡張、そしてサポートされています。これがC++の市場が非常に巨大である理由です。
IDEの中には、サードパーティのライブラリやコンポーネントなどのパッケージマネージャが付属しているものがあります。例えば、C++BuilderにはGetItパッケージマネージャーがあり、最新のサードパーティパッケージや公式パッケージを検索・閲覧することができます。詳しくはこちらを参照ください。GetItを使用すると、これらのパッケージを簡単かつ安全にインストール、アンインストール、アップデートすることができます。
サードパーティ製のライブラリが必要な場合は、少なくとも1年または2年のサポート期間がある最も一般的なライブラリを探してください。非常に古いライブラリや希少なライブラリは、開発者からのサポートが少ないので使用は極力避けてください。希少性の高い、あるいはオープンなライブラリ(無償)を使用することもできますが、ライブラリの更新停止やサポートが受けられないリスクも想定されます。そのため可能であればソースコード付きのライブラリを入手することをお勧めします。
その上で、もし不測の事態が発生した場合は、そのライブラリの使用を止めて代替ライブラリを見つけるか、あるいは、入手したソースコードを自身で保守し、そのライブラリを使用し続けるか判断してください。
Tip 12: 最新のサードパーティ製ライブラリ、コンポーネント、APIを使用し、可能であればソースコードも入手する
(13)レスポンシブなUIのフォームやアプリケーションの設計
ディスプレイの解像度は、水平方向/垂直方向のピクセルで構成されており、デザインツールは幅と高さをピクセル単位で表示します。もし固定幅(例えば、特定の画面サイズ 1280×800など) で画面をデザインしてしまうと、ディスプレイの解像度が低い場合には収まりきらず、逆にディスプレイの解像度が高い場合には、画面の端に多くの空白が表示されます。このようにユーザーが利用するディスプレイ画面が想定したデザインサイズと異なる場合には、期待した画面表示は行われません。
そのため様々な画面幅、解像度などに合わせて画面の設計を行うためにデザインの一部をグループ、パネル、レイアウト、またはUI要素のエリアに配置することで、PC、スマホ、タブレットなどあらゆる種類のディスプレイ解像度に対応することができます。一般的にこれをレスポンシブデザインと呼びます。
アプリケーションのユーザーインターフェイスを設計するときは、レスポンシブデザイン手法を使用してください。レスポンシブデザインとは、どんなデバイスでも見やすく、使いやすいレイアウトにするための技術です。
パネル、ボックス、テーブル、レイアウト、テキスト、グリッドをスマートに配置し、デザインはシンプルで便利なものにしましょう。アプリケーションの最も使用される部分または主要部分を片側(上、左下、右)に揃えて、さらに一部のUI要素またはそのコーナーを固定する必要がある場合があります。 UI要素のマージンとパディングも重要です。また実行時にアプリケーションウィンドウのリサイズ操作や、アプリケーションが横向きモードと縦向きモードのどちらで実行されているかも考慮も必要でしょう。
最近のアプリケーションでは、スマートレイアウト、パネル、グループパネル、グリッド、さらにスキンやスタイルを適用することで、よりモダン的になります。
以下は、RAD Studio、C++ BuilderのUIデザイン例です。レスポンシブデザインでは、一般的に上、下、左、右、左上、右上、左下、右下、そしてクライアント(デザインの中心となるエリア)等の9つのアライメントがあります。このレイアウトに合わせることで、縦長、横長、モバイル、デスクトップなど、すべてのプラットフォームでレスポンシブに対応できる最も汎用的なデザインとなります。
Tip 13: レスポンシブなUIデザインを採用する
(14)モダンなC++ IDEおよびコンパイラのその他の新機能を知る
コンパイラを備えたC++IDEを使用している場合、デバッグ、監視、アプリケーションの設計、データベースの結合、データベース用のデータモジュール、MS Store、Apple Store、Google Playでプロフェッショナルなアプリをリリースするためのデプロイメントまたはパッケージングツール、マイグレーションツール、サードパーティツールなど、他にも多くの機能があり、これらの機能を活用することで、C++アプリケーションをモダナイズできます。
Tip 14: モダンなC++IDEおよびコンパイラの新機能により、C++アプリケーションをモダナイズしましょう
(15)Be aware!
最新のC++カンファレンスを見たり、C++やC++コンパイラ、IDEに関する最新のニュースや学術論文を読んでみましょう。他のプログラミング言語やその機能をフォローしてみてください。これらの経験はあなたのコードをモダナイズするためのアイデアや新しい方法を決定するのに役立つかもしれません。
Tip 15:C++やプログラミングに関する技術ニュースをフォローしよう!
15個のヒントの要約
- Tip 1: 大学で学んだCやC++の知識は、モダンなC++に移行し、自分のやりたい分野を選ぶために必要です。 この知識は、モダンなアプリケーションを構築する際にも応用が可能
- Tip 2: マルチプラットフォーム対応コンパイラを使用し、1つのOSプラットフォームに焦点を当てる場合でも、それがマルチOSプラットフォーム対応になることも考慮する
- Tip 3: Visual C++やC++BuilderのようなIDEを備えたプロフェッショナル仕様のコンパイラを使用する
- Tip 4: CLANGに対応したC++コンパイラでコーディングするか、できるだけCLANG標準でコーディングする
- Tip 5: 多言語に対応するために、文字列の形式にはワイド文字列またはUnicode文字列を使用してください。また固定長の文字列配列は、セキュリティの観点から使用はできるだけ避けてください。
- Tip 6: GUIベースのアプリケーションを開発して、魅力的なグラフィックを備えた簡単でわかりやすいアプリを作成する
- Tip 7: ビジュアルプログラミングでの文字出力は、UIコンポーネントのプロパティあるいはメソッドを使用する
- Tip 8: ビジュアルプログラミングでの文字の入力は、UIコンポーネントのプロパティあるいはメソッドを使用する
- Tip 9: C++標準ライブラリの最適化されたメソッドや機能を可能な限り使用する
- Tip 10: C++11、C++14、C+17、C++20 などの CLANG 標準の新機能を使用しましょう
- Tip 11: UnicodeをサポートしたモダンなI/O操作を使用し、ファイルの入出力処理を多言語対応しましょう
- Tip 12: 最新のサードパーティ製ライブラリ、コンポーネント、APIを使用し、可能であればソースコードも入手する
- Tip 13: レスポンシブなUIデザインを採用する
- Tip 14: モダンなC++IDEおよびコンパイラの新機能により、C++アプリケーションをモダナイズしましょう
- Tip 15: C++やプログラミングに関する技術ニュースをフォローしよう!
まとめ
C++は、すべてのプラットフォームでネイティブアプリケーションを開発するのに最適なプログラミング言語です。他の言語よりも高速で、信頼性も高いです。少し難しい部分もあるかもしれませんが、C++でできないことはありませんのでご安心ください。新しい最適化されたコンパイラを備えた最新の標準規格、ライブラリ、およびIDEには、さらに多くの機能があり、非常に大きなプログラミングの世界とコミュニティを形成しています。C++はある部分ではシンプルですが、ある部分では複雑化しています。 あるポッドキャストで、C++を実装・設計したBjarne Stroustrup氏は、「良いプログラミング言語は、ユーザーのあらゆるニーズを満たすために、より複雑になっていくべきだ」と述べています。現在、Python、Java、Rubyなどの人気のあるプログラミング言語は、シンプルで使いやすいように見えますが、特定のソリューションが必要な場合は、C++やアセンブラのプログラミング言語を使って、モジュールやライブラリの拡張を行い、より速く、最適なプロセスを行う必要があります。
結論として、今回挙げた15つのヒントをもっと広げることができますが、C ++の技術に従う必要があることを知っておいてください。C++は、その豊富な機能から、今後も世界で最も人気のあるプログラミング言語の一つであり続けることでしょう。
関連情報
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition