実践・順列

順列はシャッフルし、列挙は選びます。よく書けたテンプレートの多様性は、その大半が順列から生まれます — 類語を積み上げることからではありません。このガイドでは構文、区切り文字のルール、そしてほとんどの書き手が見落とすパターン — タイトルと見出しの連続リスト — を扱います。

単純な順列

[a|b|c]

既定の動作:

  • 要素はすべて出力されます;
  • 順序はレンダリングのたびにシャッフルされます;
  • 区切り文字は半角スペース1つです。

出力例:a b cc a bb c a

区切り文字だけの短縮形

区切り文字(と lastsep)を一度に指定するには:

[< and >a|b|c]

あり得る出力:a and b and cc and a and b。短縮形は同じ文字列を seplastsep の両方に割り当てるので、すべての連結が同じ見た目になります。

完全な設定

冗長な形は完全な制御を与えます:

[<minsize=2;maxsize=4;sep=", ";lastsep=" and ">a|b|c|d|e]

ルール:

  • minsize — 出力する要素数の下限;
  • maxsize — 出力する要素数の上限;
  • sep — 最後の2つ以外を連結します;
  • lastsep — 最後の2要素を連結します(自然な「A, B and C」のために)。

どちらかのサイズを省くと、もう一方が妥当に補われます:

  • minsize だけ指定 → maxsize は「利用可能なすべて」になります;
  • maxsize だけ指定 → minsize は1になります;
  • どちらも要素数より大きい → 総数に丸められます;
  • エンジンは0個を選べません。「リストが出ないこともある」にしたいときは、順列を空の分岐で包みます(下記参照)。

要素ごとの区切り文字

全体の sep/lastsep より細かく制御したいときは、1つの要素が独自の区切り文字を持てます:

[<, >Visa|Mastercard < and >|Skrill]

ここでは:

  • 全体の区切り文字は ", "
  • Mastercard の次の要素が独自のローカル区切り文字 " and " を持ちます。

要素ごとの区切り文字は珍しいものの、特定の位置だけ別の接続詞が必要なときに役立ちます。

区切り文字の自動スペース

単語の区切り文字には、両側に自動でスペースが入ります:

[<and>a|b|c]

は次と同じ挙動になります:

a and b and c

句読点の区切り文字には自動でスペースが入りません

[<,>a|b|c]

の出力は:

a,b,c

カンマの後にスペースが欲しければ、明示的に書いてください:[<, >a|b|c]

省略可能なリスト

順列は0個を出力できないので、リストを「無いこともある」形にするには、順列全体を空の列挙分岐で包みます:

{|[<minsize=2;maxsize=3;sep=", ";lastsep=" and ">Postgres|Redis|Kafka|MongoDB]}

あり得る出力:Postgres and RedisKafka, Postgres and Redis、または空文字列。周囲の空白の扱いを忘れずに — リストが消える可能性があるなら、スペースは分岐の内側に置きます。

タイトル・説明文・見出しの連続リスト

これがほとんどの書き手が見落とすパターンです。タイトルやH2/H3の見出しは、複数の並列したテーマを並べていることがよくあります:

Benefits, Integrations, and How to Get Started

これは固まった文字列ではありません — 3つの並列した見出し要素のリストです。パターンを見抜いて、順列として書いてください:

[<minsize=3;maxsize=3;sep=", ";lastsep=", and ">Benefits|Integrations|How to Get Started]

よい例。ブランド枠のある見出しの中で:

%product_name%: [<minsize=3;maxsize=3;sep=", ";lastsep=", and ">Benefits|Integrations|How to Get Started]

悪い例:

%product_name%: {Benefits, Integrations, and How to Get Started|A Complete Guide for Teams}

2つめの形が弱い理由:

  • 構造化されたリストを1つの固まった文字列として扱っている;
  • エンジンがすでに備えている区切り文字のパターンを捨てている;
  • 再利用できる構造ではなく、文字列まるごとの入れ替えへモデルを誘導している;
  • 順列なら何十通りも出るところを、数通りしか生まない。

連続リストのパターンを使う場面:

  • 3つ以上の約束を並べるタイトル;
  • 記事のブロックをいくつか挙げるメタディスクリプション;
  • 並列した節のテーマを並べるH1/H2/H3の見出し。

手順であって順序を保たなければならない場合は、使わないでください:

Create an account, verify email, and make a deposit

これは手順の並びであって、自由に入れ替えられる見出しのリストではありません。

見出しの大文字小文字は手作業

本文についての通常のルールでは、後処理が文頭を大文字にするため、順列の要素は小文字で始めます。

タイトル形式の連続見出しには、そのルールは当てはまりません。各要素は表示するとおりの大文字小文字で書いておく必要があります:

[<minsize=3;maxsize=3;sep=", ";lastsep=", and ">Benefits|Integrations|How to Get Started]

ではなく:

[<minsize=3;maxsize=3;sep=", ";lastsep=", and ">benefits|integrations|how to get started]

後処理が、カンマ区切りの見出しリストをタイトルケースに変換してくれることはありません。

順列でよくある間違い

やらないこと理由代わりにすること
4項目以上の固定リストをそのまま書く固定された順序が、すべてのレンダリングに残るフットプリントになります。順列を使う。集合が必須なら minsize=maxsize で。
連続見出しを1つの文字列に固める区切り文字のパターンを失い、バリエーションの幅が激減します。seplastsep を持つ順列として出力する。
minsize=0 を使うエンジンが最小1に丸めるため、期待が静かに裏切られます。「リストが無いこともある」は {|[...]} で包む。
sep=". " なのに要素を句点で終える句読点が二重になります:"fact. . next fact"句読点は区切り文字に任せ、要素は裸のままにする。
エンジンが自動で入れるスペースを単語区切りに足す存在しない問題を直そうとして aandb になります。単語区切りは自動スペースに任せ、句読点のときだけ自分で足す。
要素の大文字小文字を混在させるレンダリング結果の大文字化がランダムに見えます。本文は小文字、見出しはタイトルケース。1つの順列の中では統一する。
各要素を主語つきの完全な文にする連続した流れが壊れ、要素ごとに新しい段落のように読めます。要素は句のレベルに保ち、主語は順列の外で束ねる。

順列チェックリスト

  • 3項目以上のリストはすべて順列であり、固まった文字列ではない。
  • タイトルと見出しの連続リストは、明示的な sep/lastsep を持つ順列を使っている。
  • 省略可能なリストは {|[...]} で包まれており、minsize=0 で試みていない。
  • 要素が、区切り文字がすでに与える句読点で終わっていない。
  • 見出しの順列は表示どおりの大文字小文字で書かれている。
  • 本文の順列は、後処理が大文字化する場合に小文字で始まっている。
  • 1つの順列の要素どうしが文法的に並列になっている。

構造が整ったら、最後の仕上げは文法です:文法を壊さない類語化EN


シリーズを続ける