X



トップページ独身男性
660コメント436KB
System.out.println("またJavaの季節がやってきた!" + 2);
■ このスレッドは過去ログ倉庫に格納されています
0001おれさま ◆6CTEZS59O00a
垢版 |
2018/09/13(木) 10:42:14.49
去年の今頃Java学習開始するも挫折
しかし不屈の闘志をめらめらと燃やしながら
そびえ立つ岩壁にいどむため、再びこの地にやってきたのだ!

プログラミング歴は独学Cチョビッツ+独学VBA少々


きょうかしょ
https://www.amazon.co.jp/dp/484433638X
スッキリわかるJava入門 第2版 (スッキリシリーズ)
0286おれさま ◆6CTEZS59O00a
垢版 |
2018/11/07(水) 13:25:58.29
こういうでかい数字はjavaだと扱ったことないからわからんのだけど
難しいんではないのか
すごいとおもたぞ
0287おれさま ◆6CTEZS59O00a
垢版 |
2018/11/07(水) 13:32:37.36
この対話シェルとやらは、簡単なチェックのために使うのはよさそうだが
いろいろと学習上誤解を招きそうな機能だな
多言語やってきたおれは、2と打ち込んで実行すると2が表示されることに違和感を感じることができるが
全くの初心者はそれが当たり前だと思っちゃうよな
いや、ある意味学習が捗る部分もあるのだけれども
0288おれさま ◆6CTEZS59O00a
垢版 |
2018/11/07(水) 13:45:46.30
論理演算子はVBAと同じか

and
or
not

if 文は条件はカッコなしで文末にコロン :

ヘッダーとスイート
0289おれさま ◆6CTEZS59O00a
垢版 |
2018/11/07(水) 13:55:16.88
対話シェルじゃなくてpyの方に書いていくことにしているのだが

def ppp(a, b):
 return a + b

print(ppp(2, 5))


こういうの書くと関数のあとは2行は空けろとか言ってくる
Pythonは空行とかタブとか五月蠅いのな
0290おれさま ◆6CTEZS59O00a
垢版 |
2018/11/07(水) 14:13:08.16
うわ、行空けすぎるとおこられるw

あと、関数に渡す引数のデフォルト値設定で

def ppp(n = 1):

ってやったらスペースいれるなって怒られる

def ppp(n=1)

にしろだと
0291おれさま ◆6CTEZS59O00a
垢版 |
2018/11/07(水) 14:51:18.03
なるほどねー
1/3ぐらい読んでみたけど、
Pythonはわかりやすい、悪く言えばいい加減な感じ

今日は終わり!
0292おれさま ◆6CTEZS59O00a
垢版 |
2018/11/08(木) 12:44:03.34
今日はhtmlの基礎
テキストは
「これからWebをはじめる人のHTML&CSS、JavaScriptのきほんのきほん」

ここに書いてあるHTMLやらCSSの簡単なコードをとりあえず
ぱぱぱぱぱぱっと書けるようにしていく

やったことないわけではないんだけど、
JavaScriptやその先のJavaにつなげるために
もう少し記憶を堅いものにしておく
0293Mr.名無しさん
垢版 |
2018/11/08(木) 13:29:57.42
続けていて尊敬。
このままの調子で頑張ってね。
0294おれさま ◆6CTEZS59O00a
垢版 |
2018/11/08(木) 13:59:31.61
ふぁ〜い

HTMLもCSSも、「覚える」ってことをしたことがなかったので新鮮
ぴっちぴちです

今日は用事あるのでここまで
0295わがはい ◆0BMoNHqNlM
垢版 |
2018/11/09(金) 01:13:17.98
>>290
pythonはインデントでスコープを決めるからね
でも文中の空白は問題なかったはずやが

個人的にpythonはあんま好きやないな
科学技術計算や深層学習の分野では強いけどアプリ作るとなるとピンとこん
ワイはjavaでデータベース使ってウェブサイト制作なんかは一通りできるようになったっから、Androidアプリ作るためKotlin勉強しとる
でもワイのノーパソでAndroidStadioのエミュレータ動かすと重すぎて作業できん
新しいPC欲しいで
0296おれさま ◆6CTEZS59O00a
垢版 |
2018/11/10(土) 07:44:23.82
マルチモニタのデスクトップでシコシコ書いてるわ
ブラウザでググりながらが基本なんで
ノーパンは厳しいな
モニタもっとでかいのに取り替えようかとも思ってるぐらいだ

