X



Kotlin 2
■ このスレッドは過去ログ倉庫に格納されています
0245デフォルトの名無しさん
垢版 |
2017/11/29(水) 21:05:55.88ID:9RrEnJIt
天才
0250デフォルトの名無しさん
垢版 |
2017/11/29(水) 22:09:21.88ID:puYUWHlJ
今やUnix向けの開発者も揃ってVSCodeだもんなあ
開発環境ではMSには敵わないよ
Kotlinは遠からずVSCodeに持ってかれるだろうけど、そうなったらJetBrainsはどうするんだろうね
0251デフォルトの名無しさん
垢版 |
2017/11/29(水) 22:24:40.91ID:UK37Nyfh
アホすぎ
ジェットブレインの開発環境を使ってないのは
IT後進国の日本だけだぞ
0253デフォルトの名無しさん
垢版 |
2017/11/29(水) 22:41:01.71ID:sTR8OUxJ
>>250
> 今やUnix向けの開発者も揃ってVSCodeだもんなあ
を3回くらい読んで何を指してるのかなんとなくわかった
サーバサイドのスクリプト言語プログラミングもVSCodeで行われることは増えた
EmacsでFTPやらSSHやらして一生懸命書いてた頃とは隔世の感はある
(いや、まあ、ぶっちゃけるなら、Emacs+xx-modeがVSCode+プラグインに置き換わっただけではあるが)
VSCodeはElectronを捨てることができた瞬間に勝利が確定する
0254デフォルトの名無しさん
垢版 |
2017/11/29(水) 23:18:26.84ID:WrxHm4nG
>>250
資金力ではMSに太刀打ちできるはずのないJetBrainsはGoogleに買収されるべきなのだろうか。
>>241
むしろMSはJ#の時代から.NETさらには最近のXamarinの買収まで一貫してJavaに敵対的だよね。
>>228
めでたい。
0259デフォルトの名無しさん
垢版 |
2017/12/02(土) 18:09:11.30ID:hkowUbEW
IntelliJをバージョンアップしたらSpekテスト設定のSpec欄ヨコのSearch by Nameが動かなくなった
これまではモジュール適当に指定したら勝手に探して候補出してくれてマウスぽちぽちで済んだのだが、なんかspec欄を自力入力で埋めないといかん
それともこれは普通は使わない所だったのだろうか
0260デフォルトの名無しさん
垢版 |
2017/12/03(日) 14:17:27.57ID:KOJqmKfW
多分日本で俺だけだろうけど、
Kotlinの公式PDFはフォントのAlignがずれてて
読み始めて1分しない内に直視に耐えられなくなってしまう…。

直そうと頑張ってみたが有料ソフト使うしかないみたいで諦めた。
しかし治ってたら嬉しいなと定期的にダウンロードし直してしまう。
0261デフォルトの名無しさん
垢版 |
2017/12/03(日) 16:45:59.74ID:CjASQeE2
"sourcefiles"という名の.ktソースファイル名一覧ファイルを作り、

kotlinc @sourcefiles

を走らせると、

error: source file or directory not found: @sourcefiles

が画面に表示されてしまいます。

javac @sourcefiles
scalac @sourcefiles

に相当する機能はkotlincには無いのでしょうか?
0262デフォルトの名無しさん
垢版 |
2017/12/03(日) 19:45:07.83ID:daSNjmBL
質問の答えは知らないので他の人に任せるけど
ビルドはkotlinc直よりGradle使うことを勧める
0263デフォルトの名無しさん
垢版 |
2017/12/03(日) 20:02:35.94ID:8YyVv9+M
またそんなこと言って。
あなたはいつも他人任せね。
いいかげん私も待ちくたびれちゃうわ。
0265デフォルトの名無しさん
垢版 |
2017/12/03(日) 22:21:28.14ID:8rz+kd7O
だって女と思わせた方が答えが出やすいんですもの
0267デフォルトの名無しさん
垢版 |
2017/12/03(日) 23:18:52.67ID:CdnEE9AY
Gradle, Vagrant は、yaml, XML, JSON のような、単なる設定ファイルではなく、

