ブログ 約5分

高品質なC++コードを書くための10の必須ベストプラクティス

Share this article
高品質なC++コードを書くための10の必須ベストプラクティス

高品質なコードを書くことは、コードの信頼性、パフォーマンス、保守性に影響を与えるため、あらゆるソフトウェアプロジェクトの成功にとって重要です。このブログ記事では、 CppDepend に含まれる、クリーンで効率的なC++ソースコードを書くための10の必須ベストプラクティスについて説明します。これらのベストプラクティスは、命名規則、エラー処理、メモリ管理など、コーディングのさまざまな側面をカバーしています。初心者であれ経験豊富なプログラマーであれ、これらのベストプラクティスに従うことで、より良いC++コードを書き、プロジェクトをより成功させることができるでしょう。

1- 説明的で意味のある変数名を使用する: 変数に名前を付けるときは、各変数の目的を明確に表し、読み手にとって意味のある名前を選びましょう。これにより、コードが読みやすく理解しやすくなります。

#include <iostream>

int main()
{
    // GOOD EXAMPLE
    int userAge = 25;
    const int kDaysInWeek = 7;
    std::string firstName = "John";

    // BAD EXAMPLE
    int a = 25;
    int b = 7;
    std::string c = "John";
}

2- 読みやすいコードを書く: 適切なインデント、空白、コメントを使用して、コードを読みやすくしましょう。さらに、長いコード行をより小さく管理しやすいブロックに分割しましょう。

// GOOD EXAMPLE
for (int i = 0; i < 10; i++)
{
    cout << i << endl;
}

// BAD EXAMPLE
for(int i=0;i<10;i++)cout<<i<<endl;

3- オブジェクト指向プログラミングを使用する: C++はオブジェクト指向言語なので、クラスやオブジェクトなどの機能を活用して、コードを整理し構造化しましょう。

#include <iostream>
#include <fstream>

int main()
{
    // GOOD EXAMPLE
    std::ifstream file("data.txt");
    if (!file.is_open())
    {
        std::cerr << "Error: Failed to open file." << std::endl;
        return 1;
    }

    // Read and process file data here

    file.close();
    return 0;

    // BAD EXAMPLE
    std::ifstream file("data.txt");
    // Read and process file data here
    file.close();
    return 0;
}

4- グローバル変数の使用を避ける: グローバル変数は、コードのさまざまな部分から簡単に変更できるため、大規模なプロジェクトで問題を引き起こす可能性があります。代わりに、関数やクラス内のローカル変数を使用しましょう。

// GOOD EXAMPLE
void printSum(int x, int y)
{
    int sum = x + y;
    cout << "The sum is: " << sum << endl;
}

// BAD EXAMPLE
int sum;

void printSum(int x, int y)
{
    sum = x + y;
    cout << "The sum is: " << sum << endl;
}

5- エラー処理を使用する: ゼロ除算、無効な入力、配列の範囲外アクセスなど、コード内のエラーや例外を必ず処理しましょう。

// GOOD EXAMPLE
int main()
{
    int dividend, divisor;
    cout << "Enter dividend: ";
    cin >> dividend;
    cout << "Enter divisor: ";
    cin >> divisor;
    try
    {
        if (divisor == 0)
        {
            throw runtime_error("Division by zero.");
        }
        cout << "Result: " << dividend / divisor << endl;
    }
    catch (runtime_error &err)
    {
        cout << err.what() << endl;
    }
    return 0;
}

// BAD EXAMPLE
int main()
{
    int dividend, divisor;
    cout << "Enter dividend: ";
    cin >> dividend;
    cout << "Enter divisor: ";
    cin >> divisor;
    if (divisor == 0)
    {
        cout << "Division by zero." << endl;
        return 1;
    }
    cout << "Result: " << dividend / divisor << endl;
    return 0;
}

6- 関数を短くシンプルに保つ: 関数は短く、単一の目的に焦点を絞るべきです。関数が複雑になりすぎた場合は、より小さく管理しやすい関数に分割することを検討しましょう。

// GOOD EXAMPLE
int add(int x, int y)
{
    return x + y;
}

// BAD EXAMPLE
int addAndMultiply(int x, int y)
{
    int sum = x + y;
    int product = x * y;
    cout << "Sum: " << sum << endl;
    cout << "Product: " << product << endl;
    return sum;
}

7- 値のハードコーディングを避ける: コードに値をハードコーディングする代わりに、簡単に変更できる定数や変数に格納しましょう。これにより、コードがより柔軟で保守しやすくなります。

#include <iostream>

const int kDataSize = 100;

int main()
{
    // Good example
    int data[kDataSize];
    for (int i = 0; i < kDataSize; ++i)
        data[i] = i;

    // Bad example
    int data[100];
    for (int i = 0; i < 100; ++i)
        data[i] = i;
}

8- 標準ライブラリを使用する: C++は、一般的なタスクを実行するために使用できるStandard Template Library(STL)を含む、豊富な標準ライブラリセットを提供しています。これらのライブラリを使用すると、コードを簡素化し、パフォーマンスを向上させることができます。

// GOOD EXAMPLE
#include <iostream>
#include <string>

int main()
{
    std::string name;
    std::cout << "Enter your name: ";
    std::getline(std::cin, name);
    std::cout << "Hello, " << name << "!" << std::endl;
    return 0;
}

// BAD EXAMPLE
#include <iostream>
#include <string.h>

int main()
{
    char name[100];
    std::cout << "Enter your name: ";
    std::cin.getline(name, 100);
    std::cout << "Hello, " << name << "!" << std::endl;
    return 0;
}

9- コードをモジュラーに保つ: コードを、簡単にテストおよび再利用できる小さな独立したモジュールに分割しましょう。これにより、コードがより保守しやすく、変更しやすくなります。

// GOOD EXAMPLE
if (temperature > 30)
{
    cout << "It's hot outside." << endl;
}
else
{
    cout << "It's not hot outside." << endl;
}

// BAD EXAMPLE
if(temperature>30)cout<<"It's hot outside."<<endl;
else cout<<"It's not hot outside."<<endl;

10- コードを文書化する: コードの目的、使用方法、行われた仮定を説明するコメントを必ず追加しましょう。これにより、他の人がコードを理解しやすくなり、後で自分がその動作を思い出しやすくなります。

#include <iostream>

// Good example

/**
 * Calculates the factorial of a given number.
 *
 * @param num The number to calculate the factorial of.
 * @return The factorial of the given number.
 */
unsigned long long factorial(unsigned int num)
{
    unsigned long long result = 1;
    for (int i = 2; i <= num; ++i)
        result *= i;
    return result;
}

// Bad example

unsigned long long f(unsigned int n)
{
    unsigned long long r = 1;
    for (int i = 2; i <= n; ++i)
        r *= i;
    return r;
}

これらのベストプラクティスに従うことで、読みやすく、理解しやすく、保守しやすい高品質なC++ソースコードを書くことができます。

Download CppDepend を無料でダウンロードして、コードが適切に保守されているか確認してみましょう!

Share this article