main

Rustが新カテゴリのラストと言ったが、あれはウソだ・・・。
というわけで、Kotlinをやる。

JavaプログラマのためのKotlin入門 - Qiita
Kotlinとは――読み方、メリット、「Java」とのコード比較、実行までのチュートリアル (1/3):Android Studioで始めるKotlin入門(1) - @IT
Release 1.3.11 · JetBrains/kotlin · GitHub

Androidプロジェクトでも出来るが、main関数はコマンドラインじゃないと出来ないので、コマンドラインでまずはやる。

当初、

experimental-kotlin-compiler-windows-x64.zip

こちらをダウンロードして、

環境変数
環境変数

こんな感じでパスを通したが、コンパイルすると、

C:\Project\Cloud\github.com\Sample\kotlin\main\main\src\main>kotlinc-jvm main.kt -include-runtime -d main.jar
WARN: Failed to load filesystem access layer: Windows 10, 1.8.0_181, nio2=true
java.lang.reflect.InvocationTargetException
        at com.intellij.openapi.util.io.FileSystemUtil$Nio2MediatorImpl.getAttributes(Unknown Source)
        at com.intellij.openapi.util.io.FileSystemUtil.check(Unknown Source)
        at com.intellij.openapi.util.io.FileSystemUtil.getMediator(Unknown Source)
        at com.intellij.openapi.util.io.FileSystemUtil.<clinit>(Unknown Source)
        at com.intellij.openapi.util.io.FileSystemUtil.getAttributes(Unknown Source)
        at com.intellij.openapi.vfs.impl.ZipHandler.setFileAttributes(Unknown Source)
        at com.intellij.openapi.vfs.impl.ZipHandler$1.createAccessor(Unknown Source)
        at com.intellij.openapi.vfs.impl.ZipHandler$1.createAccessor(Unknown Source)
        at com.intellij.util.io.FileAccessorCache.createHandle(Unknown Source)
        at com.intellij.util.io.FileAccessorCache.get(Unknown Source)
        at com.intellij.openapi.vfs.impl.ZipHandler.getCachedZipFileHandle(Unknown Source)
        at com.intellij.openapi.vfs.impl.ZipHandler.acquireZipHandle(Unknown Source)
        at com.intellij.openapi.vfs.impl.ZipHandlerBase.createEntriesMap(Unknown Source)
        at com.intellij.openapi.vfs.impl.ArchiveHandler.getEntriesMap(Unknown Source)
        at com.intellij.openapi.vfs.impl.jar.CoreJarHandler.<init>(Unknown Source)
        at com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem.lambda$new$0(Unknown Source)
        at com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem$$Lambda$52.fun(Unknown Source)
        at com.intellij.util.containers.ConcurrentFactoryMap$3.create(Unknown Source)
        at com.intellij.util.containers.ConcurrentFactoryMap.get(Unknown Source)
        at com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem.findFileByPath(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.findJarRoot(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.contentRootToVirtualFile(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.access$contentRootToVirtualFile(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$6.invoke(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$6.invoke(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.compiler.ClasspathRootsResolver.convertClasspathRoots(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.<init>(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.<unknown>(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$Companion.createForProduction(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.createCoreEnvironment(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(Unknown Source)
        at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(Unknown Source)
        at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(Unknown Source)
        at org.jetbrains.kotlin.cli.common.CLITool.exec(Unknown Source)
        at org.jetbrains.kotlin.cli.common.CLITool.exec(Unknown Source)
        at org.jetbrains.kotlin.cli.common.CLITool.exec(Unknown Source)
        at org.jetbrains.kotlin.cli.common.CLITool$Companion.doMainNoExit(Unknown Source)
        at org.jetbrains.kotlin.cli.common.CLITool$Companion.doMain(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler$Companion.main(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.main(Unknown Source)
Caused by: java.lang.ExceptionInInitializerError
        at sun.nio.fs.Util.split(Unknown Source)
        at sun.nio.fs.WindowsFileSystem.<init>(Unknown Source)
        at sun.nio.fs.WindowsFileSystemProvider.<init>(Unknown Source)
        at sun.reflect.NativeConstructorAccessorImpl.<unknown>(Unknown Source)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at java.lang.Class.newInstance(Unknown Source)
        at sun.nio.fs.DefaultFileSystemProvider.<unknown>(Unknown Source)
        at java.nio.file.FileSystems$DefaultFileSystemHolder.getDefaultProvider(Unknown Source)
        at java.nio.file.FileSystems$DefaultFileSystemHolder.access$000(Unknown Source)
        at java.nio.file.FileSystems$DefaultFileSystemHolder$1.<unknown>(Unknown Source)
        at java.nio.file.FileSystems$DefaultFileSystemHolder$1.<unknown>(Unknown Source)
        at java.security.AccessController.<unknown>(Unknown Source)
        at java.nio.file.FileSystems$DefaultFileSystemHolder.defaultFileSystem(Unknown Source)
        at java.nio.file.FileSystems$DefaultFileSystemHolder.<clinit>(Unknown Source)
        at java.nio.file.FileSystems.getDefault(Unknown Source)
        at java.nio.file.Paths.get(Unknown Source)
        ... 41 more
Caused by: java.nio.charset.UnsupportedCharsetException: MS932
        at java.nio.charset.Charset.forName(Unknown Source)
        at sun.nio.fs.Util.<clinit>(Unknown Source)
        ... 59 more

C:\Project\Cloud\github.com\Sample\kotlin\main\main\src\main>

こうやってエラーが出てしまう。

kotlin-compiler-1.3.11.zip

こっちをダウンロードする。
Cドライブ直下に展開して、

環境変数
環境変数

パスを通す。
(それより前にJDK入れたりJAVA_HOME設定したりいろいろやったけど、不要だったかな・・・。)

main.ktに、

こんな風に書いて、

C:\Project\Cloud\github.com\Sample\kotlin\main\main\src\main>kotlinc main.kt -include-runtime -d main.jar
C:\Project\Cloud\github.com\Sample\kotlin\main\main\src\main>kotlin main.jar
ABCDE

C:\Project\Cloud\github.com\Sample\kotlin\main\main\src\main>

コンパイル、そして実行できた。
funの後に関数名、そして、引数をArrayにしているのはいいね。
そうMainClassが必要ない、そして、printlnもSystem.outが必要ない、こういうのが特徴。

Sample/kotlin/main/main/src/main at master · bg1bgst333/Sample · GitHub