web系のプログラミング始めると
レンタル鯖とか興味湧いてくる
無料もあるけど@500円/月でよさそうなの借りられるし
0297おれさま ◆6CTEZS59O00a
垢版 |
2018/11/11(日) 15:30:45.26
HTML・CSSのテキスト
テキスト通りの流れでVSCodeにカキカキ
しっかり覚えたわけじゃないけど、難易度は低いので
大体なにができるのかざっくり理解出来ていれば
あとはググったりして再現できそう
正直いうとこれつまんねぇのな

HTML/CSSの部分は一通り流したので
JavaScriptの部分をこれまた流し読みをしてみた
Javaで基本やってると大した事ないのな
匿名クラスのような使い方も出てきてるし
JFrameでやってたEvent処理の知識が生きそう
JavaScriptは一時期Javaと近い所にいたようで、似た部分が多くて勉強しやすそうだ
0298おれさま ◆6CTEZS59O00a
垢版 |
2018/11/11(日) 15:39:01.29
Javaの将来性があれなんで、C#の本も買ってある
どちらかに限定しないで両方やればいいじゃんってゆる〜く考えてる
C#はwidowsアプリに強そうなんで、軽く何か作れるレベルまでやってみたい
んでJavaと比べてみたい
0299おれさま ◆6CTEZS59O00a
垢版 |
2018/11/11(日) 16:00:59.79
C#はVSCodeでも開発できるんだけど
この際Visula Studio 2017 Communityを入れる事にしよう

オプションでインスコできるものがいくつかあるんだけど
全部チェック付けたら20GB越えるみたいだ
SSDの容量食いそうだけどまぁいいか
0300おれさま ◆6CTEZS59O00a
垢版 |
2018/11/11(日) 17:32:34.39
「独習C#新版」

ちょいと読んでるんだけど
Javaとやたら似てるな

namespaceというのは初めてだけど
packageみたいなもんかこれ

●Java
System.out.println("hello," + name);
●C#
Console.WriteLine("hello, {0}", name);

プレースホルダー使うところがC系っぽい感じする
Cでもそんなことやってたような(忘れたけど
でもJavaでも位置揃えのために実践編でやったな
0301おれさま ◆6CTEZS59O00a
垢版 |
2018/11/11(日) 17:43:09.38
オブジェクト指向を勉強するのにJavaは適当で
特にスッキリシリーズは初学者にぴったりと聞いたんで使ってたんだけど
その通りだな

このC#のテキストは初学者にとっては厳しいんじゃないか
少なくともスッキリの系統だった教え方と比べると難易度高そう
最初から詰め込みすぎてる

逆に基本がわかってる多言語経験者にはよさそう
0302おれさま ◆6CTEZS59O00a
垢版 |
2018/11/12(月) 12:35:44.40
C#が初心者にとって向いてる点は、
ざっとみた限りではどの参考書もVisualStudio Communityの導入と
使い方を紹介して、これを使って学習を進めてるところだな

スッキリでは統合環境の説明が薄いせいで自分でeclipseの使い方を調べないといけなかった
初心者であっても統合環境がないと、試行錯誤するのに不便すぎる

VisualStudioはビルドすると勝手にexeが実行されてコマンドプロンプトが立ち上がる
プログラミングは最終的な実行ファイルを目にしないとやった感じがしない
そういう点でもいい
windowsユーザーにとってはやはりマイクロソフト製品は親和性が高く感じる
0303おれさま ◆6CTEZS59O00a
垢版 |
2018/11/12(月) 12:51:54.74
C#はJavaとCを足して二で割ったような言語だそうだ

三項演算子とか出てくると、はるか昔にすこしだけCをいじった時の記憶が戻ってくる
Javaっぽいんだけど、Cの話がちょくちょく入ってくる
どちらも多少やったことがあるおれにはぴったりなのかもしれない

独習の3章まで読んだ
全くの初心者ではないんだけど、内容が重めだから復習しないとすぐに知識が抜けそう
スッキリでいえば入門編と実践編が合体してるような感じだ
0304おれさま ◆6CTEZS59O00a
垢版 |
2018/11/13(火) 09:09:18.02
C#はメインメソッドは
Main
と書かないとダメなんだな
Javaみたいな
main
だとダメ

あと、文字列比較では
Javaと違って
==
を使う
0305おれさま ◆6CTEZS59O00a
垢版 |
2018/11/13(火) 11:38:04.43
public static void main(String[] args)
public static void Main(string[] args)

微妙に違うのはやめて欲しいわ 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b)
0306おれさま ◆6CTEZS59O00a
垢版 |
2018/11/13(火) 13:39:12.31
独習C#、1/4ぐらい読んだ
読んだとか言っても頭に入ってなかったら意味ないんで
今の5章終わったらもう一度最初から読み直すか
忘れちゃってる部分が多すぎると行き詰まる
0307おれさま ◆6CTEZS59O00a
垢版 |
2018/11/14(水) 13:44:17.37
>>53の最短一致のことも書かれてるな
網羅性が高いな、このテキストは。

