System.out.println("またJavaの季節がやってきた!" + 2);
■ このスレッドは過去ログ倉庫に格納されています
去年の今頃Java学習開始するも挫折
しかし不屈の闘志をめらめらと燃やしながら
そびえ立つ岩壁にいどむため、再びこの地にやってきたのだ!
プログラミング歴は独学Cチョビッツ+独学VBA少々
きょうかしょ
https://www.amazon.co.jp/dp/484433638X
スッキリわかるJava入門 第2版 (スッキリシリーズ) こういうでかい数字はjavaだと扱ったことないからわからんのだけど
難しいんではないのか
すごいとおもたぞ この対話シェルとやらは、簡単なチェックのために使うのはよさそうだが
いろいろと学習上誤解を招きそうな機能だな
多言語やってきたおれは、2と打ち込んで実行すると2が表示されることに違和感を感じることができるが
全くの初心者はそれが当たり前だと思っちゃうよな
いや、ある意味学習が捗る部分もあるのだけれども 論理演算子はVBAと同じか
and
or
not
if 文は条件はカッコなしで文末にコロン :
ヘッダーとスイート 対話シェルじゃなくてpyの方に書いていくことにしているのだが
def ppp(a, b):
return a + b
print(ppp(2, 5))
こういうの書くと関数のあとは2行は空けろとか言ってくる
Pythonは空行とかタブとか五月蠅いのな うわ、行空けすぎるとおこられるw
あと、関数に渡す引数のデフォルト値設定で
def ppp(n = 1):
ってやったらスペースいれるなって怒られる
def ppp(n=1)
にしろだと なるほどねー
1/3ぐらい読んでみたけど、
Pythonはわかりやすい、悪く言えばいい加減な感じ
今日は終わり! 今日はhtmlの基礎
テキストは
「これからWebをはじめる人のHTML&CSS、JavaScriptのきほんのきほん」
ここに書いてあるHTMLやらCSSの簡単なコードをとりあえず
ぱぱぱぱぱぱっと書けるようにしていく
やったことないわけではないんだけど、
JavaScriptやその先のJavaにつなげるために
もう少し記憶を堅いものにしておく ふぁ〜い
HTMLもCSSも、「覚える」ってことをしたことがなかったので新鮮
ぴっちぴちです
今日は用事あるのでここまで >>290
pythonはインデントでスコープを決めるからね
でも文中の空白は問題なかったはずやが
個人的にpythonはあんま好きやないな
科学技術計算や深層学習の分野では強いけどアプリ作るとなるとピンとこん
ワイはjavaでデータベース使ってウェブサイト制作なんかは一通りできるようになったっから、Androidアプリ作るためKotlin勉強しとる
でもワイのノーパソでAndroidStadioのエミュレータ動かすと重すぎて作業できん
新しいPC欲しいで マルチモニタのデスクトップでシコシコ書いてるわ
ブラウザでググりながらが基本なんで
ノーパンは厳しいな
モニタもっとでかいのに取り替えようかとも思ってるぐらいだ
web系のプログラミング始めると
レンタル鯖とか興味湧いてくる
無料もあるけど@500円/月でよさそうなの借りられるし HTML・CSSのテキスト
テキスト通りの流れでVSCodeにカキカキ
しっかり覚えたわけじゃないけど、難易度は低いので
大体なにができるのかざっくり理解出来ていれば
あとはググったりして再現できそう
正直いうとこれつまんねぇのな
HTML/CSSの部分は一通り流したので
JavaScriptの部分をこれまた流し読みをしてみた
Javaで基本やってると大した事ないのな
匿名クラスのような使い方も出てきてるし
JFrameでやってたEvent処理の知識が生きそう
JavaScriptは一時期Javaと近い所にいたようで、似た部分が多くて勉強しやすそうだ Javaの将来性があれなんで、C#の本も買ってある
どちらかに限定しないで両方やればいいじゃんってゆる〜く考えてる
C#はwidowsアプリに強そうなんで、軽く何か作れるレベルまでやってみたい
んでJavaと比べてみたい C#はVSCodeでも開発できるんだけど
この際Visula Studio 2017 Communityを入れる事にしよう
オプションでインスコできるものがいくつかあるんだけど
全部チェック付けたら20GB越えるみたいだ
SSDの容量食いそうだけどまぁいいか 「独習C#新版」
ちょいと読んでるんだけど
Javaとやたら似てるな
namespaceというのは初めてだけど
packageみたいなもんかこれ
●Java
System.out.println("hello," + name);
●C#
Console.WriteLine("hello, {0}", name);
プレースホルダー使うところがC系っぽい感じする
Cでもそんなことやってたような(忘れたけど
でもJavaでも位置揃えのために実践編でやったな オブジェクト指向を勉強するのにJavaは適当で
特にスッキリシリーズは初学者にぴったりと聞いたんで使ってたんだけど
その通りだな
このC#のテキストは初学者にとっては厳しいんじゃないか
少なくともスッキリの系統だった教え方と比べると難易度高そう
最初から詰め込みすぎてる
逆に基本がわかってる多言語経験者にはよさそう C#が初心者にとって向いてる点は、
ざっとみた限りではどの参考書もVisualStudio Communityの導入と
使い方を紹介して、これを使って学習を進めてるところだな
スッキリでは統合環境の説明が薄いせいで自分でeclipseの使い方を調べないといけなかった
初心者であっても統合環境がないと、試行錯誤するのに不便すぎる
VisualStudioはビルドすると勝手にexeが実行されてコマンドプロンプトが立ち上がる
プログラミングは最終的な実行ファイルを目にしないとやった感じがしない
そういう点でもいい
windowsユーザーにとってはやはりマイクロソフト製品は親和性が高く感じる C#はJavaとCを足して二で割ったような言語だそうだ
三項演算子とか出てくると、はるか昔にすこしだけCをいじった時の記憶が戻ってくる
Javaっぽいんだけど、Cの話がちょくちょく入ってくる
どちらも多少やったことがあるおれにはぴったりなのかもしれない
独習の3章まで読んだ
全くの初心者ではないんだけど、内容が重めだから復習しないとすぐに知識が抜けそう
スッキリでいえば入門編と実践編が合体してるような感じだ C#はメインメソッドは
Main
と書かないとダメなんだな
Javaみたいな
main
だとダメ
あと、文字列比較では
Javaと違って
==
を使う public static void main(String[] args)
public static void Main(string[] args)
微妙に違うのはやめて欲しいわ 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b) 独習C#、1/4ぐらい読んだ
読んだとか言っても頭に入ってなかったら意味ないんで
今の5章終わったらもう一度最初から読み直すか
忘れちゃってる部分が多すぎると行き詰まる >>53の最短一致のことも書かれてるな
網羅性が高いな、このテキストは。
しかし文字列操作分野は重い
Javaでも重かったが独習C#はさらに重い
Javaやってなかったら挫折コースまっしぐらだ
コレクションまだやってないのに出てくるし
まさかのラムダ式まで出てくるし ふむむ
VisualStudio で Ctrl+F5 で実行したあと、
コマンドプロンプトを閉じると、フォーカスが出力ウィンドウに移ってしまう
コードエディタに戻ってコードの編集を続けたいのだが
マウスを使って戻すのがめんどくさい
ctrl+tab でコードエディタに戻る事ができる 机の上にキーボードおいてカチャカチャやってると深夜だと結構うるさい
タオルを下に置いたら劇的に音が小さくなった
これはいい Javaでファイルやらstream系のクローズを自動化する書き方があったが
C#も同様の方法がある
独習C#では最初からこの方法で教えている
●C#
using () {}
●Java
try () {} using (var writer = new StreamWriter(@"../../data.log")) {}
で2つ上のフォルダにファイル作成
ドット2つ+/ で上のフォルダ
ドット1つ+/ で現在のフォルダ
ファイル操作の練習するわけだけど
exeが作られているフォルダの階層が深いから
exeよりちょい上の方にテスト用のファイルを作る事にする 文字コードはほんとやっかいだ
ぐぐるとHTMLではUTF-8を使えと書いてある
これが主流だと。
でもPC上のファイルを開くとSJISしかない
この差は一体なんなんだ
これはJavaでも遭遇した問題だ
ちなみにSJISと判断したのは自分が使っているエディタで開くとそう表示されてるからだ
さらにぐぐってwindowsのメモ帳での文字コードの扱いを調べる
メモ帳では 「名前を付けて保存」 で文字コードを選択して保存ができるようになっている
選択肢にはSJISなどというものはない
ANSIとやらで保存するのがデフォルトのようだ
ANSI
日本語 Windows で ANSI と呼ばれているのは CP932 であり、
これは Shift_JIS が拡張されたもの
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1490895514
SJIS
シフトJISコードは、SJISとも呼び、Microsoft社が決めたコードで
Windows95やMS-DOSやMacなどで使用されています。
http://ash.jp/code/code.htm
ざっくり捉えると、ANSIもSJISもShift-JISということか
ウェブ上ではUTF-8を使えといいつつローカルではShift-JISがデフォルトとは。
でもって、C#でもJavaでもUTF-8が標準的な扱いとなっている
そのためローカルのテキストファイルを実験台として開くと、文字化けの問題が生じる
文字化け回避手段はこんなところか
メモ帳の別名保存によりUTF-8を選択すると
自分の使っているエディタで開いた時にりUTF-8と表示されている
このテキストに日本語を書き込んでから、C#のStreamReaderで開いてみると文字化けしない
もしくは、StreamReaderのインスタンス生成時コンストラクタに
Encording.GetEndording("SJIS")
を渡すと文字化けしない StreamWriter に Encording.GetEndording("UTF-8") を渡して作ったファイルを使ってもおk
その他
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11160634546
日本語 Windows 9x 系列は、システム内部、DOS プロンプト、
ファイルシステム(FAT16/FAT32)などがほぼ CP932 で統一されていました。
対して、Windows 10/8/8.1/7/Vista/XP/2000 などの
現在主流になっている Windows NT 系列は、ちょっと話が複雑になります。
まず、OS のシステム内部は Unicode UTF-16 に統一されました。
DOS プロンプトは廃されましたが、代わりに搭載されたコマンドプロンプトは、
未だ CP932 を標準で使います(切り替えは可能)。
ファイルシステム(NTFS)も Unicode UTF-16 を使うようになりましたが、
FAT32 は使用可能であり(この場合ファイル名は CP932 になる)、
またファイル内容は CP932 だったり Unicode UTF-8 BOM有りだったり
Unicode UTF-16 だったりします。
https://laboradian.com/char-encoding/
Shift_JIS
Windows の「メモ帳」で何か文章を書いてそのまま保存すると、
文字エンコーディングは「Shift_JIS」になり(厳密には CP932)、
改行コードは「CR + LF」になります。
UTF-8
Unicodeという文字コードを使って、文字を表現する方式の1つです。
現在(2017年)、ウェブサイトの多くは「UTF-8」を使っています。
Shift_JIS では、英語・日本語以外の文字を使うことができませんが、
UTF-8 であれば様々な言語の文字を一緒に使うことができます。 × encording
○ encoding
コードの補完機能であるインテリセンス(マイクロソフトの造語か)
頼りっきりになっているとスペル間違えて覚えてたりするんでよくない
eclipseにも補完機能あったけど、わざと手打ちしてた
C#でもそうした方がよさそうだわ
英単語思い出すきっかけにもなるし ファイル操作で、テキストファイルの読み込みやってるんだけど
Javaみたいに
FileReader fr = new FileReader("test.txt", FileMode.Open);
StreamReader sr = new StreamReader(fr);
でもいけるし
StreamReader sr = new StreamReader("test.txt");
でもいけちゃう
Encoding.GetEncoding("SJIS")
はどちらのケースも StreamReader に渡す
C# は、こういう方法もOKだし、ああいう方法もOKだよってのが多いような >>315
間違えた
修正
FileReader fr = new FileReader("test.txt", FileMode.Open);
↓
FileStream fs = new FileStream("test.txt", FileMode.Open);
>>257と同じで、Writer/Reader が入ると文字ストリームかな
FileStream はバイトストリーム
NetworkStream
MemoryStream
もバイトストリーム Console.WriteLineに渡す文字列だけど
変数混じりの場合、Javaと同じような記述方法でもいけるんだな
string st = "あああ";
Console.WriteLine(st + "と叫んだ");
みたいな感じ
こんな風↓しかダメと思ってた
Console.WriteLine(@"{st}と叫んだ"); Console.WriteLine(Math.Pow(3, 300));
結果
1.36891479058588E+143
>>285と比較すると、しょぼ! 1/3読んだけど
このまま先に進んでもスッカスカな知識になるんで
復習に入るか
覚えないといけない量はスッキリ1冊分ぐらいありそう >>318
そりゃMath.powの戻り値はdouble型やからな
javaだとlong型の最大値を超える計算はBigInteger型使ってnew BigInteger("3").pow(300)で可能やけど、C#でも似た感じでできるんとちゃう?
一見するとPythonの方が便利に思えるけど、どのくらいメモリを食うかわからんちゅうことやから、システム開発なんかには不向きなんやな テキストのちょい先でBigIntegerはやったけどね
そもそも目的というか得意としてる分野がハッキリしてるというのがいい
言語ごとに特徴が明確なら選択しやすい intの範囲ぐらい正確に覚えても罰は当たらないだろう
まいなすにじゅういちおくよんせんななひゃくよんじゅうはちまんさんぜんろっぴゃくよんじゅうはち〜(絶対値1つ小さいプラス値)
-21 4748 3648 +21 4748 3647 テキストにいろいろ書込みながら
きちんと復習してる
今日はおしまい int i = 128;
Console.WriteLine((sbyte)i);
結果:-128
これの説明で 「残りのビットを反転させる」 なんていう説明が出てくる
この辺を数学的にしっかり学んだ人はなんてことはないんだけど、
そうでないと不思議な感じがする
突然おもちゃを扱うような雑な操作が唐突にあらわれたような印象を受ける
127 (10)
01111111 (2)
127 (sbyte)
128 (10)
10000000 (2)
-128 (sbyte)
8bitで表した2進数の最初のビットは符号を表現するために使われる
これが 1 になったら、つまり10進数で言えば 127 から 128 になった時、
残りのビットを反転させてから、10進数にして 1 を加えてマイナス記号つければ
sbyte にキャストした値になるというものだ
10000000 の最初の 1 を除いた7つの 0 、0000000 を反転させると 1111111 となる
これは10進数でいうと 127 で 1 加えてマイナスを付けると -128
10000000
↓
0000000
↓
1111111
↓
127
↓
-128 この気持ち悪い唐突感を取り除くためにぼけぇと考えてたんだけど
これは2進数を持ち出さないでも10進数の範疇で自然なイメージを持てるのではないかと
そういう結論に至った
つまり、10進数で桁が変る瞬間、例えば 99 100 のような場合
上と同じような変遷を書くことができる
100
↓
00
↓ ←ここが「反転」の操作を10進数で表現したもの
99
↓
99
↓
-100
反転とは補数の関係を使った変換なのでこれでいいだろう
数直線で考えたとき、0 から順にたどっていって 100 になった瞬間に、
ぽ〜んと 0 を挟んで真反対の側に飛ばされる感じがわかる
101 を同じように考えると
101
↓
01
↓
98
↓
98
↓
-99
なるほどと 2進数というスイッチカチャカチャの世界を、人が常用する10進数に重ねていくこの作業は見事だ
コンピュータが作られていく過程で試行錯誤を重ねてこういうものを作ってきた人たちがいたんだなと まだテキストで勉強してない分野をJavaと同じように書いてどこまでいけるか試してた
コンストラクタ付きのクラス作って、インスタンス化したり。
同じソースファイル内に定義したクラスをインスタンス化する場合であっても
コンストラクタにpublicがついてないとエラーがでるのな
この辺Javaより厳しい Java
文字列の長さを求めるには String.length()
配列の長さを求めるには 配列.length
C#
文字列の長さを求めるには String.Length
配列の長さを求めるには 配列.Length
() がついてりゃメソッドね、で終わるんだけどね
C#だとメンバの1つにプロパティというものがあって
セッターゲッター的な役割を担うようなことが書いてあった
どうやらC#の Length はこれっぽい
https://docs.microsoft.com/ja-jp/dotnet/api/system.string.length?view=netframework-4.7.2#System_String_Length
Javaの配列の length はもっとわかりにくそうなんで放置^^ string st1;
string st2;
st2 = st1 + "あああ";//未割り当てのローカル変数'st1'が使用されました。
string st1 = null;
string st2;
st2 = st1 + "あああ";//OK!
string st1;
string st2;
st2 = null + "あああ";//OK! 中身がnullだからどうのこうのの話でもないようだ
とにかく初期化されてないものを使うなみたいな?
st2みたいに代入される変数が初期化されてないならまぁいいやとか 独習C#80ページのコードを書いていて気づいたわけなんだけど
テキスト上ではstringの初期化として "" を使っている
var st = "";
string st = "";
みたいな感じで。
一応初期化は必ずやれと35ページに書いてある Console.WriteLine(Math.Floor((0.7 + 0.1) * 10));// 7 ダメ
double num2 = (0.7 + 0.1) * 10;
Console.WriteLine(num2.ToString("G16"));// 7.999999999999999
Console.WriteLine(Math.Floor((0.7 + 0.2) * 10));// 9 OK!
double num1 = (0.7 + 0.2) * 10;
Console.WriteLine(num1.ToString("G16"));// 9
浮動小数点数に計算誤差がでちゃう例なんだけど
出る場合と出ない場合を予め区別して把握するのは難しそうだ //正の小数・正の整数を2進数に変換
using System;
using System.Text;
using System.Text.RegularExpressions;
public class Program
{
public static void Main(string[] args)
{
const int Digit = 16;
string input = Console.ReadLine();
Regex rgx = new Regex(@"^([1-9]\d*|0)(.\d+)?$");
double num = 0;
if (rgx.IsMatch(input))
{
num = Double.Parse(input);
var num1 = Math.Floor(num);
var num2 = num - num1;
string num1_byte = Convert.ToString((int)num1, 2);
double a1 = 0;
StringBuilder sb = new StringBuilder();
sb.Append(num1_byte);
sb.Append(".");
for (var i = 0; i < Digit; i++)
{
a1 = num2 * 2;
a1 = Math.Floor(a1);
sb.Append(a1.ToString());
if (a1 >= 0)
{
num2 = num2 * 2 - a1;
}
else
{
num2 = num2 * 2;
}
}
Console.WriteLine(sb.ToString());
}
else
{
Console.WriteLine("適正な数値ではありません");
}
}
} いちいち紙に書いて計算してたけど
あほらしくなって自分で作ってみた
正規表現だけはコピペしてズル
小数部分の桁数は定数で指定
対象となる10進数はキーボードからの入力 独習の「同一性(Identity)」=スッキリの「等値(equality)」
→同じオブジェクトを参照、つまり完全一致(==)
独習の「同値性(Equivalence)」=スッキリの「等価(equivalent)」
→オブジェクトが同じ値をもっていれば十分(equals)
この辺業界で統一した用語使って欲しいもんだ
どちらかというと、独習の用語の方が直感的で「スッキリ」してる感じする >>337は
独習88ページ
スッキリ実践編115ページ Equals の s は三単現の s で
SequenceEqual に s がついてないのは配列という複数要素の一致を要求してるからなのかとか
ぼけぇ〜と考えてたが
でもSequence自体は単数だよなとか
まぁいいや bool? b = true;
if (b) {}
というのはダメみたいだ
if 文の条件式は bool でないとだめ
bool? はダメ @
null条件演算子(P.64) 非nullのときだけメンバにアクセス
string unspace = str?.Trim();
A
null合体演算子(P.92) nullの時のデフォルト値を与える
Console.WriteLine(num ?? 100);
B
論理積のショートカット演算(P95) 非nullのときだけメソッドにアクセス
if (str != null && str.StartsWith("http://") { }
nullを予見したいろんな手法
Bの時に@を使えないか考えてみたんだけど
条件式に
str?.StartsWith() を置いてしまうと、ここが bool? つまりnull許容型の bool と判定されてしまう
if文の条件式に bool? は使えないようなのでエラーが出てしまう
null がきちゃうと判断出来なくなっちゃうから仕方ないのか
Bは大事なんじゃないかと思ってる
VBAのプログラム組んでたときに論理積・論理和系の条件式でよくわからないエラーがでてたのは
これじゃないかと、今思えばだけど。
当時は null を放置しておくと条件式でエラー出ちゃいがちだということを経験からわかってたんで
とりあえず適当な値入れて回避してたんだけど。 >>324
>>325
これ>>335でぽちぽちやりながら
このへんをさらに掘り下げてたんだけど
根本的な部分が理解できた
一つ一つの処理であったりルールは理解できるんだけど
なんだかもやもやがついて回る
複数の疑問点が浮かび上がるんだけど、最終的に集約されていくのはこの疑問
Q.「なぜ負の数を表すのにわざわざ補数を使うのか」
言ってることはわかるけど、そもそもなんでこんなことしてんの的な疑問というのは
どこが謎の源泉になっているのか、自分の思考を分析するのがやっかいだ
自分なりにたどり着いた答えがこれ
A.「コンピュータは引き算をしたくないから」
もっというと
A.「スイッチON/OFFの世界だけで計算したいから」
細かく経緯を説明し始めると長くなるんだけど、
ビット演算やらこの辺の分野全てにわたる話なんだと思う 補数が関係してくるのはbit演算のうち否定演算
では、
& 論理積
| 論理和
これらはどう使われるのか
まだ学んでいないので想像でしかないんだけど、例えばこんな感じなのか
絵がいくつかあって
A,B,Cと名前を付けるとする
これらの絵は4色の絵の具(赤・青・緑・黒)を使って描かれているのだが
全ての色を使っているわけではない
どの色を使っているかによって場合分けして処理していきたい
このような処理をするときに、ある工夫をしてみる
まず色ごとに特定の2進数を割り当てる(()内は10進数)
int r = 0b0001; //赤(1)
int g = 0b0010; //緑(2)
int b = 0b0100; //青(4)
int w = 0b1000; //白(8)
見て分かるように1をずらしただけのものだ
スイッチのように考える
一番右のスイッチがONのものは赤、みたいな感じ
そして絵A・B・Cについても2進数で表現する
このとき、それぞれの絵がどの色を使っているかによってスイッチON/OFFを切り替える
int artA = 0b0011; //A(3) 緑と赤を使用
int artB = 0b1001; //B(9) 白と赤を使用
int artC = 0b1111; //C(15) 全色使用
前提はここまでで、具体的にこれらをどうつかっていくかを説明(想像)する
例えば、絵Aが赤の絵の具を使っているかどうかによって条件分岐させたいならこうする
if ((artA & r) == 0b0001) { }
絵Aと絵Bで使っている色を全部列挙したいなら
int result = artA | artB;
としてから result について分析すれば分かるだろう
分析方法を想像すると・・・
if ((result & w) == w) { } //白を使っている
みたいな感じか
似たようなことがTCP/IPの本を読んだときも書いてあったような気がする 結局、スイッチON/OFFの世界をどうやってうまく利用していくかなんだろうな
すごいもんだ ちなみにだけど
if ((artA & r) == 0b0001) { } ○
if (artA & r == 0b0001) { } ×(エラー)
なので注意 これは演算子の優先順位が
==
のほうが
&
|
より高いから public class Program
{
public static void Main(string[] args)
{
for (var i = 0; ; i++)
{
int num = new Random(i).Next(1000);
Console.WriteLine(num);
if (num == 500)
{
break;
}
}
}
}
乱数生成して遊んでた
乱数好き
Randomクラスのコンストラクタに渡す引数は「シード値」といって
これが同じだと生成される乱数は変らない
ここはJavaとは違うよね確か。
まぁそういうわけでシード値を次々に変えていくために
カウンター変数をシード値として流用
練習コードを書くときに乱数を使うとちょっと動きのあるコードを書けるので面白い シード値はJavaでも同じかな
シード値のデフォルトが違うかもしれない
めんどうなんで調べないけど スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)
中山清喬
ぽちった 5章やってたんだけどラムダ式が結構出てくる
先に押さえておきたくて10章に一時的に出張中
この辺はJavaでは薄くしかやってないので
しっかりやらないと理解できない
delegateから始める VBAのちょっとしたのを組まなければならなくなってちょいと中断
さっさと終わらせたい あああああ、vbaだいぶできてきたaa
もう少し! いつもやらかすのは
Range(Cells(i, j), Cells(k, l))
みたいにRangeの指定をCellsを使ってやるケース
このとき、
With ThisWorkbook.Worksheets("なんとか")
で囲ってるなら
Cellsの前にもドットが必要なんだけど、これを忘れる
そしてそれに気づかない
今日もやらかしてしばし作業がとまった C#
Splitクラス
区切り文字はchar型なのでシングルクオーテーションを使わないといけない
string型のダブルクオーテーションを使うとエラー
すぐ忘れる
あと、区切り文字で new[] を使わない時は { } をつかってはダメ 正規表現
\d{2,4} ○
\d{2, 4} ×
なんとスペース入れるとダメ
今気づいた
こういうのって実際にコードを打ち込んでみて失敗しないと気づけない
あと、おれはそんな記憶力良くないんで、実際にコード打たないと覚えた気になってて
実際は覚えてないということになる
めんどうだけど、とにかくできる限り全てのコードを打って試していこう
テキストのコードを自分なりに少し変えて試す
いや、これがまためんどくさいのだが、ためになる 命令文の中に「:」が入ってくるようなクラスを説明する時に
Console.WriteLineの中に「:」を入れるのはやめて欲しいわ
そうでなくてもできる限り記号を入れないで欲しい
例えば
Console.WriteLine($"位置:{m.Index} 長さ:{m.Length}");
とかいうコード
Console.WriteLine($"位置は{m.Index} 長さは{m.Length}");
でいいだろ
このコードでは「:」は混同の原因になりにくいかもしれないけど
例えば三項演算子とか入ってきたりした場合とか ふぅ 5章の重さは半端ないわぁ
2周目なんだけどしっかりやってるとなかなか進まない
1周目で理解しそびれた部分押さえるのが精一杯 せめて9章までやらないと基本分野網羅できない感じする
ここまでやると
コレクション
オブジェクト指向の各分野
を大体押さえることができそう
新版のスッキリSQLも届いたのでちょくちょく目を通していこうかな
GUIアプリをC#でつくるための参考書も買ってあるので
のぞいてみたんだけど、JavaのSwingで作るよりずいぶん簡単そうな感じがする
クラス定義の後ろの方に「:」があるようなコードが書いてあったのだが
これはまだやってない分野だ
自動で作られたコードを隅々まで理解できるようになりたいので
独習の方を先に進めることにする 5章2周目クリア
もう一周ぐらいやらないとダメなことは分かっているが
復習はまたあとにして6章に進む Dictionary で使っている Red-Black tree だけど、なるほどなぁ
これは foreach で取り出すとき、できるだけ左側の下の方から探索していくのか
こういうアルゴリズムって面白いな >>358の「:」はインターフェースの実装だったようだ
この辺はJavaと記述が違うからC系から引き継いだものかな コレクションも配列もSortの規則を変えるにはラムダ式を使おう!
var l = new List<int>() { 100, 200 };
l.Sort((x, y) => (-x) - (-y));
Console.WriteLine(string.Join(",", l));
var ary = new[] { 100, 200 };
Array.Sort(ary, (x, y) => (-x) - (-y));
Console.WriteLine(string.Join(",", ary)); >>364は
(-x) - (-y) → y - x
だな すっきりとちがって独習はたまに誤解を招きそうな表現があるんで気をつけないといけない
おまえらぐらいだとこの程度の説明でわかるだろ?あ?
みたいなのを感じる
が、おれは残念ながら分からない
この説明端折りすぎてんなと思ったらコードいろいろ書いて確認してる C#ではインスタンス経由でstaticメンバにアクセスできないのか
Javaだとスッキリ入門で複数の勇者インスタンスが、共有のお金にアクセスするために
static int maney を定義していたが、ああいうのはだめなのか
独習278ページ
「クラスメソッドはオブジェクト経由では呼び出さない」 Mathクラスがなぜ静的クラスなのかを説明している文だけど
関連した機能を一つのクラスにまとめることでわかりやすいから、
みたいな説明がされている
これって説明になってないと思う
そうじゃなくて、このような数学的な処理ってのは
引数を渡して即座に処理をして結果を返せば足りるんで
いちいちデータをフィールドに格納しておく必要はないから
ってのが最大の理由じゃないの
そもそもインスタンス化の最大の利点はインスタンスごとに
異なるフィールド値を格納しておくことができる点でしょ
そこを説明してないのってちょっとあれだと思うんだけどどうなんだろうか
ちがうんかね
独習287ページ 値型の値渡し
参照型の値渡し
値型の参照渡し
参照型の参照渡し
今読んでてちょい混乱したけどもうおk
「値渡しはコピー」で
「参照渡しはこれをみてね」
みたいな理解でいけた
これCでもやったような記憶があるがデジャブだろうか
面倒だがひとつひとつテストコードを自分で書いて確かめてみようか 自作のJavaプログラムだけど、ちょっと前から動かなくなってた
どうやらJDKのパージョンアップにともなって仮想マシンにアクセスできなくなっていた
ユーザー側の問題になるんだけど、バージョンアップ程度で環境変数やらいじらせるのっていまいちだな
やっぱwindowsアプリつくるならC系なのかね 素数かどうか調べるプログラムに感心した
平方根となる小数を切り捨てて整数にする
この整数の値になるまで2から順に除算をして
余りが0になるものがあるか調べる
ヒットする場合は素数ではない
var prime = true;
for (var i = 2; i <= Math.Floor(Math.Sqrt(num)); i++)
{
if (num % i == 0)
{
prime = false;
break;
}
}
中学校の数学で必死こいてやってた作業と全く同じだ
「真ん中」まで調べる的な IEnumerable<>を戻り値として使うイテレーター構文は
foreachを簡単に使えるようにするために利用される
(foreachを使えるようにIEnumerableインターフェースを実装するのは大変なので)
ポイントは
yield return (と、yield break) 独習318ページの3.@の解答
readonlyと書いてあるけどprivateだよなこれ
いちいちここに書いてないけど誤植がちらほらある
誤植だと思い違いしてるケースも考えられるので実際困る プロパティはセッターゲッターつまりアクセサーメソッドの発展系 インデクサーの説明わかりにくいなあ
インスタンス名[index] でインスタンスを利用したいときに使うみたいな感じか
フィールドが配列の時に使うとうまい具合に組み合わさって利用価値があるみたいな インスタンス名[ ] の形式で利用したいなら自由に使えるようなものなので
例えば[ ]の中が要素番号的なものでなくても使えると。
class Test
{
public string this[string st]
{
get { return st; }
}
}
class Program
{
public static void Main(string[] args)
{
var t = new Test();
Console.WriteLine(t["aaa"]);//結果「aaa」
}
} で、フィールドが配列の時に、インデクサーを組み合わせて使うと
真価を発揮できると(まるで真価を発揮できてない例だが・・・・
class Test
{
string[] ary = new string[3];
public string this[int index]
{
set { ary[index] = value; }
get { return ary[index]; }
}
}
class Program
{
public static void Main(string[] args)
{
var t = new Test();
t[0] = "aaa";
Console.WriteLine(t[0]);//結果「aaa」
}
} this[string st]
this[int index]
の部分が大事で、こういう使い方をすると便利だなと思うような場面で使えば良いのかな
特にインスタンスを配列ライクに使いたい場合
インスタンスをforで回しながら何かをインスタンス内のどこかに代入していきたいとか 忙しくなってきて時間裂けなくなってきたけど
少しずつでもいいんでやっていこうと思う マッマに新しいPC買ってもらっただで
今までは簡単なアプリをGooglePlayにリリースしてきたけど、ようやく本格的なアプリが作れそうや
あとは今運営してる比較サイトもAjaxで非同期にデータベースとアクセスできるようにしたい
Googleが提供してるFireBase使えば、サーバーサイドの開発する必要すらないみたいやな
便利な時代になったで ぐぐるさんは優秀なapi無料で公開してくれてるからありがたいんだけど
セキュリティ固めてる環境からアクセスするようコードに仕込んでると
そのうち担当者から怒られそうなのがネック ふぅ 8章まで終わった
覚えてるのかと言われたらスッカスカだが一応理解はした
スッカスカで先に進むと理解できなくなりそうだが
ここは敢えて進むのだ >>343は列挙型で使うようだ
「<<」演算子を使うと、色ごとに2進数を割り当てる時に、
1をズラしたものを簡単に定義できる
int r = 1; //0b0001 赤(1)
int g = 1 << 1; //0b0010 緑(2)
int b = 1 << 2; //0b0100 青(4)
int w = 1 << 3; //0b1000 白(8)
こんな風に ちょいGUIに寄り道する
入門本買ってあるので簡単なものを作れるようにしていく
Javaの時と同じ流れでやっていく ■ このスレッドは過去ログ倉庫に格納されています