2020-07-18に更新

TOMLの文字列のクォーテーションを適切に選ぼうぜ☆(^~^)?

あぴゃーーーーー☆(^~^)! 公開下書き

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 わたしが調べたところ、6パターンあるぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 洗い出したか☆?」

Case 1

以下の1行をコードする6つの方法。

Hello

Pattern.1

"Hello"

Pattern.2

"""Hello"""

Pattern.3

"""
Hello
"""

Pattern.4

'Hello'

Pattern.5

'''Hello'''

Pattern.6

'''
Hello
'''

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 TOMLは、コミュニティに参加したプログラマーの考えた、ある程度 設定ファイルの書きやすい構文が わりと気軽に採用されるみたいね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 レア・ケースが割を食って複雑になるが、よくあるケースでは簡単……、だから多くの人には使いやすい……、という ハフマン・コーディング みたいな戦略だぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父んみたいな レア・ケース突撃するマン は口を挟むなだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 じゃあ、まず ダブル・クォーテーション を含める書き方から見ていこうぜ☆?」

Case 1

以下の1行をコードする6つの方法。

Say "Hello".

Pattern.1

"Say \"Hello\"."

Pattern.2

"""Say "Hello"."""

Pattern.3

"""
Say "Hello".
"""

Pattern.4

'Say "Hello".'

Pattern.5

'''Say "Hello".'''

Pattern.6

'''
Say "Hello".
'''

KIFUWARABE_80x100x8_01_Futu.gif
「 パターン1で " から \" への変化がみられるが……☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 エスケープ・シーケンスだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 3連続するダブル・クォーテーションだったら、どうすんの?」

Case 2

以下の1行をコードする6つの方法。

a"""b

Pattern.1

"a\"\"\"b"

Pattern.2

"""a\"\"\"b"""

Pattern.3

"""
a\"\"\"b
"""

Pattern.4

'a"""b'

Pattern.5

'''a"""b'''

Pattern.6

'''
a"""b
'''

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 エスケープ・シーケンスにして 3連続のダブル・クォーテーションでなくせばいいんだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 だったら、シングル・クォーテーションで挟むわね」

KIFUWARABE_80x100x8_01_Futu.gif
「 内容に応じて 最適なパターンを選ぶの、めんどくさ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 じゃあ、改行を入れる方法から見ていこうぜ☆?」

Case 3

以下の3行をコードする6つの方法。

You
say
hello

Pattern.1

"You\r\nsay\r\nhello"

Pattern.2

"""You\r\nsay\r\nhello"""

Pattern.3

"""
You
say
hello
"""

Pattern.4

エスケープシーケンス無いんで無理。

Pattern.5

エスケープシーケンス無いんで無理。

Pattern.6

'''
You
say
hello
'''

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 \ 記号が 見た目うるさいわねぇ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 次は ふつうに \ 記号を表示したいケースを見てみようぜ☆?」

Case 4

以下の1行をコードする6つの方法。

C:\User\Muzudho

Pattern.1

"C:\\User\\Muzudho"

Pattern.2

"""C:\\User\\Muzudho"""

Pattern.3

"""
C:\\User\\Muzudho
"""

Pattern.4

'C:\User\Muzudho'

Pattern.5

'''C:\User\Muzudho'''

Pattern.6

'''
C:\User\Muzudho
'''

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 シングル・クォーテーション・チームの独り勝ちねぇ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 設定ファイルに正規表現を書きたい、という要望から シングル・クォーテーション を使った書き方が取り入れられたぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 じゃあ シングル・クォーテーション を含む文字列のパターンを見せてくれだぜ☆」

Case 5

以下の1行をコードする6つの方法。

It's ok.

Pattern.1

"It's ok."

Pattern.2

"""It's ok."""

Pattern.3

"""
It's ok.
"""

Pattern.4

無理。

Pattern.5

端っこにシングル・クォーテーションが来た時の動作は怪しい。

'''It's ok.'''

Pattern.6

'''
It's ok.
'''

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 大らかな仕様ねぇ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 囲碁みたいだろ☆ 挟んだり ダメだったり……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 シングル・クォーテーション を3連続で含む文字列のパターンを☆」

Case 6

以下の1行をコードする6つの方法。

a'''b

Pattern.1

"a'''b"

Pattern.2

"""a'''b"""

Pattern.3

"""
a'''b
"""

Pattern.4

無理。

Pattern.5

無理。

Pattern.6

無理。

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 これまで見てきたパターンで、 エスケープ・シーケンス が少ないものが 人には読みやすい、 というのは 1つの指針にできると思うぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 その、押さえなければならない エスケープ・シーケンス って どんなけあるの?」

Controll, Quote, ... Escape Sequence
Line feed \r
Caridge return \n
いろいろ いろいろ
\ \\
" \"
' \'

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そんなに多くないぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 人の読みやすさで 優先順位を付けてくれだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 文の途中に改行があるのなら、複数行テキストにしてほしいよな☆」

Priority 1. 文の途中に改行があるのなら、複数行テキスト

Before
「あいうえお
」

After
「あいうえおr\n」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 まず、末尾の改行は 強制的に エスケープ・シーケンス にしてしまおうぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 なんで?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 1行にできるなら、1行にしようぜ☆?」

        // value は &str 型。
        if 1 < value.lines().count() {
        }

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 改行記号を数えるのは むずかしいんで、行数を数えようぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 2行以上あれば、複数行のパターン3、パターン6のどちらかに確定だな☆」

Pettern 3

"""
あ
い
う
"""

Pettern 6

'''
あ
い
う
’’’

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ここで、3連シングル・クォーテーションが含まれるなら パターン3 に確定よ」

KIFUWARABE_80x100x8_01_Futu.gif
「 シングル・クォーテーションが3つ連続しているかを いちいちチェックするのかだぜ、めんどくさ……☆」

Pettern 3

'''
あ
'い'
''う''
'''

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 3連シングル・クォーテーションが無ければ、パターン6確定で いいのでは……☆
パターン3 を好んで選ぶメリットが無いぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 パターン6は、制御コード \r\n を含めれないぜ☆」

Priority 2. 単一行で、シングル・クォーテーションとエスケープ・シーケンスを含まなければ、パターン4

Pattern 4.
'You say "Hello!".'

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 単一行で、シングル・クォーテーションを含まなければ、パターン4確定で いいのでは……☆
他のパターンを好んで選ぶメリットが無いぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 垂直タブ とか入れてくるやつ いないかだぜ☆?」

Bad:
'You say "Hello!".\r\n'

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑ エスケープ・シーケンスを入れてもいいの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 それは \r\n という4文字なんで☆ 改行2つにはなってないぜ☆」

Priority 3. 単一行で、エスケープ・シーケンスを含み、3連シングル・クォーテーションを含まなければ、パターン5

Pattern 5.
'''a''b'''

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 うーん、このパターンは コーディングが複雑になるし、進んで取り入れたいほどのものでもないぜ☆」

<書きかけ>

何度でもクリック!→

むずでょ

光速のアカウント凍結されちゃったんで……。ゲームプログラムを独習中なんだぜ☆電王戦IIに出た棋士もコンピューターもみんな好きだぜ☆▲(パソコン将棋)WCSC29一次予選36位、SDT5予選42位▲(パソコン囲碁)AI竜星戦予選16位

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

むずでょ の最近の記事