feature image

2018幎12月1日 | ブログ蚘事

🏁🍇😀🔀Emojicodeぱモい🔀❗🍉

この蚘事は traP Advent Calendar 2018 38日目の蚘事です。

こんにちはDouble_oxygeNです。䞖間的には今日がAdvent Calendar 1日目ですね。traPでは37日も前からクリスマス🎄を楜しみにしおいるこずになりたすがクリスマスにtraPで䜕かあるのでしょうか  ❓

それはさおおき

今回のAdCもプログラミングに関する蚘事の他にもゲヌム🎮の玹介蚘事やむラスト🎚サりンド🎶等の蚘事などが既に䞊がっおいお私もそれに乗じおぷよぷよに関する蚘事を出そうかなず思っおいたした。「ぷよぷよeスポヌツ」(PS4/Switch)はちょうど昚日たででセヌルが終了しタむミングずしおもいい感じだず思うのです。
ちなみに私はeスポヌツではなく「ぷよぷよ 20th Anniversary」(DS)を未だに遊んでいたす。ゲヌムルヌルが15皮類に豊富なキャラクタヌストヌリヌモヌドがっこうモヌドがありずこずんぷよぷよでは巻き戻しができる「ずこずんれんしゅう」ずいうのもあっお非垞にオススメです DS以倖にも3DSWiiPSPで遊ぶこずができたす。

ず玹介したずころで肝心のAdCたでに予定しおいたネタがうたくたずたらなかったのでい぀も通り蚀語玹介蚘事を曞きたいず思いたす。

🍇Emojicode🍉

今回はEmojicodeずいうプログラミング蚀語を玹介したいず思いたす。以前traPが出した技術曞にもEmojicodeに぀いおの話を曞かせおいただきたしたがあれからノァヌゞョンが0.6に䞊がっお仕様が倧きく倉わったため改めおご玹介しようず思いたす。

Emojicode
https://www.emojicode.org/

😀Hello, World!

たずはずにかくHello Worldしたしょう。
ファむルhello.emojicに次のようにコヌドを曞きたす。

hello.emojic🏁 🍇
  😀 🔀Hello, Emojicode!🔀 ❗
🍉

私は至っお真面目です。

特城

蚀語の名称から明らかですが予玄語が絵文字で衚珟されおいたす。
䟋えば😀は「改行付き出力(echo)」🏁は「゚ントリポむント(main)」🍇...🍉は「ブロック(begin...end)」を衚しおいたす。

実行

実行は端末から次のようにコマンドを入力したす。
emojicodecがコンパむラでコンパむルするこずでネむティノのバむナリを吐きたす。

$ emojicodec hello.emojic
$ ./hello
Hello, Emojicode!

その他の特城・長所・短所

その他にもEmojicodeには次のような特城がありたす。

クラスベヌスオブゞェクト指向

Emojicodeではクラス🐇を䜜るこずができたす。
構文はJavaに䌌おいるず思いたす。

class_test.emojic📗
  👟クラス
📗
🐇 👟 🍇
  🖍🆕 hp 🔢 💭 メンバ倉数

  📗
    コンストラクタ
  📗
  🆕 initHp 🔢 🍇
    initHp ➡🖍 hp
  🍉

  📗
    💥❗メ゜ッド
    ダメヌゞを䞎えおhpを枛らす
  📗
  ❗ 💥 damage 🔢 🍇
    ↪ hp ▶ 0 🍇
      hp ⬅➖ damage
    🍉
  🍉

  📗
    🧟❓メ゜ッド
    hpがないかどうか刀定する
  📗
  ❓ 🧟 ➡ 👌 🍇
    ↩ hp ◀🙌 0
  🍉
🍉

䞊のコヌドのコンストラクタは匕数の倀を盎接メンバに代入しおいるので次のコヌドに眮き換えられたす。

  🆕 🍌 initHp 🔢 🍇🍉

むンスタンス生成メ゜ッド呌び出しは次のように行いたす。

💭 むンスタンス生成
🆕👟🆕 12 ❗ ➡ invader

💭 メ゜ッド呌出
💥 invader 2 ❗
↪ 🧟 invader ❓ 🍇
  😀 🔀CLEARED!🔀 ❗
🍉

クラスメ゜ッド(いわゆるstaticメ゜ッド)が䜿えたりクラスの他にも倀の䞍倉性を保持できる倀型や倀を列挙する列挙型も䜜れたりしたすが今回は割愛したす。

第䞀玚関数

関数を倀ずしお匕数や戻り倀にするこずができたす。

callable_test.emojic🏁🍇
  💭 æ•Žæ•° n が奇数かどうかを刀定するcallableを䜜りisOddに代入
  🍇 n 🔢 ➡ 👌
    ↩ n 🚮 2 🙌 1
  🍉 ➡ isOdd

  💭 callableを実行
  ⁉ isOdd 12 ❗ ➡ isOdd(12)
  ↪ isOdd(12) 🍇
    😀 🔀12 は奇数です🔀 ❗
  🍉
  🙅🍇
    😀 🔀12 は奇数ではありたせん🔀 ❗
  🍉

  💭 リストを䜜成
  🍚 7 3 6 10 9 16 19 25 35 44 🍆 ➡ (Ž・ω・)

  💭 リストの芁玠から奇数の芁玠だけを取り出す(map関数)
  🐭 (Ž・ω・) isOdd ❗ ➡ (Ž・ω・)

  💭 リストの内容を10進数で出力
  🔂 element (Ž・ω・) 🍇
    😀 🔡 element 10 ❗ ❗
  🍉
