675 Views
August 14, 23
スライド概要
Notes/Dominoの@関数を取り上げながら、調べたこと、経験したことを雑談してゆこうと思います。
第36回は @Repeat と @Return について
@ -notes knows community- 2022/06/09 @関数Talk 第36回 公開版 @ Talks around @Functions in Notes and Domino 36th ✔ @Repeat ✔ @Return 阿部 覚 (tw:) @abesat
@ @Repeat @ で放談
@ 前回、話の肴にしたのは@Unique 引数なしの使い方に話の重点を置いちゃいましたが 引数を指定するやり方で、 @Unique( textlist ) リスト内に複数あるものをひとつにまとめることに 使われます @ 対称的な、ひとつを複数にする関数はない? と、浮かんだのが 今回ネタにする @Repeat ですが @Repeatと真逆の働きをするってわけではありません
@ 使い方…たとえば、こんな感じ? @
@ @Unique の場合は リスト内の複数要素を単一化するけど @
@ @Repeat は、リストの要素が増えるわけではなく 単に文字列が連結したまま繰り返されます @
@ じゃあ、ちょっと話はそれるけど リストを対象にして値を繰り返す関数はないの? 式で実現しようとする場合 単一の@関数としては、無さそうです おそらく @For などのループ型の関数を組み合わせて 値の追加を繰り返させる形になるのでは… @
@ ただ、繰り返す対象の文字列をリストで指定できるので、 こんなことはできちゃいます @ まてよ…下のほうは、1文字足りないぞ💦
@ そこで、繰り返す文字数の方も リスト化したけど、効果ありませんでした😅 👆 結局7文字 @
@ さて、ここまでご紹介した @Repeat はこんな形式 @Repeat( string ; number ) ひとつまたは複数の文字列を、●回繰り返して! と指定するわけです でも、 ヘルプにはもう一つ引数がついた形で掲載されています @
@ 省略されることが多い、この3番目の引数のことを @Repeat( string ; number ; numberchars ) 個人的には、 打ち止め指定 @ と、名付けたく思います
@ こんな感じです @ 繰り返しを、その区切りにはこだわらずに 指定の文字数でおしまいにしてしまいます
@ なんに使えるかいまいちピンときませんが 例えばこんなことはできると思いました ユーザー入力欄の下に 計算結果テキストで 文字数分の"ルーラー"もどきを 出してみる 入力欄も計算結果テキストも 同じサイズの固定長フォントに そろえています @ "打ち止め指定"の判断基準は あくまで文字数である点に注意ください 日本語を扱う場合は 全角と半角が混じっていても、それぞれが1文字です
@ では、@Repeat はここらで打ち止めにして @
@ @Return @ で放談
@ この関数の ことを、 私は ハイ それまでョ 関数 @ と、 称したく 思います😏
@ ヘルプにはこう書かれています 「この関数は、ある条件が True の場合にのみ式の残りの部 分を実行するときに便利です。」 逆に言うと、式に残りの部分がないのに @Return を使っても、あまり意味がありません @ ヘルプに載っているサンプルを見てみましょう
@ あれ… @If(@Prompt([YesNo];"Continue?";"Do you want to continue reading your mail?");@Command([NavNext]);@Return("")) @If(@Environment(OrderNumber)="";@SetEnvironment("OrderNumber"; "0");@Return(@Environment("OrderNumber"))) lookup := @DbLookup("" :"" ; "serverName" :"fileDirectory\\ databaseName.nsf"; "People" ; "Jackie Brown"; 3); @If(@IsError(lookup); @Return(@Prompt([OK];"Error";"Error locating the requested job title.Aborting lookup")); lookup) @ だから、サンプルをそこでおわりにしちゃぁ 意味ないですってば~
@ 式言語って、複数の行にわたっている場合 @If(・・・・・・・・・・・・・・・・・・); tmp1 := ・・・・・・・・・・・・・・; @If(・・・・・・・; @Prompt(・・・・・・・・・・・); ・・・・); tmp2 := tmp1・・・・・・・・・・・・・・; ・・・・; ・・・・・; tmp1+tmp2 @ 何も明示されていなくても、 最後の部分に書かれている式の値を返す というお約束がありますね
@ でもどんな条件の場合もすべて最後の部分だけで 答えを返すように式を作るのはきびしい @If(・・・・・・;・・・・;@Return("1")); tmp1 := ・・・・・・・・・・・・・・; @If(・・・・・・・; @Prompt(・・・・・・・・・・・); ・・・・); tmp2 := tmp1・・・・・・・・・・・・・・; ・・・・; ・・・・・; tmp1+tmp2 条件満たさない? なら ハイ、"1"返します 🎵それまでーョ @ でもそんな時、@Return で一部の条件を逃がして ここで値を返して終わり!にできます これによって式全体も内容がすっきりし 短く誤りの置きづらい形にできるという 利点が生じます
@ …と、基本を話したところで😅 @If("⏰お時間です"; @Return("続きは次回"); "" ); : @
@ 今回もお付き合い ありがとうございました 😀 @