しかし文字列操作分野は重い
Javaでも重かったが独習C#はさらに重い
Javaやってなかったら挫折コースまっしぐらだ

コレクションまだやってないのに出てくるし
まさかのラムダ式まで出てくるし
0308おれさま ◆6CTEZS59O00a
垢版 |
2018/11/17(土) 04:19:02.61
ふむむ
VisualStudio で Ctrl+F5 で実行したあと、
コマンドプロンプトを閉じると、フォーカスが出力ウィンドウに移ってしまう
コードエディタに戻ってコードの編集を続けたいのだが
マウスを使って戻すのがめんどくさい

ctrl+tab でコードエディタに戻る事ができる
0309おれさま ◆6CTEZS59O00a
垢版 |
2018/11/17(土) 04:26:04.89
机の上にキーボードおいてカチャカチャやってると深夜だと結構うるさい
タオルを下に置いたら劇的に音が小さくなった
これはいい
0310おれさま ◆6CTEZS59O00a
垢版 |
2018/11/17(土) 04:29:26.94
Javaでファイルやらstream系のクローズを自動化する書き方があったが
C#も同様の方法がある
独習C#では最初からこの方法で教えている

●C#
using () {}

●Java
try () {}
0311おれさま ◆6CTEZS59O00a
垢版 |
2018/11/17(土) 04:40:54.34
using (var writer = new StreamWriter(@"../../data.log")) {}

で2つ上のフォルダにファイル作成

ドット2つ+/ で上のフォルダ
ドット1つ+/ で現在のフォルダ

ファイル操作の練習するわけだけど
exeが作られているフォルダの階層が深いから
exeよりちょい上の方にテスト用のファイルを作る事にする
0312おれさま ◆6CTEZS59O00a
垢版 |
2018/11/17(土) 06:13:38.86
文字コードはほんとやっかいだ

ぐぐると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")
を渡すと文字化けしない
0313おれさま ◆6CTEZS59O00a
垢版 |
2018/11/17(土) 08:41:48.22
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 であれば様々な言語の文字を一緒に使うことができます。
0314おれさま ◆6CTEZS59O00a
垢版 |
2018/11/17(土) 13:15:45.75
× encording
○ encoding

コードの補完機能であるインテリセンス(マイクロソフトの造語か)
頼りっきりになっているとスペル間違えて覚えてたりするんでよくない
eclipseにも補完機能あったけど、わざと手打ちしてた
C#でもそうした方がよさそうだわ
英単語思い出すきっかけにもなるし
0315おれさま ◆6CTEZS59O00a
垢版 |
2018/11/17(土) 13:51:39.20
ファイル操作で、テキストファイルの読み込みやってるんだけど
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だよってのが多いような
0316おれさま ◆6CTEZS59O00a
垢版 |
2018/11/17(土) 13:57:24.77
>>315
間違えた

修正

FileReader fr = new FileReader("test.txt", FileMode.Open);

