破壊的処理と非破壊的処理

はじめに

 プログラミングの基本となる考え方を、私の整理も兼ねて紹介します。

破壊的処理とは

 簡単に言うと、元のデータを上書きして結果を残す処理のことをいいます。具体的には次のとおりです。

>>> a = [5, 8, 3, 4, 1]
>>> a.sort()
>>> a
[1, 3, 4, 5, 8]

 この例では、元のデータ(変数a)が処理結果として上書きされます。

非破壊的処理とは

 簡単に言うと、元のデータを改変せずに、元のデータとは別の新しいデータとして結果を残す処理のことをいいます。具体的には次のとおりです。

>>> a = [5, 8, 3, 4, 1]
>>> b = sorted(a)
>>> b
[1, 3, 4, 5, 8]
>>> a
[5, 8, 3, 4, 1]

 この例では、元のデータ(変数a)は改変されず元のデータを維持しています。処理結果(変数b)は処理後の新しいデータとして保持されています。

破壊的処理と非破壊的処理との使い分け

 破壊的処理は元のデータを直接操作することが多く、処理後のデータ領域を確保する必要がないため、メモリー割り当てを抑えることができます。結果、非破壊的処理に比べると処理速度の点で有利です。
 一方、非破壊的処理は関数型プログラミング(引数を入力として、処理結果として返り値を返すアーキテクチャ。グローバル変数は原則として利用しない)には欠かせません。元のデータは関数に入力するだけで改変はせず、処理結果は別のデータとして次の関数に渡して処理を続けていく、という考え方になるからです。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください