【Console Application】基本文法【学習記】
言語仕様とかそういう手合の話🤤
Q.
今度こそ進んだ?
A.
ええもうばっちり今度こそ進んだ🤪
ただ、変数宣言だけで終わっちゃったけど😞
備忘録
Swift の hash `[:]` は型不定?
OC の NSDictionary は NS???? を通せばなんでも行ける?
→変数の宣言の仕方を調べるだけで終わってしまった話
→なんでどの新言語も基盤言語を無視した型宣言するの!🤪
→ JavaScript の連想配列最強説
#Objective_C #Swift #Java #Kotlin
#変数 #typeof
#学習記
変数とか宣言とか
それじゃそれぞれの違うところを調べて行こうかな🤤
基準はそうね、ゆるすぎる JS にしようかな🤪
// JavaScript
let b = true;
let n = 0;
let s = "string";
let a = [false,1,"2"];
let h = {key0:true,key1:-1,key3:"hash"};
書いておいてなんだけど、型宣言式各言語は不利な予感🤤
// Objective-C++
// bool b = true; // 使えなくはないが嫌がらせで BOOL しか受けない物があるかも
BOOL b = YES; // 汎用ライブラリでは bool の方が互換性が高そう
int n = 0;
// String s = "string";
NSString s = @"string"; // [[NSString alloc] initWithString:"string"];
int a[] = [0,1,2]; // C 系なので型混在の配列は特殊な手段が要る(≒基本型混在は使えない)
NSDictionary *h = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES],@"key0"
, [NSNumber numberWithInt:-1],@"key1"
, @"hash",@"key3"
, nil
];
…もしや NSDictionary の key を NSNumber 化すれば型混在配列になるのでは…?🤔
NSBool みたいのが有るのかと思って結構な時間使って調べても見当たらず 0,1 の数値で対応するっぽい感じだった😞
// Swift
var b : Bool = true
var n : Int = 0
var s : String = "string"
var a : [Int] = [0,1,2] // Swift も型混在配列は無理っぽい
var h : [String:Int] = ["key0":1,"key1":-1,"key3":0] // NSDictionary の方が強力?
Swift では連想配列側も型指定なので JS みたいなゆるい値代入で入れ替えたりはできない…のかな😞
[:] で初期化したらできそうな気がしないでもないけど最初の代入で特定するのかも。要調査
Swift で特徴的なのは文末にセミコロンが不要な所。1行に複数書く場合には要るという文献を見た気がするけれど最近は1行に1文未満が基本なのでそうなったのかな、多分🤔
// Java
boolean b = true;
imt n = 0; // 32bit。時代のせいもあるけど long で倍精度の型が使える
String s = "string"; // Java ではプリミティブではないっぽい
int[] a = {0,1,2}; // 初期化の集合が波括弧
Map<String:Integer> h = new HashMap<>()
{{
put("key0",1);
put("key1",-1);
put("key3",0);
}};
Java は連想配列の初期化方法に難が有る様に思う😞
ただ、他の列挙初期化に比べるとカンマ区切りではなく設定関数を通して文として個々に区切れているとこは評価かな🤔
無名関数で無理やり put() を中に入れてる感じで初期化部分は後から書く方が可読性は高いかなって思う🤤
無形関数(?)を使う関係で波括弧が二重になってしまっているのも良くない🙄
// Kotlin
val b : Boolean = true
val n : Int = 0
val s : String = "string"
val a : Array<Int> = arrayOf(0,1,2)
val h : Map<String,Int> = mapOf("key0" to 1,"key1" to -1,"key3" to 0)
Kotlin も文末区切り文字が無い言語🙄
個人的には無いとなんか不安🤤
連想配列の作り方が Java よりも洗練されているかな🤔
それよりもなんで var じゃなく val なの…😞
他と差別化したくて違う語にする文化、いくない😞
ヤーポン法、滅ぶべし(関係ない
まさか変数調べるだけで時間無くなるなんて…🤪
各言語の変数の特徴はだいたいどれも同じで型に強く縛られていると感じるかな🤤
ただ、 OC の NSDictionary は保持する値がオブジェクトなのか NS???? の変換を通すと型が不明のまま値を入れ替えられそうな感じがするかも🤔
Swift は JS 互換が有るからなのか配列や連想配列の初期化が JS にだいぶ似ているのでもしかしたら [:] で JS みたいな強烈な値保持ができたりしないかなって期待が高まる🤤
次回は
順番に今回調べて宣言した型の値を出力するコンソールアプリを作ろうかな🤤
各変数の使い方と取り出し方を調べるから for とか if とか調べる事になるのかな?🤔
helloWorld で args 取り出すのに for やっただろって言われそうだけどそれはそれ🤪