FileStream fs = new FileStream("test.txt", FileMode.Open);

>>257と同じで、Writer/Reader が入ると文字ストリームかな
FileStream はバイトストリーム
NetworkStream
MemoryStream
もバイトストリーム
0317おれさま ◆6CTEZS59O00a
垢版 |
2018/11/17(土) 14:25:35.29
Console.WriteLineに渡す文字列だけど
変数混じりの場合、Javaと同じような記述方法でもいけるんだな

string st = "あああ";
Console.WriteLine(st + "と叫んだ");

みたいな感じ
こんな風↓しかダメと思ってた

Console.WriteLine(@"{st}と叫んだ");
0319おれさま ◆6CTEZS59O00a
垢版 |
2018/11/17(土) 16:03:30.98
1/3読んだけど
このまま先に進んでもスッカスカな知識になるんで
復習に入るか
覚えないといけない量はスッキリ1冊分ぐらいありそう
0320わがはい ◆0BMoNHqNlM
垢版 |
2018/11/17(土) 22:29:04.87
>>318
そりゃMath.powの戻り値はdouble型やからな
javaだとlong型の最大値を超える計算はBigInteger型使ってnew BigInteger("3").pow(300)で可能やけど、C#でも似た感じでできるんとちゃう?

一見するとPythonの方が便利に思えるけど、どのくらいメモリを食うかわからんちゅうことやから、システム開発なんかには不向きなんやな
0321おれさま ◆6CTEZS59O00a
垢版 |
2018/11/18(日) 08:18:24.19
テキストのちょい先でBigIntegerはやったけどね

そもそも目的というか得意としてる分野がハッキリしてるというのがいい
言語ごとに特徴が明確なら選択しやすい
0322おれさま ◆6CTEZS59O00a
垢版 |
2018/11/18(日) 16:53:55.00
intの範囲ぐらい正確に覚えても罰は当たらないだろう

まいなすにじゅういちおくよんせんななひゃくよんじゅうはちまんさんぜんろっぴゃくよんじゅうはち〜(絶対値1つ小さいプラス値)

-21 4748 3648 +21 4748 3647
0324おれさま ◆6CTEZS59O00a
垢版 |
2018/11/19(月) 11:32:11.19
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
0325おれさま ◆6CTEZS59O00a
垢版 |
2018/11/19(月) 11:43:42.11
この気持ち悪い唐突感を取り除くためにぼけぇと考えてたんだけど
これは2進数を持ち出さないでも10進数の範疇で自然なイメージを持てるのではないかと
そういう結論に至った

つまり、10進数で桁が変る瞬間、例えば 99 100 のような場合
上と同じような変遷を書くことができる

100

00
↓ ←ここが「反転」の操作を10進数で表現したもの
99

99

-100

反転とは補数の関係を使った変換なのでこれでいいだろう
数直線で考えたとき、0 から順にたどっていって 100 になった瞬間に、
ぽ〜んと 0 を挟んで真反対の側に飛ばされる感じがわかる
101 を同じように考えると

101

01

98

98

-99

なるほどと
0326おれさま ◆6CTEZS59O00a
垢版 |
2018/11/19(月) 11:52:03.92
2進数というスイッチカチャカチャの世界を、人が常用する10進数に重ねていくこの作業は見事だ
コンピュータが作られていく過程で試行錯誤を重ねてこういうものを作ってきた人たちがいたんだなと
0329おれさま ◆6CTEZS59O00a
垢版 |
2018/11/24(土) 09:48:38.45
まだテキストで勉強してない分野をJavaと同じように書いてどこまでいけるか試してた
コンストラクタ付きのクラス作って、インスタンス化したり。

同じソースファイル内に定義したクラスをインスタンス化する場合であっても
コンストラクタにpublicがついてないとエラーがでるのな
この辺Javaより厳しい
0330おれさま ◆6CTEZS59O00a
垢版 |
2018/11/24(土) 10:05:57.71
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 はもっとわかりにくそうなんで放置^^
0331おれさま ◆6CTEZS59O00a
垢版 |
2018/11/24(土) 15:56:56.22
string st1;
string st2;
st2 = st1 + "あああ";//未割り当てのローカル変数'st1'が使用されました。

