About us       情シスのじかんとは?

糖衣構文(シンタックス・シュガー)を召し上がれ!Python編 –おつまみとしてのソースコード第3皿

ユニークで面白い、意外なアイディアが詰め込まれているソースコードの世界をおつまみ感覚で紹介するのが、情シスのじかんの「おつまみとしてのソースコード」です!週末も近づき、ちょっと一息つきたくなる木曜日の夕方にお届けしていきます。

みなさんは、「糖衣構文」というプログラミング用語を聞いたことがあるでしょうか。英語ではシンタックス・シュガー(syntax sugar)と呼ばれており、糖衣構文はその日本語訳となります。
糖衣構文とは、そのままではやや複雑な書き方になってしまう構文を、同じ意味のままシンプルに書けるようにしたものです。
どのようなものなのかイメージのしづらい用語ですが、プログラミング経験をお持ちの方であれば、一度は意識せずとも糖衣構文を使ったことがあるのではないかと思います。

おつまみのソースコードの第三回は、「糖衣構文(シンタックス・シュガー)」のPython編をお届けします。
Pythonの糖衣構文の代表的なものを紹介していきますので、糖衣構文という用語を知っていた方も、知らなかった方も、この機会にぜひ糖衣構文について理解を深め、日々の業務で活用していきましょう。
エンジニア仲間とのアイスブレイクや、一人でまったりする時間のお供に、ぜひご覧ください!

         

糖衣構文とは

糖衣構文の実例を紹介する前に、まずは糖衣構文という摩訶不思議な用語について、少し詳しく解説していきましょう。「糖衣」は、なじみのある言葉で言い換えると「シュガーコーティング」のことです。薬剤を飲みやすくするために表面が甘くコーティングされていたり、ゼリーなどのお菓子の表面が砂糖に覆われていたりしますよね。それが「糖衣」です。
つまり、糖衣構文とは「シュガーコーティングされた構文」ということになります。英語ではシンタックス・シュガー(構文糖)と呼ばれるため少々意訳的ではありますが、日本ではこの呼び方が定着しています。(構文糖、構文糖衣などと呼ばれる場合もあります。)

糖衣構文を使うと、一般的には元の構文よりソースコードは簡潔になります。糖衣構文を使いこなすことで、ソースコードをより短い文字数で書くことを競う「コードゴルフ」などの競技プログラミングを楽しむことができるようになります。

コードゴルフの実例については、過去の記事で紹介していますので合わせてご覧ください!

生成AI×Pythonでコードゴルフにチャレンジしてみました!(Python編) –おつまみとしてのソースコード第2皿 | 情報システム部門を刺激するメディア 情シスのじかん

生成AI×Pythonでコードゴルフにチャレンジしてみました!(Python編) –おつまみとしてのソースコード第2皿 | 情報システム部門を刺激するメディア 情シスのじかん

続きを読む 》

では、Pythonの糖衣構文にはどのようなものがあるのか、実例を紹介していきます!

Pythonの代表的な糖衣構文

糖衣構文のバリエーションや種類は言語によってまちまちです。Pythonは糖衣構文が豊富な言語のひとつですので、覚えがいのある言語であるといえるでしょう。今回は糖衣構文を5つ紹介します!

1. リスト内包表記

リスト内表記は、Pythonの代表的な糖衣構文であるといえます。
通常のforループを使って、リストを作る構文の例は次の通りです。1から5の配列を与えて、各要素のべき乗を計算した結果をリストにしています。

糖衣構文のリスト内包表記を使った例文は次の通りです。

こちらは、上の構文と全く同じ動作をします。
糖衣構文の便利さを体感いただけたでしょうか?もしかしたら、知らずに糖衣構文を使っていた、という方もいらっしゃるかもしれませんね。

2. ラムダ式

ラムダ式もPythonの糖衣構文として有名なものであるといえるでしょう。通常、Pythonで名前を持たない小さな関数を定義する際には、defを使って関数定義を行います。

上記の構文を、糖衣構文であるラムダ式を用いて記述すると以下のようになります。

