Each 式
Each
式は一連の値を明確かつ簡潔に識別することを可能にします。それらは一度に複数の値を選択し操作するための強力なメカニズムを提供します。単一の each 式は、簡潔で読みやすい方法で大量の作業を処理します。
each
式の使用方法は二つあります:
- 値のリストを選択または生成するため、
- 値のセットを変更するため。
さらに、選択された値のセットが全て与えられたテストを通過するかどうかをテストするために使用される密接に関連した式のセット(every
式と呼ばれます)があります。
これら三つのメカニズム、つまり「each value」式、「each container」式、および「every」式は、共通点があります。
- これら三つの式のタイプは全て、リストアイテムまたはテキストのチャンクに作用します。頻繁にリストで作業するために使用されますが、行、テキストアイテム、単語、文字、またはパターンの一致または発生など、任意のチャンクタイプで作業するためにも使用できます。
- これら三つの式のタイプは、where 節を使用して作用する値のセットを選択できます。where 節は任意です。それがなければ、式はリスト内の全てのアイテムまたはテキストの全てのチャンクに適用されます。where 節が使用されると、作業する値のサブセットを選択するための明確かつ読みやすい方法を提供します。
値の生成に Each 式を使用する
"each value" 式は常に値のリストを生成します、選択された値が単一であっても全くない場合(空リスト)でもです。
例:
put each item of 1..50 where each is a multiple of 7 -- '[7,14,21,28,35,42,49]'を表示します。
例:
put each item of 1 to 20 where the square root of each is an integer -- '[1,4,9,16]'を表示します。
例:
put "Mary Mary quite contrary how does your garden grow" into rhyme
put each word of rhyme -- '[Mary,Mary,quite,contrary,how,does,your,garden,grow]' を表示します。
put each word of rhyme where the length of each is 4 -- '[Mary,Mary,does,your,grow]' を表示します。
put each word of rhyme where each ends with "ary" -- '[Mary,Mary,contrary]' を表示します。
put the length of each word of rhyme where each ends with "ary" -- '[4,4,8]' を表示します。
put each word of rhyme whose length is 4 and which contains "a" -- '[Mary,Mary]' を表示します。
例:
RunWithNewResults TestScript // TestScriptは実行するスクリプトの名前を含む変数です
put the result into Outcome
put the long name of each of the files of the folder of Outcome's logfile where each ends with ".png" into myfiles // 結果の中のすべてのスクリーンショットへのファイルパスを含むリストを作成します
SendMail {To:"test@gmail.com",Subject:title & "---Test results" ,body:TestScript & "Results"& Outcome,attachment:Outcome's Logfile &&& myFiles}
Each についての事実
each
式の結果は常にリストです。その最も単純な使用法を考えると、each
式はソース値からの各文字、単語、行、テキストアイテム、またはリストアイテムにアクセスし、それらの値を含むリストを作成します。
where
節は、一定の条件を満たすアイテムを選択することができます。where
節の中では、each
変数は順 番にソースからの各値を参照します。where
節が true
と評価される値だけが結果のリストに含まれます。
構文:
each chunk of sourceValue {where conditional}
each chunk of sourceValue { { where conditional } }
each chunk of sourceValue { ( where conditional ) }
任意のチャンクタイプ(リストアイテム、テキストアイテム、単語、行、または文字)とともに each
式を使用します。
conditional 式は通常、特殊変数 each
を含む式で、これは結果のリストに含める値を選択するために_sourceValue_の各チャンクに設定されます。where
節は、読みやすさやステートメントの他の部分からの分離のために中括弧(または丸括弧)で囲むことができます(互換性のために、every
式とともに中括弧が推奨されます)。
大きな式内の Each 式
each
式が大きな式内に埋め込まれているとき、each
式自体の外側の他の演算子は、each
式によって生成されたリストの値それぞれに適用され、リスト全体に対してではありません。
例:
put the length of each word of "four score and twenty"
-- Each 式はリスト ["four", "score", "and", "twenty"] を生成し、
-- その後、リストの各アイテムに対して length 関数を呼び出します。結果は、
-- 個々の単語の長さのリストです。'[4,5,3,6]' を表示します。
Each 式のスコープを制限する
each
式が影響を及ぼす範囲を広 げ、全体の式が結果のリストの各アイテムに適用されるようにするという事実は、その力を大いに増強します。しかし、期待される結果を得るために、この影響を制限することが重要な時もあります。
例:
set text to "the flowers of the forest"
put the number of items in each word of text where the length of each is 3
-- Each 式はリスト ["the","the"] を返し、その後、
-- "アイテム数の"演算子がこのリストの各アイテムに適用されます。
-- 結果として 2つの 1 が得られます (単語 "the" は単一のアイテムです)。
-- リスト '[1,1]' を表示します。
each
式の影響範囲を制限するために括弧を使用します。
例:
put ("Mars","Venus","Saturn") into planets
put the number of items in each item of planets where the length of each is greater than 4
-- リスト '[1,1]' を表示します
put the number of items in (each item of planets where the length of each is greater than 4)
-- "アイテム数の" が each 式の結果全体、つまりリストに適用されるようにします。
-- これにより、リストの単語の数が4以上のものが得られます。
-- '2' を表示します。
For Each
式を使用してスコープを拡張する
括弧が each
式のスコープを制限するという事実は、使用可能な表現の種類を制限します。例えば、括弧を使用して関数を呼び出し、それを各値に適用することはできません。なぜなら、括弧は each
式のスコープを制限するため、関数は結果のリスト全体に対して呼び出されるだけで、各値には呼び出されません。
この問題を克服するために for each
式を使用できます。
例:
put round(each,1) for each item of 2.2 to 3.1 by .25 -- Displays '[2.2,2.5,2.7,3]'