string st1 = null;
string st2;
st2 = st1 + "あああ";//OK!

string st1;
string st2;
st2 = null + "あああ";//OK!
0332おれさま ◆6CTEZS59O00a
垢版 |
2018/11/24(土) 16:00:09.58
中身がnullだからどうのこうのの話でもないようだ
とにかく初期化されてないものを使うなみたいな?
st2みたいに代入される変数が初期化されてないならまぁいいやとか
0333おれさま ◆6CTEZS59O00a
垢版 |
2018/11/24(土) 16:05:48.92
独習C#80ページのコードを書いていて気づいたわけなんだけど
テキスト上ではstringの初期化として "" を使っている

var st = "";
string st = "";

みたいな感じで。
一応初期化は必ずやれと35ページに書いてある
0334おれさま ◆6CTEZS59O00a
垢版 |
2018/11/24(土) 17:25:13.15
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


浮動小数点数に計算誤差がでちゃう例なんだけど
出る場合と出ない場合を予め区別して把握するのは難しそうだ
0335おれさま ◆6CTEZS59O00a
垢版 |
2018/11/24(土) 18:42:36.15
//正の小数・正の整数を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("適正な数値ではありません");
}


}
}
0336おれさま ◆6CTEZS59O00a
垢版 |
2018/11/24(土) 18:45:05.73
いちいち紙に書いて計算してたけど
あほらしくなって自分で作ってみた
正規表現だけはコピペしてズル

小数部分の桁数は定数で指定
対象となる10進数はキーボードからの入力
0337おれさま ◆6CTEZS59O00a
垢版 |
2018/11/25(日) 07:42:11.25
独習の「同一性(Identity)」=スッキリの「等値(equality)」
→同じオブジェクトを参照、つまり完全一致(==)


独習の「同値性(Equivalence)」=スッキリの「等価(equivalent)」
→オブジェクトが同じ値をもっていれば十分(equals)



この辺業界で統一した用語使って欲しいもんだ
どちらかというと、独習の用語の方が直感的で「スッキリ」してる感じする
0339おれさま ◆6CTEZS59O00a
垢版 |
2018/11/25(日) 08:08:06.13
Equals の s は三単現の s で
SequenceEqual に s がついてないのは配列という複数要素の一致を要求してるからなのかとか
ぼけぇ〜と考えてたが
でもSequence自体は単数だよなとか

まぁいいや
0340おれさま ◆6CTEZS59O00a
垢版 |
2018/11/25(日) 09:16:40.68
bool? b = true;
if (b) {}

というのはダメみたいだ
if 文の条件式は bool でないとだめ
bool? はダメ
0341おれさま ◆6CTEZS59O00a
垢版 |
2018/11/25(日) 09:32:00.02
@
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 を放置しておくと条件式でエラー出ちゃいがちだということを経験からわかってたんで
とりあえず適当な値入れて回避してたんだけど。
0342おれさま ◆6CTEZS59O00a
垢版 |
2018/11/26(月) 03:32:45.42
>>324
>>325
これ>>335でぽちぽちやりながら
このへんをさらに掘り下げてたんだけど
根本的な部分が理解できた

一つ一つの処理であったりルールは理解できるんだけど
なんだかもやもやがついて回る
複数の疑問点が浮かび上がるんだけど、最終的に集約されていくのはこの疑問

Q.「なぜ負の数を表すのにわざわざ補数を使うのか」

言ってることはわかるけど、そもそもなんでこんなことしてんの的な疑問というのは
どこが謎の源泉になっているのか、自分の思考を分析するのがやっかいだ

自分なりにたどり着いた答えがこれ

A.「コンピュータは引き算をしたくないから」

もっというと

A.「スイッチON/OFFの世界だけで計算したいから」

細かく経緯を説明し始めると長くなるんだけど、
ビット演算やらこの辺の分野全てにわたる話なんだと思う
0343おれさま ◆6CTEZS59O00a
垢版 |
2018/11/26(月) 05:20:57.02
補数が関係してくるのは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の本を読んだときも書いてあったような気がする
0344おれさま ◆6CTEZS59O00a
垢版 |
2018/11/26(月) 05:22:35.23
結局、スイッチON/OFFの世界をどうやってうまく利用していくかなんだろうな
すごいもんだ
0345おれさま ◆6CTEZS59O00a
垢版 |
2018/11/26(月) 05:39:25.97
ちなみにだけど

