nim lang チュートリアル(readLine,if,case,let,const)

こちらの写経 -> https://nim-lang.org/docs/tut1.html

echo "What's your $name ?"
var name = readline(stdin)
echo "Hi, " , name , " !"

標準入力

readline(stdin) で標準入力を受け付けるもよう
JavaのSystem.inみたいなものかな

コンパイルは下記コマンドで

$ nim c Hello.nim
$ ./Hello

変数宣言はTypescriptっぽい感じ

var 変数名: 型

// 代入の場合
var 変数名: 型  =  値

// まとめて指定もできる
var x , y : int

// 改行で指定もできる
var
  x , y: int
    a,b,c: string

// まとめて代入もできる
var
  x , y: int = 1
    a,b,c: string = "abcdefg"

const と let

constが使える。Javaでいうstatic final な感じかな

const x = "abc"
x = "def"  // <- エラーになる

letも使える。Javaでいfinalな感じかな。

let x = "abc"
x = "def"

上の2つの例をみるとconstとletの違いが無いように思えるが、constはコンパイル時に値が決定している。
letは使用時に1度だけ値を入れることが可能になる

let x = readLine(stdin)     // OK

const x = readLine(stdin)  // NG

このような感じである

if statement

if文では、Pythonと同じようにインデントで制御されるので、インデントがないとちゃんと動かない

let name = readLine(stdin)
if name == "":
  echo "empty value"
elif name == "name":
  echo "name is name"
else:
  echo "Hi , ", name , "!"

こんな感じ

下記はPythonだが、まったく同じ

if a == 1:
    print(1)
elif a == 2:
    print(2)
else:
    print("else")

case statement

case文はレンジ指定とかで使うっぽい

from strutils import parseInt

let n = parseInt(readLine(stdin))
case n
of 0..2, 4..7: echo "The number is in the set: ", n
of 3, 8: echo "The number is 3 or 8 ", n
else: discard

三点リーダの両端を含めた間の値が選択される

一旦ここまで

Vue for Nativescript v 1.0.0リリースされたので 環境つくる

Vue for Nativescript v1.0.0 がリリースされたらしいので、ちょっと触ってみる
Vue for Nativescriptリリース

環境構築はとても簡単
※ npmは入ってること

ツールをインストール

tns コマンドをインストール

$ npm install -g tns

cocoapodsをインストール

nativescriptをiOS用にビルドするにはcocoapodsが必要なので、入ってなかったらインストールする

$ sudo gem install cocoapods

nativescriptを起動する

サンプルアプリをテンプレートから作る

$ tns create hello-ns-vue --template nativescript-vue-template

$ cd hello-ns-vue

起動する

$ tns run ios

シミュレータが起動し、アプリがインストールされてアプリも起動する。

テキスト修正してみる

中身はapp.jsをそのままなので、テキスト修正くらいはしてみる

app.js

const Vue = require('nativescript-vue');

new Vue({
    template: `
        <Page class="page">
            <ActionBar class="action-bar" title="NativeScript-Vue"></ActionBar>
            <StackLayout class="p-20">
                <Label textWrap="true" class="h2" :text="headingText"></Label>
                <Image height="200" class="m-y-10" src="~/images/NativeScript-Vue.png"></Image>
                <Label textWrap="true" class="body" :text="bodyText"></Label>
            </StackLayout>
        </Page>
    `,
    data: {
        headingText: '日本語は表示できるか?',
        bodyText: 'ちょっとフォントがよくない?'
    }
}).$start();

テキスト修正して、保存すると自動でビルドされてアプリ再起動されて反映される。
これはとても便利。
テキスト修正レベルはいいけど、シンタックスエラー時にもビルド -> アプリ再起動をしてしまうので、
syntaxエラーとかビルド成功時だけ、アプリ再起動してほしいかなと。(なんか設定あるんですかね?)

タブを表示してみる

templateの中にapp-with-tab-view.jsがあるので、中身をapp.jsに書き換えて保存するとアプリの中がタブになる

const Vue = require('nativescript-vue/dist/index')

let app = new Vue({
    data: {
        selectedTab: 0,
        tabs: [
            {title: 'First Tab', text: 'im the first tab'},
            {title: 'Second Tab', text: 'im the second tab'},
            {title: 'Third Tab', text: 'im the third tab'},
        ]
    },

    template: `
        <page>
            <stack-layout>
                <button @tap="tabs.push({title: 'added', text: 'added tab'})">Click me!</button>
                <tab-view :selectedIndex="selectedTab">
                    <tab-view-item  v-for="(tab, i) in tabs" key="i" :title="tab.title">
                        <label>{{ tab.text }}</label>
                    </tab-view-item>
                </tab-view>
            </stack-layout>
        </page>
    `,
})

app.$start()

この記述で簡単にできるので、ちょっと触ってみようかと思う。