それ自体が、Groovy, Ruby の、クロージャ・ブロックで囲まれた、
スコープを持つソースコードであるから、変数宣言や処理も書ける
0268デフォルトの名無しさん
垢版 |
2017/12/04(月) 00:39:28.22ID:1VMjnc7g
>>265
逆におっさんにしかみえん
0270デフォルトの名無しさん
垢版 |
2017/12/04(月) 18:54:32.14ID:nKJqxEpH
うふ
0271デフォルトの名無しさん
垢版 |
2017/12/04(月) 20:08:06.27ID:4Cie7nT5
(´・ω・`)うふふ
0272デフォルトの名無しさん
垢版 |
2017/12/04(月) 20:18:46.16ID:s6dQomLc
リアルの女と接点がなく、妄想で女はこうだろうと決めて話してるのがわかる
昭和生まれのジジイですわ
0275デフォルトの名無しさん
垢版 |
2017/12/04(月) 22:11:31.07ID:GD7rAYrg
マジレスマンつまらないわね
0276デフォルトの名無しさん
垢版 |
2017/12/05(火) 00:40:05.91ID:AwrHp2sF
(´・ω・`)ほんとよね
0277デフォルトの名無しさん
垢版 |
2017/12/05(火) 00:49:05.55ID:6UYDf8NM
Kotlin Advent Calendar がAndroid以外の話題多めだな
ここでナチュラルにIntellijIDEA の話題だしちゃったけど
Android以外の人も IntellijIDEA を買って使ってるのかねえ?
0280デフォルトの名無しさん
垢版 |
2017/12/05(火) 09:05:47.31ID:lXQHSkZJ
いやあ、しかし楽にはなりそうだからねえ、流行ると思うけどねえ。
0285デフォルトの名無しさん
垢版 |
2017/12/10(日) 21:26:30.38ID:x9bbNSCq
cmで始まってdpで終わってるからどこかのレビューページから飛んだURLだと思うんだが
なにもしないとcm_cr_dpなんだけどな
cpが入ってるってことは「この商品を見た後に買っている」を1回表示してるのかもしれない
0286デフォルトの名無しさん
垢版 |
2017/12/10(日) 21:39:59.60ID:J3Wk9KR3
cm_sw_ ... _dp はシェア用URLの生成形式だね
ツイッター用ならcl_twで超わかりやすいんだがr_cp_epはなんだろう
0287デフォルトの名無しさん
垢版 |
2017/12/11(月) 06:07:16.82ID:Vu+apVrY
>>284
それはわからんが>>278のリンクはAmazonで「シェアする」のリンク使って出てきたURLだよ。誰がやっても同じになると思う。
0288デフォルトの名無しさん
垢版 |
2017/12/11(月) 23:34:54.18ID:5wm6MhH6
lateinit var value: Int
って書いたら'lateinit' modifier is not allowed on properties of primitive typesのエラーになるんですが、
どう書き直したらいいんでしょうか

var value: Int? = null
って書いて、
if (value == null) {
  value = initValue()
}
ってするしかないんでしょうか。
0293デフォルトの名無しさん
垢版 |
2017/12/11(月) 23:58:47.24ID:jDa4LF1V
>>291
自分はスタートブックを推す。
Javaを知っていることを前提としない入門書の存在を自分は知らない。
0294デフォルトの名無しさん
垢版 |
2017/12/12(火) 00:03:08.61ID:UCmbxn8n
>>292
慌てて修正したらlazy落としていたorz orz
var value by lazy { initValue() }
連投申し訳ない。これで違っていたら目も当てられんが、それもすみません。と誤っておきます。
0296デフォルトの名無しさん
垢版 |
2017/12/12(火) 00:45:23.57ID:GdvZGdbs
>>291
Kotlinスタートブック -新しいAndroidプログラミング、長澤 太郎、2016