if ((artA & r) == 0b0001) { } ○

if (artA & r == 0b0001) { } ×(エラー)

なので注意
0347おれさま ◆6CTEZS59O00a
垢版 |
2018/11/27(火) 11:51:09.28
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とは違うよね確か。
まぁそういうわけでシード値を次々に変えていくために
カウンター変数をシード値として流用

練習コードを書くときに乱数を使うとちょっと動きのあるコードを書けるので面白い
0349おれさま ◆6CTEZS59O00a
垢版 |
2018/11/28(水) 10:12:28.84
シード値はJavaでも同じかな
シード値のデフォルトが違うかもしれない
めんどうなんで調べないけど
0350おれさま ◆6CTEZS59O00a
垢版 |
2018/11/28(水) 10:48:40.10
スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)
中山清喬

ぽちった
0351おれさま ◆6CTEZS59O00a
垢版 |
2018/11/28(水) 21:36:57.44
5章やってたんだけどラムダ式が結構出てくる
先に押さえておきたくて10章に一時的に出張中

この辺はJavaでは薄くしかやってないので
しっかりやらないと理解できない
delegateから始める
0352おれさま ◆6CTEZS59O00a
垢版 |
2018/12/01(土) 07:36:12.73
VBAのちょっとしたのを組まなければならなくなってちょいと中断
さっさと終わらせたい
0355おれさま ◆6CTEZS59O00a
垢版 |
2018/12/01(土) 14:08:34.12
いつもやらかすのは

Range(Cells(i, j), Cells(k, l))

みたいにRangeの指定をCellsを使ってやるケース

このとき、
With ThisWorkbook.Worksheets("なんとか")
で囲ってるなら
Cellsの前にもドットが必要なんだけど、これを忘れる
そしてそれに気づかない
今日もやらかしてしばし作業がとまった
0356おれさま ◆6CTEZS59O00a
垢版 |
2018/12/01(土) 15:23:44.31
C#

Splitクラス

区切り文字はchar型なのでシングルクオーテーションを使わないといけない
string型のダブルクオーテーションを使うとエラー

すぐ忘れる

あと、区切り文字で new[] を使わない時は { } をつかってはダメ
0357おれさま ◆6CTEZS59O00a
垢版 |
2018/12/01(土) 16:55:30.57
正規表現

\d{2,4} ○
\d{2, 4} ×

なんとスペース入れるとダメ
今気づいた
こういうのって実際にコードを打ち込んでみて失敗しないと気づけない
あと、おれはそんな記憶力良くないんで、実際にコード打たないと覚えた気になってて
実際は覚えてないということになる

めんどうだけど、とにかくできる限り全てのコードを打って試していこう
テキストのコードを自分なりに少し変えて試す

いや、これがまためんどくさいのだが、ためになる
0358おれさま ◆6CTEZS59O00a
垢版 |
2018/12/02(日) 08:13:23.33
命令文の中に「:」が入ってくるようなクラスを説明する時に
Console.WriteLineの中に「:」を入れるのはやめて欲しいわ
そうでなくてもできる限り記号を入れないで欲しい
例えば

Console.WriteLine($"位置:{m.Index} 長さ:{m.Length}");

とかいうコード

Console.WriteLine($"位置は{m.Index} 長さは{m.Length}");

でいいだろ
このコードでは「:」は混同の原因になりにくいかもしれないけど
例えば三項演算子とか入ってきたりした場合とか
0359おれさま ◆6CTEZS59O00a
垢版 |
2018/12/02(日) 09:45:34.92
ふぅ 5章の重さは半端ないわぁ
2周目なんだけどしっかりやってるとなかなか進まない
1周目で理解しそびれた部分押さえるのが精一杯
0360おれさま ◆6CTEZS59O00a
垢版 |
2018/12/02(日) 10:03:46.50
せめて9章までやらないと基本分野網羅できない感じする
ここまでやると
コレクション
オブジェクト指向の各分野
を大体押さえることができそう

