ソフトウェアエンジニアの日常の雑記

日々思ったことをまとめます

IntellijのNuxt.jsでimportのailiasを設定したい

本家はこちら

Intellijのvueとかjsのサポートがかなりよくなってきたので、1IDEで完結した欲求がでてきました。 vscodeだとある程度勝手に認識してくれるんだけど、Intellijはできないみたいで設定してあげる必要がある模様。

nuxt.config.jp

module.exports = {
  resolve: {
    extensions: ['.js', '.json', '.vue', '.ts'],
    root: path.resolve(__dirname),
    alias: {
      '@core': path.resolve(__dirname + '/src_core'),
      '@web': path.resolve(__dirname + '/src_web'),
    }
    // 省略
  },

このrootaliasを追加すればいける模様。(resolveを書いてなかったらそれも追加で)

import sampleRepos from "@core/modules/repository/sampleRepos
import samplePage from "@web/modules/repository/samplePage

これがジャンプできるようになる。便利

Intellijでdebug実行すると warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

本家はこちら

warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

ブートストラップクラスパスが追加されているため、共有はブートローダークラスでのみサポートされます

ということらしいが、intellijでしか警告がでない。

Intellij Idea > preference > Build, Execution,Deployment > Async Stack TraceInstrumenting agent をunlockすれば、でなくなる。

intellijでdebugするとこの警告がでてくる warning: forcing TieredStopAtLevel to full optimization because JVMCI is enabled

本家はこちら

OpenJDK 64-Bit GraalVM CE 19.3.0 warning: forcing TieredStopAtLevel to full optimization because JVMCI is enabled

JVMCIが有効になっているため、TieredStopAtLevelを完全に最適化する こういうことらしいが、gradle bootRun では発生しない。Intellijで発生する。

IntelliJの設定かなにかだろうと思い設定を確認

Run/Debug Configurations の中に Enable launch optimization があり、これをunlockすると警告がでなくなった

Vue.jsのcomputedで引数を使いたい

本家はこちら

Vuejsで便利なcomputedですけど、引数取りたいって思うタイミングがあり検証。 ちなみに引数とりたいタイミングは、ループでテーブル作成してるときとかです。

lambda式(アロー関数)を使えばできました。

<template>
  <div id="app">
    <p>sample('a'):{{sample('a')}}</p>  // <- 使用箇所
    <p>sample('r'):{{sample('r')}}</p>  // <- 使用箇所
  </div>
</template>

<script>
export default {
  name: "App",
  computed: {
    sample() {
      return r => r === "a";   // <-  ここでアロー関数を実行
    }
  }
};
</script>

出力結果はこちら。

sample('a'):true

sample('r'):false

computed特有のキャッシュ等が効かないらしいけど、methodとwatchでやるんだったらあんまりかわらなくて、computedですっきりかけた方がいいかなと思うので採用します。

mapとflatmapのメモ

本家はこちら

mapとflatmapのメモ.

map: 個数が変わらない。2個渡したら2個返ってくる flatmap: streamに変換させて、それを合成する。戻ってくるのはstreamが1つ。flatmapはstreamを合成してくれる感じのいいやつ。

@RunWith(JUnit4.class)
public class SampleTest {
    @Test
    public void test() {

        // map
       Arrays.asList("a,b,c", "d,e")
            .stream()
            .map(e -> Arrays.stream(e.split(",")))
            .forEach(System.out::println);

        // flatmap
        Arrays.asList("a,b,c", "d,e")
            .stream()
            .flatMap(e -> Arrays.stream(e.split(",")))
            .forEach(System.out::println);
    }
}

出力結果は下記

# map
java.util.stream.ReferencePipeline$Head@18ce0030
java.util.stream.ReferencePipeline$Head@4445629

# flatmap
a
b
c
d
e

mapとflatmapのメモ

本家はこちら

mapとflatmapのメモ.

map: 個数が変わらない。2個渡したら2個返ってくる flatmap: streamに変換させて、それを合成する。戻ってくるのはstreamが1つ。

@RunWith(JUnit4.class)
public class SampleTest {
    @Test
    public void test() {

        // map
       Arrays.asList("a,b,c", "d,e")
            .stream()
            .map(e -> Arrays.stream(e.split(",")))
            .forEach(System.out::println);

        // flatmap
        Arrays.asList("a,b,c", "d,e")
            .stream()
            .flatMap(e -> Arrays.stream(e.split(",")))
            .forEach(System.out::println);
    }
}

出力結果は下記

# map
java.util.stream.ReferencePipeline$Head@18ce0030
java.util.stream.ReferencePipeline$Head@4445629

# flatmap
a
b
c
d
e

Vuejsでselect boxにdefault valueを設定するには?

本家はこちら

Vuejsでselectboxにdefault valueを設定するのにいつも覚えられないので、メモ

<select v-model="args">
  <option :value="null" disabled>Please select...</option>
  <option :value="'A'">A</option>
  <option :value="'B'">B</option>
</select>

:value="null" disabled を入れるっていうのを毎回調べてる気がする。。。