一番良いもクソも無い。
この1冊しか出ていないだろ
0299デフォルトの名無しさん
垢版 |
2017/12/12(火) 04:02:58.46ID:0dOBEVV8
アスペは質疑応答解説に使えねーなーもう

>>288
なぜlateinitを使うかというと「初期値というものがうまく定義できなくてうまく初期化できないから」だ
※実際にはjavaでprimitive typeであるものはnull代入できないからという理屈なのだが知らなくていい
Intとかは0とか-1とかで初期化できるだろ、最初にvarで0や-1入れとけ
Nullableもnullで初期化できるからlateinit使わずにただのvarでnull入れとけ

で、どーしても遅延初期化を使いたいなら
var value: Int by Delegates.notNull<Int>()
とか書くと形式上遅延初期化になる。むろん二度手間だが、遅延初期化という目的は一応達成される
こんなごっついことせずに素直に0とか入れておいたほうがいいんじゃねーかなと思った感覚は正しい。0入れとけ0

あとはちらっと出てたけどby lazyで
val value: Int by lazy { initValue() }
と書くことでも一応達成される。こっちだとvalで書けるので好まれることが多いみたいだね
0300デフォルトの名無しさん
垢版 |
2017/12/12(火) 06:12:22.97ID:GdvZGdbs
長澤太郎の本に書いてあるけど、

lateinit は、DI(Dipendency Injection)か、ユニットテスト時か、

フレームワークが自動的に初期化すると、不都合な場合に使う
0309デフォルトの名無しさん
垢版 |
2017/12/14(木) 07:40:22.43ID:v/ZRkoO2
>>308
デフォルト値はコンパイラが定義参照してるだけで、
型にもインスタンスにも持って無いから変数に入れた時点で使えないよ

fun f1(n: Int=1) { print(n) }
val f2 = ::f1
f1() //OK
f2() //コンパイルエラー
0312デフォルトの名無しさん
垢版 |
2017/12/14(木) 09:49:51.95ID:DkrsR4qN
Cでググってもノイズが拾われてくる率が高い
他のCと間違われてるんじゃないのか
0313デフォルトの名無しさん
垢版 |
2017/12/14(木) 10:12:12.59ID:rSG8ExGM
Cの半分はC++という時代があったからな
Cの半分はC#とC++ということでも不思議はない
C sharpならC#確定なのだが
0314デフォルトの名無しさん
垢版 |
2017/12/14(木) 10:35:46.55ID:LuQDs4YA
C++はcocos2dやUnrealでのゲーム開発とかあるけどCはなんだろうな
廃れることはあり得ないけど
0315デフォルトの名無しさん
垢版 |
2017/12/14(木) 11:38:25.42ID:DkrsR4qN
機械学習とかロボティクスとか自動運転とかがメディアで取り上げられるようになって学生にプログラミングへの関心がいっそう高まって教育現場での採用が増えてるのかもしれないな
就職にも有利なスキルだろうし
もともと人気の高い言語だし本格的なプログラミングの登竜門的な立ち位置の言語でもあるし
0317デフォルトの名無しさん
垢版 |
2017/12/14(木) 21:38:11.42ID:5ZTCzvqn
(IoT)

こうすると顔文字になるよね
0318デフォルトの名無しさん
垢版 |
2017/12/14(木) 22:23:38.53ID:55Q0ymnI
検索エンジンで+"C programming" で検索した結果参照してるだけだからな
単にデータとしてうんこオブうんこだ
githubやstackoverflow読んでるIEEEのランキングのほうがなんぼかマシ
0319デフォルトの名無しさん
垢版 |
2017/12/19(火) 10:24:09.99ID:f5KBk+Xr
Javaの無名スコープを表す構文が無いことから調べていってみたけど
色々と良く設計されてると感心した

構文が無い代わりにrun関数がある
ラムダ生成コストやブロック内でのreturnが気になったけど
inline関数に渡すラムダはそれごとインライン化されるため
コストも無くreturnはちゃんと呼び出し元関数から抜ける

