C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++の純粋関数とは?特徴とstrlen()・sqrt()を使った実装例をわかりやすく解説

純粋関数(Pure Function)とは、同じ引数の値に対して常に同じ結果を返す関数のことです。純粋関数は結果を返すだけにとどまり、引数の変更、入出力ストリームへのアクセス、出力生成といった余計な副作用(Side Effect)を一切持ちません。

この性質により、純粋関数はプログラムの動作が予測しやすく、テストやデバッグ、並列処理においても扱いやすいという大きなメリットがあります。

純粋関数と非純粋関数の例

C++標準ライブラリには、純粋関数として振る舞うものが多数存在します。代表的な例としては以下のような関数が挙げられます。

  • 純粋関数の例: sin()、strlen()、sqrt()、max()、pow()、floor() など
  • 非純粋関数の例: rand()、time() など

rand() や time() は呼び出すたびに異なる値を返す可能性があるため、同じ引数でも常に同じ結果になるとは限らず、純粋関数とは言えません。

以下では、純粋関数の動作を確認できるサンプルプログラムを紹介します。

strlen() 関数で文字列の長さを求める

strlen() 関数は、文字列の長さを取得するために使用されます。この関数は渡された文字列にのみ依存して結果を決定するため、典型的な純粋関数です。次のプログラムでその動作を確認できます。

サンプルコード

#include<iostream>
#include<string.h>
using namespace std;

int main() {
    char str[] = "Rainbows are beautiful";
    int count = 0;

    cout<<"The string is "<< str <<endl;
    cout <<"The length of the string is "<<strlen(str);

    return 0;
}

実行結果

上記プログラムの出力は以下の通りです。

The string is Rainbows are beautiful
The length of the string is 22

sqrt() 関数で平方根を求める

sqrt() 関数は、ある数値の平方根を求めるために使用されます。こちらも引数の値さえ決まれば結果が一意に定まるため、純粋関数の一例と言えます。次のプログラムで実際の動作を見てみましょう。

サンプルコード

#include<iostream>
#include<cmath>

using namespace std;
int main() {
    int num = 9;

    cout<<"Square root of "<< num <<" is "<<sqrt(num);

    return 0;
}

実行結果

上記プログラムの出力は以下の通りです。

Square root of 9 is 3

まとめ

純粋関数は「同じ入力に対して常に同じ出力を返し、副作用を持たない」ことが特徴です。strlen() や sqrt() のように数学的・論理的に結果が決まる関数は純粋関数として設計されており、コードの信頼性と再利用性を高める上で重要な概念となっています。関数を設計する際には、可能な限り純粋関数として実装することで、保守性の高いプログラムを目指しましょう。

  1. C++の文字列at()関数とは?使い方とサンプルコードを解説

    この記事では、C++におけるat()関数の概要と基本的な使い方について解説します。at()関数とはat()関数は、C++のstd::stringクラスが提供するメンバ関数の一つで、指定した位置(インデックス)にある文字にアクセスするために使用されます。[]演算子でも同様に文字へアクセスできますが、at()関数は範囲外のインデックスを指定した場合にout_of_range例外をスローするため、より安全に扱えるという特徴があります。サンプルコード次のプログラムでは、at()関数を使って文字列内の各文字を先頭から順に取り出し、1行ずつ出力しています。#include<iostream>

  2. C++のstrchr()関数とは?文字列から文字を検索する方法をわかりやすく解説

    C++には、文字列操作を簡単に行うための標準ライブラリ関数が数多く用意されています。その中のひとつが strchr() 関数です。strchr() は、指定した文字列の中から特定の文字が最初に現れる位置を検索し、その位置へのポインタを返す関数です。この関数を使用するには、ヘッダーファイル <cstring> をインクルードする必要があります。strchr()関数の構文strchr() 関数の構文は以下のとおりです。char *strchr( const char *str, int c )各引数の意味は次のとおりです。str: 検索対象となる文字列(C言語形式のヌル終端文字列)c: