7
3

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.

SvelteとElmを比べておきたい! テンプレートとview編

Last updated at Posted at 2020-03-22

Stelte+Elmを学習中なもので、Vue.jsとElmを比べてみよう! テンプレートとview編に便乗させていただき、Svelte編を書かせていただきます。元記事のVue.jsとElmを対比してお読みくださいませ。

①オブジェクトの表示

Svelte

汎用ループを扱うことがディレクティブはeachとなります。コレクションのそれぞれ(each)を扱うイメージを持つと良いかと。

<div id="app">
  <ul>
    {#each items as { message }, i}
      <li> { message }</li>
    {/each}
  </ul>	
</div>

<script>
	let items = [
      { message: 'Foo' },
      { message: 'Bar' }
	]
</script>

Svelteの場合、htmlコードの中に、素のJSでitemsを用意します。
私はSvelte初心者なので、REPLで確認しながら実行しています。
https://svelte.dev/repl/
repl.PNG

Svelteの利点

全体のコード量はVueより少し短いくらい、とっつき易いJavascriptの表現になりました。HTML側のテンプレートは少し慣れが必要ですが、数も少ないので何かを作り始める際には難しくないと思います。

Svelteの問題点

Vueと同じくやはりタイポをしてしまうと、リストの文字列が空っぽになってしまいます。この程度ならすぐ気付けるかもしれませんが、ベースがHtmlという元が文章を書くための表現方法のためシンタックスのミスなどは検知がしにくいですね。短くコンポーネント(ファイル)を保つなど人間がミスを起こしにくいような仕組みを工夫し続けなければなりません。正直、大規模な開発は厳しいかと。

② 数値の扱い

Svelte

演算が必要なところのみ素のJavaScriptを用いて、結果をHTMLが解釈し文字列を導き出します。

<div id="app">
  <ul>
    {#each items as { num }, i}
      <li> x= { incl(num) }</li>
    {/each}
  </ul>	
</div>

<script>
	let items = [
    { num: 1 },
    { num: 2 }
	]
	const incl = (x)=>x+1
</script>

実行結果:
23.PNG

Svelteの利点

表現がとても柔軟です。最初の例と変わらずに記述することができました。

Svelteの問題点

柔軟が故に以下のようなミスも起こし易いです。が、REPLで直ぐに結果を確認しておけばミスは減るでしょう。

12.PNG

③ 条件付き繰り返し

Svelte

Vueでは何やら留意点があるようですが、素のJSでロジックを書くSvelteでは淡々と記述するのみです。

<ul>
  {#each evenNumbers as x}
    <li> { x }</li>
  {/each}
</ul>	

<script>
  const nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  const evenNumbers = nums.filter(x => x % 2 === 0)
</script>

sv.PNG

Svelteの利点

依然として表記としては短く簡単ですね。

Vueの問題点

なんか、このあたりVue、つらそうで可哀想。

私のまとめ

Svelteは初期の学習コストが低く、Vueのように独自に覚えることが少ない点は良い点です。しかし、複雑性が増した時にJSで頑張って書くことになります。Vueと同じく、副作用も柔軟に書けることの利点が問題点に跳ね返ってくることがしばしばありそうです。その時にどう工夫をして解決していくかが課題となると思います。
Elmとの比較は、元記事を読みましょう!私はある規模を越えたらelmを使う!
すなわち、Svelte+elm =Sveltelm ;-)

そして、Thanks, @ababup1192さん!

7
3
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
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?