そうするとinlineでない関数にラムダを渡す場合のreturnとで
区別出来なくて危険かと思ったけど
inlineでないラムダではラベル無しreturnが禁止されていた

returnにラベル必須だと面倒ではと思ったけど
最後のステートメントが戻り値になる仕様だからむしろ楽だった
0320デフォルトの名無しさん
垢版 |
2017/12/19(火) 10:25:19.69ID:f5KBk+Xr
■Java
 int f(){
  {
   String a = "a";
   if(a.length() < 10){return 1;} // fから抜ける
  }
  return 2; //ここには来ない
 }

■Kotlin
 fun f(): Int {
  run {
   val a = "a"
   if(a.length < 10){ return 1 } // runでなくfから抜ける
  }
  return 2 //ここには来ない
 }
0321デフォルトの名無しさん
垢版 |
2017/12/19(火) 10:28:08.70ID:f5KBk+Xr
fun fcall(f1: () -> Int): Int = f1()

fun f(){
  val a = fcall {
    val a = "a"
    if(a.length < 10){ return@fcall 1 } //ラベル付き
    else { 2 } //returnキーワード無し
  }
}
0322デフォルトの名無しさん
垢版 |
2017/12/20(水) 02:29:53.61ID:Y+OkZrNr
マップの値を条件判定に使いたいんだけど、Nullableをどう扱って良いのかわからない...

val map = mapOf<String,Boolean>("hoge" to false,"fuge" to true,"piyo" to false)

// ↓こんな感じで書きたいが、Nullableなので怒られる
if (map["hoge"]){/*処理*/}

//---------- 解決策 ----------
// @強制的に!!でNotnullにする。でもなんか気持ち悪い。
if (map["hoge"]!!){/*処理*/}
// Aエルビス演算子を使う。しかし、IDEからBの書き方を提案される
if (map["hoge"] ?: false){/*処理*/}
// B凄いバカっぽい。ていうか、これOKで一番上ダメなんだ...
if (map["hoge"] == true){/*処理*/}

なんか、どれもしっくりこない。どうするのが正解なの....
誰か教えて!お願いします!
0323デフォルトの名無しさん
垢版 |
2017/12/20(水) 03:07:01.09ID:vJEKLhBA
if (map.getOrDefault("hoge", false)) { ... } とか。
うーん。なんか変だね。mapOf では nullable かどうか判定しているのに get 時には nullable かどうかの情報が抜け落ちているような。
0325デフォルトの名無しさん
垢版 |
2017/12/20(水) 03:15:09.91ID:O14cUYGW
知らんが、kotlinみたいな言語だとキーが無いときの処理を適当にごまかすわかにはいかんだろ
0326デフォルトの名無しさん
垢版 |
2017/12/20(水) 03:31:33.35ID:nn3v7K50
>強制的に!!でNotnullにする。でもなんか気持ち悪い。
>if (map["hoge"]!!){/*処理*/}

そもそも、map は、そのキーが存在しない場合もあるのが、当たり前だろ。
そのキーが存在するかどうかを、チェックするメソッドもある

君が仕様・設計を考えるんだ。
1. そのキーが存在した場合の処理と、
2. 存在しなかった場合の処理

初心者は、強制変換の使い方をわかっていないのだから、!! を使うな
0327デフォルトの名無しさん
垢版 |
2017/12/20(水) 03:56:24.26ID:MahKH8pr
>>325
+1
「知らないキーでmapに問い合わせたときの結果はnullになることがある」問題をコード的になんとかする必要がどうしてもある
これは本当にどうしようもないので、どっかでKotlin(実際にはIDE)に知らせる面倒を許容するしかない
ポイントとしては面倒でも一旦変数にぶち込むこと。これですべてうまくいく

// checkNotNullの書き方だけ覚えればいいので最近全部これで書いてる
val mapValue: Boolean = checkNotNull(map["hoge"]){ "map does not have key:<hoge>" }
if (mapValue) { doSomething() }

