文字列の作成に非常に便利！Power Appsにおける識別子「$」

# はじめに
Power Appsの中で文字列を作成するときに、Excelと同様`&`を使ってしまうことが、しばしば登場します。
理解しやすい反面、慣れてくると`美しくないな`と思うかもしれません。

要素が多くなってくると読みづらくもなるので、できればスッキリできる方法が知りたい。

そこで登場するものが[$](https://learn.microsoft.com/ja-jp/power-platform/power-fx/data-types#string-interpolation)を用いた文字列の補間です。

https://learn.microsoft.com/ja-jp/power-platform/power-fx/data-types#string-interpolation

# $(文字列補間)の使い方
文字列補間は、先頭に`$`を付けたうえで文字列を記載します。
サンプルとして下記の例を挙げます。

```javascript:Text
$"Good morning🐟{User().FullName}
今日は{Today()}です！"
```

[User 関数](https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-user)と[Today 関数](https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-now-today-istoday)が、あいさつ文の間に良い感じで入っています！
`中括弧 {}`で囲まれた部分に、変数や数式を設定でき、**非常に便利です。**

[Concatenate 関数](https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-concatenate)や`&`よりも式がスッキリまとまります！

```diff_javascript
// &で無理やりくっつけた例
- "Good morning🐟" & User().FullName & "
-今日は" & Today() & "です！"

+$"Good morning🐟{User().FullName}
+今日は{Today()}です！"
```

## Pythonの`f文字列`のようなイメージ
この使い方は`Python`でいう`f文字列`（フォーマット済み文字列リテラル）の使い方に非常に似ています。

```python:Pythonの場合
from datetime import datetime

user_name = "ガツオ 出戻り"
today_date = datetime.today().strftime('%Y-%m-%d')

message = f"Good morning🐟 {user_name}\n今日は {today_date} です！"
print(message)
```

`f"Good morning🐟 {user_name}\n今日は {today_date} です！"`に注目すると、
ほとんど`f`が`$`に置き換わっただけと理解できます。

```javascript:Power Appsの場合
$"Good morning🐟{User().FullName}
今日は{Today()}です！"
```

関数でサクっとユーザー情報をとれることが嬉しかったりしますね。

## 文字列補間を使ったチュートリアルの作成
よくアプリケーションが始まると、`Welcome!!`みたいなメッセージが出たりします。
`OnVisible`の操作を仕込んだりもしますが、時間別に画面を変えるものを作ってみましょう。

 - 早朝
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/00cc116b-3924-1bd7-0974-14307cd812c0.png)

 - 朝・昼
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/83186209-9860-126e-034b-fe1b09e1a92d.png)
 - 夕方
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/c3e93895-360f-a6df-58ff-c60f2a64419d.png)
 - 夜
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/ccf50ed4-40b2-8d32-93e2-8935aaf17085.png)
 - 深夜
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/ae88dcea-0bcb-bab8-abb7-fa3b6b35feb0.png)

:::note info
画像は`Power Apps`のストック画像を使っています。
Now()関数で対処したいところですが、記事を一気に書き上げたいことから、コンテキスト変数で関数は宣言します。
:::

### テキストラベルとイメージ コントロール
主題は`$`の文字列補間ですが、イメージ コントロールも同様に時間に合わせて画像を変えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/5e8ca342-cc50-9402-a74b-494c940121d3.png)

赤枠`rgb(255,0,0)`が`テキストラベル` 、青枠`rgb(0,0,255)`が`イメージ コントロール`です。

```javascript:Text
$"{Switch(
    true,
    And(
        Hour(_nowTime) >= 5,
        Hour(_nowTime) < 9
    ),
    "早起きですね！おはようございます",
    And(
        Hour(_nowTime) >= 9,
        Hour(_nowTime) < 14
    ),
    "おはようございます",
    And(
        Hour(_nowTime) >= 14,
        Hour(_nowTime) < 18
    ),
    "夕方ですね",
    And(
        Hour(_nowTime) >= 17,
        Hour(_nowTime) < 20
    ),
    "こんばんは",
    And(
        Hour(_nowTime) >= 18,
        Hour(_nowTime) < 23
    ),
    "遅くまでお疲れ様です！",
    "こんな時間までお疲れ様です！"
)} {User().FullName}🐟
時刻は{_nowTime}です！"
```

```javascript:Image
Switch(
    true,
    And(
        Hour(_nowTime) >= 5,
        Hour(_nowTime) < 9
    ),
    '182654618',
    And(
        Hour(_nowTime) >= 9,
        Hour(_nowTime) < 14
    ),
    '530053449',
    And(
        Hour(_nowTime) >= 14,
        Hour(_nowTime) < 18
    ),
    '589001480_super',
    And(
        Hour(_nowTime) >= 18,
        Hour(_nowTime) < 23
    ),
    '855936706_medium',
    '922707200'
)
```

`イメージ`は今回の主題から逸れてしまっていますが、一切`&`が登場していないことがわかります。

すらっと書いて、関数を美しくまとめる！
そんなことができますね！

# おわりに
今回は`$`を用いたテクニックを紹介しました！
マラソン🏃はまだまだ続く・・・💦