コードの清書 改行


コードの清書 改行

概要

横に長すぎるコードは、
視野の外にコードがはみ出てしまい、
とても読みづらくなります。

改行をつかって、
フルスクリーンのエディタの半分、
出来れば三分の一までにコードの
長さを抑えると、
余計な目の移動が抑えられます。

関数の仮引数

不適切な例

以下の例は横に長いPythonの関数定義です。
このままでも悪くありませんが、少し見づらいです。

class CssRule:
    # プロパティ代入する形式的コンストラクター
    def __init__(self, target : str, content : Dict[str, str]):
        self.target  = target
        self.content = content

望ましい例

このような場合、縦にインデントをそろえます。
引数名、引数型、(ある場合は)既定値、が
縦に整列するようにします。

class CssRule:
    # プロパティ代入する形式的コンストラクター
    def __init__(
        self,
        target  : str,
        content : Dict[str, str]
    ):
        self.target  = target
        self.content = content

関数の実引数

不適切な例

実引数の呼び出し時も、
以下のように、横に長すぎるコードが散見されます。
以下の例は、Pythonのコードです。

with open(file=path, mode="a", encoding=encoding) as text_file:
    text_file.write("A")

望ましい例

縦に実引数をそろえることで、
視界の範囲内にコードを収めることができます。

with open(
    file     = path,
    mode     = "a",
    encoding = encoding
) as text_file:
    text_file.write("A")

三項演算子チェーン(条件前置型)

不適切な例

以下の例は、TypeScriptのコードです。
三項演算子のチェーンが、
横に伸びすぎています。

const x = false ? "A" : false ? "B" : "C"

望ましい例

以下のように、適切な位置で改行して、
読みやすくすべきです。

const x = false ? "A" :
          false ? "B" :
          "C"

三項演算子チェーン(条件後置型)

不適切な例

Pythonの三項演算子のチェーンのコードを
お見せします。
これも、長すぎるコードが1行にまとめられています。

x =      100 if False else 10 if False else 1 if False else 0

望ましい例

x =      100 if False \
    else 10  if False \
    else 1   if False \
    else 0

メソッドチェーン

不適切な例

C#のメソッドチェーンのコードを題材にします。
いくつものメソッドを
すべて1行に収めようとして、
見にくくなっているパターンです。

var oddsFrom_1_To_100 = Enumerable.Range(1,100).Filter(element => element % 2 == 1).ToArray()

望ましい例

var oddsFrom_1_To_100 = Enumerable.Range(1,100)
                                  .Filter(element => element % 2 == 1)
                                  .ToArray()

パイプラインチェーン

不適切な例

以下のコードはPowerShellのパイプラインチェーンです。
長いパイプラインを
すべて1行に収めようとして、
読みにくくなっています。

1..100|Where-Object{$_ % 2 -eq 1}|Where-Object{$_ % 3 -ne 0}|ForEach-Object{$_ * $_}

望ましい例

無理せず、パイプラインごとに改行しましょう。

1..100|
Where-Object{$_ % 2 -eq 1}|
Where-Object{$_ % 3 -ne 0}|
ForEach-Object{$_ * $_}

参照文献

  1. リーダブルコード
  • このエントリーをはてなブックマークに追加

PAGE TOP