いずれも戻り値は7となりますが、ラムダ関数を用いた関数定義は1行で表記されており、非常にシンプルです。

3. 三項演算子

三項演算子とは、if-else文を一行で表現することができる構文です。三項演算子は、条件式に応じて、異なる値を返す際に使われます。まずはif-else文の通常の書き方を以下に例示します。

Xが5より大きければ「大きい」5以下であれば「小さい」と返す構文ですが、これを三項演算子で表記すると次のようになります。

どちらの場合も、resultに入る値は同じになりますが、三項演算子では、判定分がより簡潔に記述できることがわかります。

4. with文

Pythonのwith文は、ファイルのオープン・クローズや、データベース接続の確立・切断など、特定の処理の前後に行うべき処理を自動化するための文です。特に、処理の中で例外が発生した場合でも、確実に後処理を実行したい場合に便利です。
例えば、ファイルのオープン・クローズを行う構文では、以下のようにtry-finallyブロックを用いることが多いかと思います。

上記の構文について、with文を用いて書き換えると次のようになります。

なぜこのような書き方でファイルのオープン・クローズが実現できるかというと、with文の前後では、「__enter__()」と「__exit__()」という特殊なメソッドが呼ばれているからです。
「__enter__()」はwithブロックに入る前に実行され、処理の中で使うリソースの確保を行います。
「__exit__()」はwithブロックから出る際、または例外が発生した場合に実行され、通常はリソースの解放を行います。
そのため、例外が発生しても安全にファイルを閉じることができるのです。

5. デコレーター

Pythonのデコレーターは、関数を装飾(デコレート)して、その機能を拡張する仕組みです。関数に新しい機能を追加したり、既存の機能を修正したりすることができます。
デコレーターは、通常以下のように定義します。定義の方法には糖衣構文は存在しません。

上記のデコレーターを適用する際の通常の書き方は以下となります。

このデコレーターの適用の書き方に糖衣構文が存在します。糖衣構文によるデコレーター適用の書き方は以下の通りとなります。

「@my_decorator」という糖衣構文により、直後に定義した関数にデコレーターを適用することができるようになります。非常に便利ですね!

まとめ

今まで使ったことのない糖衣構文はあったでしょうか?この他にも、さまざまな糖衣構文が存在します。Pythonだけではなく、他の言語でも使い勝手のよい糖衣構文はたくさん存在します。
糖衣構文は必ずしも可読性が上がるものではありませんが、ソースコードを簡潔に記述するために役立ちます。
みなさんもぜひ糖衣構文について理解を深め、使いこなしていきましょう!

著者:羽守ゆき
大学を卒業後、大手IT企業に就職。システム開発、営業を経て、企業のデータ活用を支援するITコンサルタントとして10年超のキャリアを積む。官公庁、金融、メディア、メーカー、小売など携わったプロジェクトは多岐にわたる。現在もITコンサルタントに従事するかたわら、ライターとして活動中。
 
 

特集|仕事で疲れた脳みそをリフレッシュ♬
おつまみとしてのソースコード

木曜日の夕方に仕事で疲れた脳みそをリフレッシュしたいとき、一人でゆっくりしたい夜、ちょっとした空き時間に、気軽に「つまめる」ソースコードの話題をお届けします。

まるで隠れ家バーでマスターが語るウンチクのように、普段は見過ごしがちなコードの奥深さや、思わず「へぇ〜!」と唸るようなユニークなアイデア、クスッと笑える小ネタを、ソースコードの世界を熟知した「情シスのじかん」がご紹介します。

コードを書くのが大好きなエンジニアさんも、ソースコードはちょっと苦手…という情シス部門の方も、この特集を読めば、きっとソースコードの新たな一面を発見できるはず。

業務効率化のヒントになるTipsや、セキュリティ対策に役立つ情報も盛りだくさん。

さあ、あなたも「おつまみとしてのソースコード」で、技術の世界をもっと身近に、もっと楽しく感じてみませんか?

本特集はこちら
 

関連記事Related article

       

情シスのじかん公式InstagramInstagram

       

情シスのじかん公式Instagram

30秒で理解!フォローして『1日1記事』インプットしよう!

close close