// またletをそんな用途に使って
map["hoge"]?.let{ doSomething() }

// 考え方がJavaっぽい(偏見)変数に入れないとnullチェックした履歴保持できないよ
val mapValue = map["hoge"]
if (mapValue!= null && mapValue) { doSomething() }

// ほら、Kotlinの人はなんでもかんでもwhenで書きたがるから
when(map["hoge"]){
null -> println("ぬるぽ") // なくても動く
true -> doSomethingTrue()
false -> doSomethingFalse()
}
0328デフォルトの名無しさん
垢版 |
2017/12/20(水) 04:24:12.03ID:MahKH8pr
寝起きで書いたら!=がくっついた
if (mapValue != null && mapValue) { doSomething() }
まだ頭寝てるので動作チェックしてないから細かいとこは適当に直したりしてくれ

>>326
安易に nullableValue?.let{ ... } を使って欲しくないのも似たような感じ
今回で言うと現在のmapに"hoge"が登録されていることの保証はどうするんだろうと思う
ぬるぽ出ると追うのもしんどいわけでさ
1行で済むし動作にも影響らしい影響はないんだから脳死状態で checkNotNull(...){ "やべえhoge登録されてねえ" } とか書いとくのおすすめしたいわ
0329デフォルトの名無しさん
垢版 |
2017/12/20(水) 07:46:04.79ID:nn3v7K50
map, hash は、集合の概念だから、
集合A に属するか属さないか、のどちらかの状態をとる

1. そのキーが集合A にあれば、値が取得できる
2. そのキーが集合A になければ、値が取得できない

1, 2 で、君がどういう処理をするか、仕様・設計を決めるのは君!
0331デフォルトの名無しさん
垢版 |
2017/12/20(水) 12:00:57.83ID:f5FKKl5l
Bがバカっぽいと感じるのは
真偽値 == 真偽値 だと勘違いしているから

実際には2つのNullableTypeの等値比較
0332デフォルトの名無しさん
垢版 |
2017/12/20(水) 13:02:21.99ID:G3r13eVw
if(map.getValue("hoge")){/* 処理 */}
これで基本的にキーが存在しないと例外に行くしシンプルだね
0333デフォルトの名無しさん
垢版 |
2017/12/20(水) 13:25:19.85ID:g9yiCifS
直感的にはおかしく感じるな。(最初結果見た時は驚いたw)
https://paiza.io/projects/zLCe3AYlPO9luQp7z2NaIw
しかしクラスの参照同士の比較なのでこれで良い。
0334デフォルトの名無しさん
垢版 |
2017/12/20(水) 13:51:27.51ID:cc5ffQEu
322です。
こんな速くレスいっぱい貰えるとは....皆ありがとう!
基本的にNullチェックは必須なんだね

>>331
そういうことか!あくまで等値比較なのかー

>>327
>感が方がJavaっぽい
これやったんだけど、あんまりキレイな感じしないし、何よりJavaっぽくて....

>>332
そのメソッド知らなかった。使ってみます。
0337デフォルトの名無しさん
垢版 |
2017/12/20(水) 15:20:49.03ID:g9yiCifS
>>335
not false が true でない?
じゃあなに?
0339デフォルトの名無しさん
垢版 |
2017/12/20(水) 16:17:54.73ID:f5FKKl5l
>>337
>>333>>335のコードが示すように
Nullable(null)もStringも真偽値ではないため
falseとtrueどちらにも等値でない

falseでない真偽値はtrueだが
falseでない値はtrueとは限らない

「True, null」だから違和感が有って
「not false, null」なら無かったのでは
0340デフォルトの名無しさん
垢版 |
2017/12/20(水) 16:28:57.34ID:f5FKKl5l
>>333
リンク先のコード消えてるよ

同じ接続元・同じURLで開くと変更モードになるようだから
「新規コード」を押してから扱わないといけない
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況