新版のスッキリSQLも届いたのでちょくちょく目を通していこうかな

GUIアプリをC#でつくるための参考書も買ってあるので
のぞいてみたんだけど、JavaのSwingで作るよりずいぶん簡単そうな感じがする
クラス定義の後ろの方に「:」があるようなコードが書いてあったのだが
これはまだやってない分野だ
自動で作られたコードを隅々まで理解できるようになりたいので
独習の方を先に進めることにする
0361おれさま ◆6CTEZS59O00a
垢版 |
2018/12/03(月) 13:06:46.85
5章2周目クリア
もう一周ぐらいやらないとダメなことは分かっているが
復習はまたあとにして6章に進む
0362おれさま ◆6CTEZS59O00a
垢版 |
2018/12/04(火) 13:59:18.21
Dictionary で使っている Red-Black tree だけど、なるほどなぁ
これは foreach で取り出すとき、できるだけ左側の下の方から探索していくのか
こういうアルゴリズムって面白いな
0363おれさま ◆6CTEZS59O00a
垢版 |
2018/12/04(火) 14:01:24.00
>>358の「:」はインターフェースの実装だったようだ
この辺はJavaと記述が違うからC系から引き継いだものかな
0364おれさま ◆6CTEZS59O00a
垢版 |
2018/12/04(火) 15:12:33.74
コレクションも配列も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));
0367おれさま ◆6CTEZS59O00a
垢版 |
2018/12/07(金) 05:06:13.54
すっきりとちがって独習はたまに誤解を招きそうな表現があるんで気をつけないといけない
おまえらぐらいだとこの程度の説明でわかるだろ?あ?
みたいなのを感じる
が、おれは残念ながら分からない
この説明端折りすぎてんなと思ったらコードいろいろ書いて確認してる
0368おれさま ◆6CTEZS59O00a
垢版 |
2018/12/07(金) 08:57:32.42
C#ではインスタンス経由でstaticメンバにアクセスできないのか
Javaだとスッキリ入門で複数の勇者インスタンスが、共有のお金にアクセスするために
static int maney を定義していたが、ああいうのはだめなのか

独習278ページ
「クラスメソッドはオブジェクト経由では呼び出さない」
0369おれさま ◆6CTEZS59O00a
垢版 |
2018/12/07(金) 10:20:09.17
Mathクラスがなぜ静的クラスなのかを説明している文だけど
関連した機能を一つのクラスにまとめることでわかりやすいから、
みたいな説明がされている

これって説明になってないと思う

そうじゃなくて、このような数学的な処理ってのは
引数を渡して即座に処理をして結果を返せば足りるんで
いちいちデータをフィールドに格納しておく必要はないから
ってのが最大の理由じゃないの

そもそもインスタンス化の最大の利点はインスタンスごとに
異なるフィールド値を格納しておくことができる点でしょ

そこを説明してないのってちょっとあれだと思うんだけどどうなんだろうか
ちがうんかね
独習287ページ
0370おれさま ◆6CTEZS59O00a
垢版 |
2018/12/08(土) 03:39:21.77
値型の値渡し
参照型の値渡し
値型の参照渡し
参照型の参照渡し

今読んでてちょい混乱したけどもうおk
「値渡しはコピー」で
「参照渡しはこれをみてね」
みたいな理解でいけた

これCでもやったような記憶があるがデジャブだろうか

面倒だがひとつひとつテストコードを自分で書いて確かめてみようか
0371おれさま ◆6CTEZS59O00a
垢版 |
2018/12/08(土) 11:56:46.33
自作のJavaプログラムだけど、ちょっと前から動かなくなってた
どうやらJDKのパージョンアップにともなって仮想マシンにアクセスできなくなっていた
ユーザー側の問題になるんだけど、バージョンアップ程度で環境変数やらいじらせるのっていまいちだな
やっぱwindowsアプリつくるならC系なのかね
0372おれさま ◆6CTEZS59O00a
垢版 |
2018/12/09(日) 07:36:37.58
素数かどうか調べるプログラムに感心した