🍉

出力:

12 は奇数ではありたせん
7
3
9
19
25
35

䞊蚘コヌドのisOdd(12)や(Ž・ω・)(Ž・ω・)も(括匧を含めお)倉数です。Emojicodeでは絵文字や空癜文字以倖の文字は識別子になり埗るため自由に倉数名を決めるこずができたす(ずはいえ読みやすい倉数にしおおくこずが重芁ですが)。

Emojicodeの長所

Emojicodeの短所

🎉v0.6の䞻な倉曎点

コンパむル

今たでのコンパむラはバむトコヌドを吐き出しおEmojicode VM䞊で動䜜させおいたのですがv0.6からはコンパむラにLLVMを導入しおネむティノバむナリにコンパむルできるようになりたした。これにより実行速床が倧幅に改善されたそうです。

絵文字の再遞定

絵文字の芋盎しが行われより読みやすくなりたした。
以䞋は改められた絵文字の䞀䟋です。

圹割 倉曎前 倉曎埌
1行コメント 👎 💭
耇数行コメント 👵...👵 💭🔜...🔚💭
if 🍊 ↪
else 🍓 🙅
elseif 🍋 🙅↪
return 🍎 ↩
ドキュメントコメント 🌮...🌮 📗...📗 たたは 📘...📘
æ•Žæ•°åž‹ 🚂 🔢
浮動小数点数型 🚀 💯

䞭眮挔算子

挔算子は今たで関数ず同じ扱いで前眮蚘法で曞くこずになっおいたしたがv0.6からは䞭眮蚘法で曞くようになりたした。䞭眮蚘法の際に必芁な優先順䜍の括匧は🀜...🀛で衚したす。

2 ➕ 3 ✖ 4       💭 14
🀜 2 ➕ 3 🀛 ✖ 4 💭 20

メ゜ッドのムヌド

メ゜ッドにムヌドずいう抂念が加わりたした。ムヌドは❗ず❓の2皮類が甚意され定矩時に奜きな方を自分で遞択できたす。同じメ゜ッド名でもムヌドが異なるず異なるメ゜ッドずしお扱われるため真停倀を返すあるいはsetterであるようなメ゜ッドは❓を䜿いそれ以倖は❗を䜿うなどうたく䜿い分けるず良いでしょう。ムヌドはメ゜ッド定矩時は先頭に曞きメ゜ッド呌び出し時には末尟に曞きたす。

Unicode 11 察応

Unicode 11は 2018幎6月5日に公開されたした。远加された新しい文字を衚瀺できる環境は倚くないですがEmojicode v0.6.2から既にサポヌトしおいおコヌド䞭で䜿うこずができたす。さすが蚀語に絵文字を甚いおいるだけありたす。

⌚どうやっお入力するか

さおここたでEmojicodeの魅力を䌝えおきたしたが肝心のコヌディングをどのように行うのかずいう問題がありたす。macOSの堎合は⌘⌃Space で「絵文字ず蚘号」を衚瀺させるこずができたすが䞀々怜玢しおダブルクリックするようでは䜜業効率がよくありたせん。

そこで玹介したいのがRocketずいうアプリです。

Rocket
https://matthewpalmer.net/rocket/

実はこのアプリはtraP郚員のsigmaからおすすめされたものです。アプリを起動させた状態でテキスト入力時にコロン(:)に続けお絵文字の名称を入力するず察応する絵文字をサゞェストしお倉換しおくれたす。これを玹介しおくれたお陰で私のEmojicodeコヌディングが爆速になりたした。

基本は無料版で十分ですが$5(USD)で有料版を賌入するず絵文字の名称を自分で自由に远加するこずができるようになりたす。䟋えば「:if」に「↪」を察応させたり「:block」に「🍇🍉」を察応させたりするずコヌディング時にいちいち絵文字を思い出す必芁がなくなりたす。非垞に䟿利なので皆さんもEmojicodeでコヌディングするずきはいかがでしょうか。

おわりに

Emojicodeで゚モ゚モな絵文字ラむフを送っおみるのもいいず思いたすよ🀗。


明日はwhiteonionずshirodoniが担圓です。お楜しみに🔜。

Double_oxygeN icon
この蚘事を曞いた人
Double_oxygeN

創䜜をしたす。蚀語音楜数孊プログラミングに興味がありたす。

この蚘事をシェア

この゚ントリヌをはおなブックマヌクに远加
共有

関連する蚘事

ERC20トヌクンを甚いた宝探しゲヌム(真)の提案【アドベントカレンダヌ2018 10日目】 feature image
2018幎11月3日
ERC20トヌクンを甚いた宝探しゲヌム(真)の提案【アドベントカレンダヌ2018 10日目】
Azon icon Azon
2021幎5月19日
CPCTF2021を実珟させたスコアサヌバヌ
xxpoxx icon xxpoxx 他
2023幎4月27日
Vulkanのデバむスドラむバを自䜜しおみた
kegra icon kegra
2024幎4月14日
Spotifyのクラむアントを自䜜しよう
d_etteiu8383 icon d_etteiu8383
2021幎12月8日
C++ with JUCEでステレオパンを䜜っおみた【AdC2021 26日目】
liquid1224 icon liquid1224
2019幎4月22日
アセンブリを読んでみよう【新歓ブログリレヌ2019 45日目】
eiya icon eiya
蚘事䞀芧 タグ䞀芧 Google アナリティクスに぀いお 特定商取匕法に基づく衚蚘