テンプレート:For loop
| Luaモジュールを使用しています: |
このテンプレートは、for文またはForeach文を実現するテンプレートです。
このテンプレートは、指定されたテンプレート(「呼び出しテンプレート」)を複数回呼び出します。繰り返しは、以下のいずれかの形式で指定された値ごとに行われます。
- 一定間隔で増加(または減少)する数値列。
- 明示的に列挙された値のリスト。
各値は、呼び出しテンプレートの特定のパラメーター(「変数パラメーター」)に渡されます。オプションとして、各値にプレフィックス(接頭辞)やポストフィックス(接尾辞)を付けることも可能です。
また、変数パラメーターとは別に、すべての繰り返しで共通して渡されるパラメーター(「固定パラメーター」)を指定することもできます。
使い方
[編集]| グループ | パラメーター | 意味 | 既定値 |
|---|---|---|---|
| 必須 | 1(無名) | 呼び出し間に出力される区切り文字(空でも可。空白は保持されます) | |
| call | 呼び出すテンプレート名 | ||
| pv | 呼び出しテンプレートの変数パラメーターの名前または番号 | 1 | |
| オプション1: 繰り返し数列 |
start | 変数パラメータに渡す最初の数値 | 1 |
| stop | 最後の数値(上限) | ||
| by | 値の増分(ステップサイズ) | 1 | |
| オプション2: 明示的な値リスト |
(無名パラメーター) | 明示的に指定する各値(個別のパラメーターとして) | |
| skipBlanks | 空の値をスキップするには "true" を指定 | false | |
| その他の オプション |
pc[N]n | 呼び出しテンプレートの N 番目の固定パラメーター名 | |
| pc[N]v | 同上の値 | ||
| prefix | 変数パラメーターに渡す値の前に追加される文字列 | ||
| postfix | 値の後に追加される文字列 | ||
| substall | {{for loop}} が subst 展開されたとき、呼び出しテンプレートを展開するか("false" で抑止) | true |
「オプション1(繰り返し)」と「オプション2(値のリスト)」は同時には使用できません。どちらか一方のみ指定してください。
明示的な値の前の、無名の最初のパラメーターはセパレーターです。これは |call= で指定したテンプレートを繰り返し呼び出す際に、各呼び出しの間に挿入される文字列です。最後の呼び出しの後には出力されません。
注意点
[編集]- 区切り文字(separator)は
1=を付けて指定することもできますが、その場合は先頭や末尾に改行やスペースを含めることができません。 - パラメーターの値に等号
=を含む場合は、{{=}}テンプレートを使ってエスケープしてください(詳細は w:Help:テンプレート#テンプレートの引数に半角等号(=)を使う場合の注意 を参照)。 - 番号付きパラメーターを使用する場合、最初の値は
|2=になります(|1=はセパレーターとして使われているため)。 - 番号付きパラメーターを使用する場合、番号を飛ばしてはいけません。番号が抜けていると、そこまでのループで終了します。空白の値(空の文字列)は使用可能ですが、存在しないパラメーターは不可です。
置換(Substitution)
[編集]このテンプレートは、Lua 実装により subst 展開 に対応しています。|substall = no が指定されていなければ、テンプレートがsubst展開されたとき、|call = で指定されたテンプレート呼び出しも含めてすべて展開されます。反対に、|substall = no が指定されていれば、for loop テンプレート自体のみが展開され、呼び出しテンプレートは展開されずに残ります。
例:
{{subst:for loop|sep|01|02|03|04|05|06|07|call=1x}}→01sep 02sep 03sep 04sep 05sep 06sep 07{{subst:for loop|sep|01|02|03|04|05|06|07|substall=no}}→{{1x|01}}sep {{1x|02}}sep {{1x|03}}sep {{1x|04}}sep {{1x|05}}sep {{1x|06}}sep {{1x|07}}
完全な展開には Special:ExpandTemplates の使用も可能です。
使用例
[編集]| 種類 | コード | 説明 | 結果 |
|---|---|---|---|
| 数列による繰り返し |
{{for loop|&
|call = spanbox
|pv = font size
|start=10
|stop=52
|by=8
|postfix = px
|pc1n = 1
|pc1v = A
|pc2n = background
|pc2v = yellow
}}
|
テンプレート「spanbox」を以下の設定で複数回呼び出します:
各呼び出しの間には「&」を挿入します。 |
A &A &A &A &A &A
|
| 明示的な値のリスト | {{for loop|, |call=2x
|prefix=1
|00|01|02|03|04|05|06|07|08|09
|10|11|12|13|14|15|16|17|18|19
|20|21|22|23|24|25|26|27|28|29
|30|31|32|33|34|35|36|37|38|39
|40|41|42|43|44|45|46|47|48|49
|50|51|52|53|54|55|56|57|58|59
|60|61|62|63|64|65|66|67|68|69
|70|71|72|73|74|75|76|77|78|79
|80|81|82|83|84|85|86|87|88|89
|90|91|92|93|94|95|96|97|98|99
}}
|
テンプレート {{2x}}(渡された値を2回繰り返して表示)を、"00"から"99" までの100個の値(明示的に記述)で呼び出します。
値は |
100100, 101101, 102102, 103103, 104104, 105105, 106106, 107107, 108108, 109109, 110110, 111111, 112112, 113113, 114114, 115115, 116116, 117117, 118118, 119119, 120120, 121121, 122122, 123123, 124124, 125125, 126126, 127127, 128128, 129129, 130130, 131131, 132132, 133133, 134134, 135135, 136136, 137137, 138138, 139139, 140140, 141141, 142142, 143143, 144144, 145145, 146146, 147147, 148148, 149149, 150150, 151151, 152152, 153153, 154154, 155155, 156156, 157157, 158158, 159159, 160160, 161161, 162162, 163163, 164164, 165165, 166166, 167167, 168168, 169169, 170170, 171171, 172172, 173173, 174174, 175175, 176176, 177177, 178178, 179179, 180180, 181181, 182182, 183183, 184184, 185185, 186186, 187187, 188188, 189189, 190190, 191191, 192192, 193193, 194194, 195195, 196196, 197197, 198198, 199199 |
| 明示的な値のリスト(条件式あり) | {{for loop||call=tsh|skipBlanks=true|{{#switch:{{ROOTPAGENAME}}
|Namespace links=ln
|Article links=la
}}}} <!--|Lafd=lafd の場合は {{tsh}} を表示しない -->
|
{{for loop}} は、条件式(たとえば #switch)などにより空になる可能性のあるパラメーターを安全に処理するのに便利です。通常は、以下のように冗長な構文が必要になります:{{{1|}}} {{#if:{{{1|}}}|{{example|{{{1}}}}}}} このテンプレートを使えば、その繰り返しと条件処理を簡潔にまとめられます。
|
明示値のその他の使用例
[編集]{{for loop|-|a|3||c|g|call=3x}}
Template:3x (バックリンク 編集) を使った出力結果:
aaa-333-ccc-ggg
{{for loop|
|a|3||c|g|call=3x}}
結果:
aaa
333
ccc
ggg
{|class="wikitable sortable"
!テスト
|-
| {{for loop|
{{!}}-
{{!}} |a|b|c|d|e|call=3x}}
|}
出力:
| テスト |
|---|
| aaa |
| bbb |
| ccc |
| ddd |
| eee |
{{for loop| |01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19
|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39
|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59
|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79
|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99
|100|101|102|103|104|105|106|107|108|109|110|111|112|113|114|115|116|117|118|119
|120|121|122|123|124|125|126|127|128|129|130|131|132|133|134|135|136|137|138|139
|140|141|142|143|144|145|146|147|148|149|150|151|152|153|154|call=1x}}
出力: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
begin->{{for loop|{{=}} |01|02|03|04|05|06|07|08|09|10
|11{{=}}{{=}}{{=}}|12|13|14|15|16|17|18|19|call=1x}}<-end
出力: begin->01= 02= 03= 04= 05= 06= 07= 08= 09= 10= 11==== 12= 13= 14= 15= 16= 17= 18= 19<-end
旧バージョンに関する注意
[編集]このテンプレートは現在で3代目の実装です。現在は Module:For loop による Lua コードを使用しています。
このテンプレートはもともと ParserFunctions を使って書かれていました。その前身は、MetaWiki の Template:For に基づいたものでした。 ただし英語版Wikipediaにはすでに別の Template:For が存在していたため、テンプレート名が変更されました。
旧バージョンには以下の制限がありました:
- 変数パラメーターは最大150個まで
- 固定パラメーターは最大4つまで
- 初期の「sep」パラメーターでは、区切り文字に空白文字を含めることができなかった
これらの制限は、現在のバージョンではすべて解消されています。