平方根となる小数を切り捨てて整数にする
この整数の値になるまで2から順に除算をして
余りが0になるものがあるか調べる
ヒットする場合は素数ではない

var prime = true;
for (var i = 2; i <= Math.Floor(Math.Sqrt(num)); i++)
{
 if (num % i == 0)
 {
  prime = false;
  break;
 }
}

中学校の数学で必死こいてやってた作業と全く同じだ
「真ん中」まで調べる的な
0373おれさま ◆6CTEZS59O00a
垢版 |
2018/12/09(日) 07:49:41.09
IEnumerable<>を戻り値として使うイテレーター構文は
foreachを簡単に使えるようにするために利用される
(foreachを使えるようにIEnumerableインターフェースを実装するのは大変なので)

ポイントは
yield return (と、yield break)
0374おれさま ◆6CTEZS59O00a
垢版 |
2018/12/09(日) 15:59:29.32
独習318ページの3.@の解答
readonlyと書いてあるけどprivateだよなこれ
いちいちここに書いてないけど誤植がちらほらある
誤植だと思い違いしてるケースも考えられるので実際困る
0376おれさま ◆6CTEZS59O00a
垢版 |
2018/12/11(火) 14:39:54.48
インデクサーの説明わかりにくいなあ
インスタンス名[index] でインスタンスを利用したいときに使うみたいな感じか
フィールドが配列の時に使うとうまい具合に組み合わさって利用価値があるみたいな
0377おれさま ◆6CTEZS59O00a
垢版 |
2018/12/11(火) 15:00:20.81
インスタンス名[ ] の形式で利用したいなら自由に使えるようなものなので
例えば[ ]の中が要素番号的なものでなくても使えると。

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」
 }
}
0378おれさま ◆6CTEZS59O00a
垢版 |
2018/12/11(火) 15:02:25.81
で、フィールドが配列の時に、インデクサーを組み合わせて使うと
真価を発揮できると(まるで真価を発揮できてない例だが・・・・

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」
 }
}
0379おれさま ◆6CTEZS59O00a
垢版 |
2018/12/11(火) 15:31:09.84
this[string st]
this[int index]
の部分が大事で、こういう使い方をすると便利だなと思うような場面で使えば良いのかな
特にインスタンスを配列ライクに使いたい場合
インスタンスをforで回しながら何かをインスタンス内のどこかに代入していきたいとか
0380おれさま ◆6CTEZS59O00a
垢版 |
2018/12/13(木) 14:28:36.18
忙しくなってきて時間裂けなくなってきたけど
少しずつでもいいんでやっていこうと思う
0381わがはい ◆0BMoNHqNlM
垢版 |
2018/12/14(金) 21:36:14.76
マッマに新しいPC買ってもらっただで
今までは簡単なアプリをGooglePlayにリリースしてきたけど、ようやく本格的なアプリが作れそうや

あとは今運営してる比較サイトもAjaxで非同期にデータベースとアクセスできるようにしたい
Googleが提供してるFireBase使えば、サーバーサイドの開発する必要すらないみたいやな
便利な時代になったで
0382おれさま ◆6CTEZS59O00a
垢版 |
2018/12/15(土) 08:52:59.06
ぐぐるさんは優秀なapi無料で公開してくれてるからありがたいんだけど
セキュリティ固めてる環境からアクセスするようコードに仕込んでると
そのうち担当者から怒られそうなのがネック
0383おれさま ◆6CTEZS59O00a
垢版 |
2018/12/16(日) 13:50:25.94
ふぅ 8章まで終わった
覚えてるのかと言われたらスッカスカだが一応理解はした
スッカスカで先に進むと理解できなくなりそうだが
ここは敢えて進むのだ
0384おれさま ◆6CTEZS59O00a
垢版 |
2018/12/17(月) 10:25:03.37
>>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)

こんな風に
0385おれさま ◆6CTEZS59O00a
垢版 |
2018/12/18(火) 12:39:07.59
ちょいGUIに寄り道する
入門本買ってあるので簡単なものを作れるようにしていく
Javaの時と同じ流れでやっていく
■ このスレッドは過去ログ倉庫に格納されています

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