いちからわかるC# #2 ~特徴と概要②~
C#の特徴
C#ではC言語の正当進化言語とも言われていますが、様々な特徴を持ち合わせています。
下記にて詳しく解説していきます。
オブジェクト指向プログラミング
前回記事を参照にしてください
ガベージコレクション
ガベージコレクションとは、プログラム実行中に動的に不要になったメモリ領域を開放する機能の事です。この動作自体はC#コンパイラではなく、.NET Frameworkによって実装され、開発者が手動でメモリ管理をすることなく、自動的に実行されます。
詳しい仕組みとしては、「ヒープ」と呼ばれるメモリ領域に保存されたオブジェクトの参照数を監視することで実現されます。オブジェクトの参照数が0になった時点で開放され,メモリから削除されます。
ただし、ガベージコレクションがメモリ解放を行うタイミングは、プログラマー自身は管理できないため、プログラムの実行速度に影響を与える可能性があります。特に参照数の少ないオブジェクトを大量に生成ひている場合や。大きなオブジェクトを操作している場合には頻繁にガベージコレクションが実行されるため、パフォーマンスの低下に繋がります。
そのため、C#を扱うにあたって、適切なメモリー使用量を意識し、パフォーマンスを最適化する必要があります。
マルチパラダイム
マルチパラダイムとは、複数のプログラミングパラダイムをサポートする言語のことを指します。
プログラミングパラダイムとは、プログラミング手法・スタイルのことを指し、例として手続き型プログラミング、関数型プログラミング、オブジェクト指向プログラミングなどが挙げられます。
-関数型プログラミング
関数の合成や再帰呼び出しを用いたうパラダイムで、関数の引数と戻り値を通じてデータを操作します。
-手続き型プログラミング
手続きや関数の呼び出しによってプログラムを制御するパラダイムで、プログラムの実行を手続きの並びによって表現することができます。
以上を始めとした複数のパラダイムをサポートすることで、プログラマが自由自在にプログラムを組むことができます。
クロスプラットフォーム開発
.NET Coreと呼ばれるフレームワークを用いることでWindows, Mac OS, Linuxを始めとした様々なプラットフォームにおいて開発が可能になっています。
詳しくは後々詳しく記事にします。
強い型付け
C#が静的型付けと呼ばれる言語であり、変数には明示的に型を否定する必要があります。これにより、コンパイル時のエラー解析が容易になっています。
LINQ (Language Integrated Query)
LINQはC#の統合クエリ機能であり、データソースからデータを抽出する方法を提供します。
これにより、データベースやXMLドキュメント、オブジェクトのコレクション等様々なデータベースから効率的にデータを抽出することができます。
LINQはC# 3.0から導入されました。C#コンパイラはクエリを解析して、該当するデータソースに適したクエリを生成するために、LINQの機能を利用します。
LINQの特徴
-クエリを結合
C#の言語機能にLINQを統合することにより、複数のクエリ言語を使わなくても同じ構文でクエリを実行できます。
-タイプセーフ
LINQは、静的型付け言語であるC#と統合されています。そのため、クエリはタイプセーフであり、実行時のエラーを回避できます。
-遅延評価
LINQは遅延評価を行います。つまり、クエリが実行されるまで実際のクエリ処理が遅延されます。これにより、必要なデータのみを取得し、処理時間を短縮できます。
-データソースに対する一貫したアクセス
LINQは異なる種類のデータベースに対して一貫した方法でアクセスできます。データソースが変更された場合でもクエリは同じままであり、コード自体を変更する必要はありません。
-簡潔な構文
LINQは簡潔で直感的な構文が用いられます。よってコードの可読性が向上し、メンテナンス性に長けたコードを記述することが可能になります。
高速な処理
C#はJITコンパイル(Just In Time)を採用しており、高速で効率的なプログラムの記述が可能です。
JITコンパイルとは、実行時に必要に応じて機械語にコンパイルされるコンパイル方法の一つで、プログラムをコンパイルしてから実行する方式とは異なります。
コンパイル方式の違いは後日まとめて投稿します
JITコンパイラはソースコードをバイトコードにコンパイルし、出来上がったバイトコードを解釈しながら実行することで、実行時に最適化された機械語を生成します。これにより実行時に最適な機械語のみ生成されるため、高速な処理が可能になります。
以上代表的なC#の特徴をまとめてみました。
次回は.NET Core, .NET Frameworkについてまとめようと思います。
↓PREV↓
↓NEXT↓
Discussion