Kotlinでウィンドウアプリケーション入門
Kotlinでやる意味
Javaは最近のプログラミングとして微妙じゃない?っていう。型推論をつけてほしい(切実)
Kotlinの割り切った言語仕様いいと思うの。ネイティブなやつも対応するとかなんとか(詳しくはこの辺)、語彙力。
やることはJava
前回の記事にも書いたようにKotlinは現状JVM上で動きます。なんでJavaですわ。
JavaのウィンドウアプリケーションはSwingっていうヤツを使ってやると実装できます。
今回はSwingの詳細には触れずに必要最低限のコードでウィンドウ表示だけやってみましょう。
実装
import javax.swing.* fun main(args: Array<String>){ JFrame().setVisible(true) }
これをコンパイル実行するとウィンドウが表示されます。ウィンドウを消してもプログラムが終了しないのでコマンドライン上でCtrl+Cとか押して上げる必要があります。
順を追って説明していきます。
import javax.swing.*
ここでSwingを使うよーってやってます。
fun main
コレはまあ前回も言いましたけどメイン関数ですね。実行時に呼び出されます。たぶん基本的なことだから皆大丈夫かな。
わからない人はコメントとかしてくれたら返していきます。
JFrame()
JFrameという、ウィンドウ表示のオブジェクトを生成します。
オブジェクト指向がいまいちわからない人も一応「そういうもんか」とついてきてください。
わからない人は読み飛ばしてください。JFrame()
という部分はコンストラクタになっています。Kotlinの少し苦手なところは関数呼び出しか、コンストラクタかの区別がつかないってとこですかね。newくらいケチってないで付けたい。
ウィンドウは生成しただけでは何の意味もなしません。表示するよーってやって上げる必要があります。setVisible(true)
で表示してます。
引数はfalseで非表示にもなります。
こんかいはこれだけ。 次回以降はもっと広げていきたいと思います。
競プロでKotlinはじめました
Kotlinはじめました
Kotlinとは
JVM上で動くヤツですね。Javaと完全な互換性を持ってて、クラスの流用とかできちゃう優れもの。(JVMはJava Virtual Machineだったはず)
噂によると、単純なJavaと同じだからウィンドウも普通に出せるし作れるとか…。いずれやってみたいです。
環境の作成
Kotlinって、Android StudioとかIntelliJ IDEAとかのIDEが必要っぽかったんですが、コマンドラインのやつもあるらしいってことでそれを。
ここのページから、kotlin-compiler-X.X.X.zipってやつ(2017/11/22時点で1.1.60)をDLしてください。展開したらCドライブとか好きな場所に移してPATHを通してあげてください。
PATHの通し方とかは、調べよう。Windows 10から環境変数どっからいじるのかわかりにくくなってるので頑張れ。
ってことで、PATH通したらコマンドラインから$ kotlin -version
とかで確認してみてください。
Kotlinの基礎の基礎だけ
とりあえずハローワールドだけしときますね。他の書き方はQiitaとかでまとまってるんでそちらを見たほうがいいかと。ちなみに、Java互換なんで個人的にはJavaの勉強が必須ですね。標準入力でScannerクラスとか使うにしても使い方はJavaなんで。
fun main(args: Array<String>){ println("Hello World") }
こんな感じ。メイン関数はクラスに属さないとか、関数はfunで宣言するとか、セミコロンはいらないとか。
これが、例えば「helloWorld.kt」って言うファイルだったとしましょう。コンパイルはこう。$ kotlinc helloWorld.kt
ってかんじでkotlincコマンドで。
コンパイルすると「HelloWorldKt.class」ってファイルが生成されます。んで、ここ躓いたんだけど実行に気をつけてください。
$ kotlin HelloWorldKt
だめな例あげます。$ kotlin ./HelloWorldKt.class
、まあこれはjavaやってる人だったら違和感あるんでしょうね。僕はjavaやっててもふんふんふーんつって躓いたわけですけども。
これで使い方はOKかな。
標準入出力
これだけやっときましょうか。競プロだと必須スキルですからね。
JavaのScannerクラスを使うとしたら次のようになります。
import java.util.Scanner fun main(args: Array<String>){ val scn = Scanner(System.`in`) //Scannerのインスタンスを作成 val s: String = scn.nextLine() //入力を行で取得 val i: Int = Integer.parseInt(s)//Int型に変換 val j: Int = scn.nextInt() println(i + j) }
こんな感じ、定数はvalで宣言できます。察せ。変数はvar。らしいよ。
System.in
だけ注意で、inが予約語?で使われてる関係で上みたいに書かないといけません。
以上で。ちょっと長くなっちゃったけど、なかなか面白いんで皆もやってみよう。
お疲れ様でした。
C#も文字比較で躓いた話
前回の続きっすわ。
前回はPythonでしたが、今回はC#。 C#って、Visual Studioで書くと書ける気になっちゃいますよね。かけないくせに。
まあ前回同様、文字の比較って案外やらないからめっちゃCE(Compile Error)してやりました。
最終的にはこう。
using System; class Program{ public static void Main(string[] args){ string s = Console.ReadLine(); char x = s[0]; char y = s[2]; if (x>y) Console.WriteLine(">"); else if (x<y) Console.WriteLine("<"); else Console.WriteLine("="); } }
結論から言うと、案外C, C++と同じ。 いや、正確には違うんですけどね?
文字列を配列とみなしてインデックス指定するだけでcharに持ってこれて、なおかつそのまま比較できると。素晴らしい。 charをintに変換しないといけないのかなとか考えるだけ無駄って感じですね。
今日はそれだけです。 お疲れ様でした。
Pythonの文字比較で躓いた話
これで躓いたお話です。 この問題、勉強のためにC,C++,Python,Java,C#とかで書いてみたんだけどいくつか躓いたんで一つずつ書いていこうかと。
Pythonの文字型
あるんですかね。よくわからなかった。調べる気にもならなかった。 とりあえずわかったのは1文字ずつの文字列配列にしたら良さそう。
ちなみに、split()
は引数に何も入れないと区切り文字で区切ってくれるらしいです。便利だなオイ。
charArray=input().split() print(i[0] ,i[2])
んで、これをどうやって比較するかなーって。 C言語だとcharの変数にASCIIコードがそのまま入ってるって知ってたんで
if ('A' < 'B')
そのままこんな感じで行ったんだけど。
PythonだとできるかわからんからASCIIコードに変換する命令探してみて、ord()
ってのがあるらしい。
ってことで
i=input().split() x=ord(i[0]) y=ord(i[1]) if x > y: print('>') elif x < y: print('<') else: print('=')
こんな感じになりました。
んで、あとから気づいたんだけどord()
に突っ込む理由がないんじゃね?って試したらほんとにそうだった。
Pythonさんすげぇっす。 ってことでお疲れ様です。 また別の言語のも書きます。
競プロはじめました
競プロはじめました
競プロってなんやねんって人に説明すると、競技プログラミングです。 そのままだね。
はじめた理由としては、友人に誘われたからなんだけど、現時点でその友人よりはかけると思います。たぶん
AtCoderってサービスでやってます。ssssotaで登録してあるはず。見かけたら「お。やってんじゃん」みたいな。
んで、何が言いたいかって言うと、オンラインサービスだからいろんな言語が選べるんだよね。ベーシックなのはやっぱりC, C++, Pythonとかなのかな。友人はC++を推してるんだけど個人的にはCでいいかなって。
まだあまりやりこんでいない点もあるので、なんとも言えませんが。 いろんな言語で1つの問題に挑戦すると発見も多くて。その辺も記事にしていきたいと思います。
お疲れ様です
ハローワールド
技術ブログ開設
私が、中学の頃から憧れていた技術ブログを開設しました。
というのも、昔からプログラムの勉強をしていたのですが独学だったのでとても苦労しました。 私自身が情報を公開し、皆様からご意見をいただくことができたらと思います。
よろしくお願いします。
誰だお前
ssssotaと名乗っておきます。とある情報工学科に所属しておりましてプログラムを中心に勉強したいと考えています。
とはいえ、学校で扱う内容は現時点ではあまりにも作業なので当ブログで扱う内容は自学および趣味的なものになります。タイトル詐欺とか言わない。
触れたことがある言語としては以下のとおりです。偉そうにたくさん列挙してますが、まともに書けるのはごく一部です。
当面の内容
現在Firebaseを利用したブログサービスができないかと考えておりまして、構想中です。
Typescriptを使っているんですが、Javascriptは使ったことがあるものの慣れず進捗が出ない状態です。データ構造なんかも迷っちゃって。
ソースなんかもちょいちょい出していくんでコメントくださるとありがたいです。
よろしくお願いします