1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【javascript】テンプレートリテラルとアロー関数を用いた、シンプルな引数有りメッセージ呼出ファンクションの実装検討

Last updated at Posted at 2021-09-01

背景

Nuxt.js(node.js)にて開発する時、まずメッセージの体系化を行いたい。引数にも対応可能なのが望ましい。

  • 引数含むメッセージファンクション
  • 呼び出し側

上記2要素で完結しつつ、1メッセージに付き1行~2行ぐらいでシンプルにならないかと考えた。

成果

一応できた。

メッセージ側

// アロー関数を用いて記述、実行。
var messages = {
    example1: (...args:string[]) => escape(`const${args[0]}${args[1]}${args[2]}`) ,
    example2: (...args:string[]) => escape(`テ${args[0]}${args[1]}ト`) 
}

// XSS対策のエスケープ
function escape(str:string){
    str = str.replace(/&/g, '&');
    str = str.replace(/</g, '&lt;');
    str = str.replace(/>/g, '&gt;');
    str = str.replace(/"/g, '&quot;');
    str = str.replace(/'/g, '&#39;');
    return str
}

使っているのはテンプレートリテラルとアロー関数。いずれもIE非対応であることは留意。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Template_literals
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/Arrow_functions

呼び出し側の自動テストメソッド(Jest)

  import { messages}  from '@/logic/common'

// 下記はいずれも成功。
// messages.example2などで入力補完として出てくるためソースを追ったり探したりするのが容易い
describe('callMessage', () => {
  test('messages', () => {
    expect(messages.example1( '0','3','2')).toEqual('const032')
  })
  test('escape messages', () => {
    expect(messages.example2( '&','2','1')).toEqual('テ&amp;ス2ト')
  })
})

メッセージを編集しやすく、複数引数にも対応でき、コーディング視点からも楽。やりたかったことはできていそうと考える。
テンプレートリテラルなので、改行も容易い。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?