Javaからプログラム始めたけど関数で躓いて3日経った

公開日: : 最終更新日:2015/07/29 JAVA, プログラミング, 初心者 , , , ,

1: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:05:24.673 ID:cHZclClD0.net
Javaに躓いたわけじゃなくプログラム自体に躓いてしまった

2: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:06:28.264 ID:q8hnaTksd.net
同じじゃないの

 

4: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:07:18.189 ID:cHZclClD0.net
>>2
Java特有の文法で躓いてるなら他の簡単な言語に移ることもできるけどそれ以前のところだからどうしようもない

 

3: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:07:16.200 ID:0n2Er3Vre.net
javaなんて糞言語辞めとけ

スポンサーリンク

7: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:08:27.204 ID:cHZclClD0.net
>>3
糞言語かどうかを判断できるレベルに達してないし別にこのままで良いわ
しっかり使えるようになってきて糞だと思ったら乗り換える

 

5: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:07:53.059 ID:vGU5TTDB0.net
何がわからないの

 

10: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:10:30.644 ID:cHZclClD0.net
>>5
関数って戻り値1つしか返せないっぽいけどどう使えばいいの?
大きい処理(繰り返しとか条件とかの複雑な奴)で作るのか1行で書けるような小さい計算で作るのかがいまいちピンとこない

 

11: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:11:54.479 ID:7az30YAA0.net
>>10
javaはよくわからんが配列で返したりoutで返せないのか?

 

8: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:09:09.112 ID:I9XG+Vc30.net
躓くも何もやりたい処理をそれが出来る関数に任せるだけじゃん
まあ最初は汚いソースになるだろうけど人の見たりして洗練してきゃいいだけだし

 

12: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:12:11.018 ID:cHZclClD0.net
>>8
その処理の規模が分からない
RPGで言うなら「戦闘」を全部ひとつの関数にすればいいの?「ダメージ計算」「アイテムの個数を減らす」「HP計算」の関数をそれぞれつくればいいの?

 

17: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:16:16.223 ID:2wfUREW1d.net
>>12
戦闘のクラスの中に必要な処理の関数を詰め込む

 

18: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:16:30.959 ID:LWAjThfqM.net
>>12
コードは数書け
いずれ分かる

 

27: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:25:12.782 ID:6aWvJFYA0.net
>>12 そもそもダメージ計算とか簡単な処理になんで自作関数作ろうと思ってるの?

 

29: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:27:32.044 ID:cHZclClD0.net
>>27
自作じゃない関数ってあるの?ライブラリって奴?

 

31: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:28:38.721 ID:zU3QlT7td.net
>>27
ダメージ計算は例えの話だろ
作るとしても独自の計算式で出すなら自作関数が必要になるだろ

 

50: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 09:37:29.203 ID:Nkl/QAfG0.net

>>12
こう考える

「RPG」から見て、「戦闘シーン」や「フィールドシーン」や「オープニングムービーシーン」はサブ機能である
「戦闘シーン」から見て、「プレイヤーのターン」や「敵AIのターン」はサブ機能である
「プレイヤーのターン」から見て、「行動選択」や「効果適用」はサブ機能である
「効果適用」から見て、「使用したアイテムの個数を減らす処理」や「演出」や「ダメージ計算処理」はサブ機能である

こんな風に階層化して考えるので、答えは『どの規模のものを取ってもれも関数(あるいはクラス)である』となる

この“サブ機能”を関数で作るかクラスで作るかは比較的些細な問題だが、
Javaの場合は最底辺のサブ機能以外は大体クラスで作ればおk
特に、「~~シーン」とか「~~のターン」みたいに“同じサブ機能のバリエーション”である場合、
いわゆる“ポリモーフィング”ってやつで作ると何となく上手くいく

 

51: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 09:52:42.302 ID:cHZclClD0.net
>>50
分かりやすいありがとう
クラス間での関数の共有とかもできるの?

 

52: ◆VIP.NJP4S2 2015/07/24(金) 09:56:18.350 ID:0N462UFR0.net
>>51
javaではクラスの中にしかメソッドは書けない。
cなどでいう関数を作るならpublic staticメソッドで書く。

 

53: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 10:07:46.122 ID:Nkl/QAfG0.net

>>51
「共有」といっても幾つかのパターンがある

例えば、「プレイヤーのターン」と「敵AIのターン」では、「行動選択」が違うだけで「効果適用」自体は全く同じ
この場合、次のようにクラス設計すればよい

┌───┐
|.ターン.|
└───┘

┌────┴───┐
|                |
┌─────────┐┌─────―┐
| プレイヤーの.ターン || 敵AIのターン |
└─────────┘└──────┘

異なる処理である「行動選択」だけそれぞれで実装して、
共通処理である「効果適用」は「ターン」の方に持たせておく

もっと単純でどこでも使う、「上限と下限と現在値を指定して、値を指定した量増減する」(HPにもMPにもアイテム数にも使える単純な数値処理)みたいなのは、
「RPG」というメイン機能がとりあえず持っといてどこからでも使えるようにすればいい
ただ、最早このレベルだとRPGに限った処理でもないから、「汎用計算処理」みたいなクラスを用意してどこから使えるようにする方が適切だろう

 

55: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 10:17:50.305 ID:cHZclClD0.net
>>53
クラス全く知らないのに理解できた
本当にありがとう

 

61: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 10:25:23.727 ID:Nkl/QAfG0.net

>>55
知らねえのかよw

さて、RPGに限らない処理っていうと他には「BGMを流す」「画面に何かを表示する」みたいなのが考えられるが、
こうやってそういうのをどんどん別のクラスに移動していくと大変面白い事が起こる

今まで「RPG」というメイン機能の下にいろいろなサブ機能がぶら下がっていたように見えたのが、
今度はメイン機能であるはずの「RPG」が汎用機能の下にぶら下がり始めるわけだ(もちろん、RPGから全てのサブ機能が消えるわけではないが)

すなわち、「ゲームの汎用の枠組み」がまずあって、「RPG」はそのサブ機能として作る事になる
あるいは「アプリケーションの汎用の枠組み」のサブ機能として「ゲームの汎用の枠組み」ができて、さらにその下に「RPG」というサブサブ機能、という形かもしれない
これは非常に重要な事で、一度その「枠組み」が完成してしまえば、何を作るにしてもそいつを利用して作ればいいって事になって楽チン

ところで「枠組み」ってのは英語で「フレームワーク」っていうわけだが、
プログラミングで「フレームワーク」って言葉があるよな? つまりそういう事だ

 

13: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:14:40.749 ID:raEneOTX0.net
とりあえずやってみるってのが嫌なタイプ?

 

19: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:16:39.364 ID:cHZclClD0.net
>>13
分からんかったらすぐ投げる癖があるのよね
治したいけど治らん

 

14: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:14:48.433 ID:9xv6I0xsd.net
あんまよく覚えてないけどクラスの型を戻り値にしてそんなかに構造体とかもってるんじゃないかな

 

21: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:17:19.587 ID:cHZclClD0.net
>>14,17
やっぱりクラスまで行かないと完全に理解は出来ないか

 

16: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:16:04.839 ID:K2hWe1EhM.net
オブジェクト指向は比較的理解しやすいぞ

 

24: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:19:06.076 ID:cHZclClD0.net
>>16
いろんなものを役割を持ったオブジェクトとして捉える?みたいな感じだよな?
自転車のギアがどうとかこうとか

 

26: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:23:33.256 ID:WEEeM/nv0.net
関数なしで書いてみて、
何度も同じこと書くなら関数
別のプログラムでも使うならクラス
でやってみると関数やクラスの意味がわかるぞ

 

35: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:33:12.209 ID:mVuMv3xld.net

戻り値の本質は「回答」だよ
日本語できないアホが質問を質問で返してきたり
聞いてもないこと返してくるけど
出来るだけ素直な回答を返すようにすればいい

大きい値を返したいならクラスそのものを返してしまえ
嫌ならシングルトンにすればいい

 

37: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 08:36:54.285 ID:K7AErO8IM.net
継承とインタフェイスの使い分け教えてください

 

41: ◆VIP.NJP4S2 2015/07/24(金) 09:15:20.942 ID:0N462UFR0.net
>>37
抽象クラスとインターフェース?
抽象クラスは未完成部分があるクラス。
インターフェースはクラスの設計図。

 

39: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 09:12:42.478 ID:ck/7QGVG0.net
完全に独学だしCの話だから違うかもしれないけど俺の経験上関数は極力分けた方が見やすくてわかりやすいと思った
コード書く上で一番大切なのは如何に自分が読みやすいように書けるかだと思ってる

 

40: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 09:14:02.901 ID:CovNkAi1p.net
書くのはワタシ、読むのはアナタ
関数で分けすぎるとあっちへこっちへ飛んで集中力切れる

 

46: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 09:18:46.151 ID:cHZclClD0.net
>>39-40
真逆の考え方だなー
読む人の事を考えて書くべきなんだろうね
自分しか読まないなら自分の事を考えて書くべきだし

スポンサーリンク

42: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 09:16:02.143 ID:0N462UFR0.net
とりあえず「スッキリ分かるjava入門」「スッキリ分かるjava入門・実践編」を買うといい。

 

47: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 09:19:15.530 ID:cHZclClD0.net
>>42
それ買おうとしてたやつだ
やっぱり良いのか

 

43: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 09:16:08.920 ID:aF5ORWzUp.net
Java博士のお兄さん方!
JavaのジェネリックとC++のテンプレートの違いを分かりやすく教えてください!!

 

44: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 09:16:41.151 ID:0N462UFR0.net
>>43
ほぼ変わらん。

 

45: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 09:17:14.633 ID:aF5ORWzUp.net
>>44
変わる部分を知りたい

 

48: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 09:24:18.361 ID:0N462UFR0.net
>>45
java
new ArrayList<Integer>
c++
new List<int>
javaは基本データ型が使えないからオブジェクトに包まれた(ラップされた)ラッパークラスというのを使わないといけない。
ただ自動変換などがあるから何とかなる。メモリ効率あれだけど。
問題は
Integer[] a = new Integer[5];
int[] i = a;
とかだと自動変換されないこと。

 

49: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 09:30:38.679 ID:txRxBBWO0.net
人のソース読んでみるのがいいかもな
Apacheのcommons ioとか読んでみると勉強になる

 

56: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 10:19:38.007 ID:zU3QlT7td.net
メソッドにするか別にクラスで独立させるか迷うんだよなあ
最初の設計は大事だわ

 

58: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 10:20:30.134 ID:cHZclClD0.net
>>56
できる人でも迷うようなもんなのか…

 

59: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 10:22:25.218 ID:6WZ0E0PBa.net
後から予想外に大きくなることあるからなぁ。
本来はその予想外が起きないようにしっかり設計しとかないといけないのだけれど。

 

60: 以下、\(^o^)/でVIPがお送りします 2015/07/24(金) 10:22:31.224 ID:5woo7JgN0.net
デザインパターンで検索

引用元: http://viper.2ch.sc/test/read.cgi/news4vip/1437692724/

関連記事

20150731041947

プログラマーはwindows10に変更しないほうがいいぞwwwww

1: 以下、\(^o^)/でVIPがお送りします 2015/08/05(水) 08:13:43.1

記事を読む

bsN866_sikamettura

JavaかC言語はじめようと思うんやけども

1: 風吹けば名無し@\(^o^)/ 2015/11/04(水) 14:11:24.68 ID:w

記事を読む

c561d52a81b982d24f5890bd0205d95f_s

PCのブラウザ開くと変な広告が表示されるんだがこれって何?

1: 以下、\(^o^)/でVIPがお送りします 2015/04/23(木) 15:11:18.7

記事を読む

dt-mthread01_01

マルチスレッドのバリアが役立つケースってどんなの?

1: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 07:39:42.7

記事を読む

sTDvRR7

電子工作をはじめてみた

1: 以下、\(^o^)/でVIPがお送りします 2015/10/24(土) 18:50:39.8

記事を読む

jbapp-autotouchforios7-01

iphoneの脱獄アプリAutoTouchでマクロを組もうとしてるんだが、エラーの意味教えてくれ

1: 以下、\(^o^)/でVIPがお送りします 2015/10/15(木) 23:01:21.7

記事を読む

3U0YUBx

ぷよぷよのプログラム組んだことある奴いる?

1: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 22:09:05.6

記事を読む

https---www.pakutaso.com-assets_c-2015-05-OOK58_nantekotodabouraku-thumb-autox1000-15486

プログラミング中級者にありがちなこと

1: 番組の途中ですがアフィサイトへの\(^o^)/です (エーイモT SEf6-ac6s) 20

記事を読む

002

今最も稼げるプログラミング言語がScalaに決定 次点でPythonやSwiftなど

1: 番組の途中ですがアフィサイトへの\(^o^)/です (ワッチョイ a976-++qg) 20

記事を読む

https---www.pakutaso.com-assets_c-2015-01-LISA78_MBAsawaru20141018102912500-thumb-1000xauto-5892

linuxインストールしたはいいがOS元に戻せなくなったったったwwwww

1: 以下、\(^o^)/でVIPがお送りします 2014/11/12(水) 18:04:20.7

記事を読む

Huawei-Mate-8-benchmark-post-launch_1
Androidのベンチマーク、10万点を突破 インフレが止まらない

1: 番組の途中ですがアフィサイトへの\(^o^)/です (ニククエ

hGJvbfh
せっかくの休みだ。原付で>>5に行く。

1: 名無しさん@おーぷん 2015/11/29(日)06:13:2

9xHNnte
XperiaZ5からdocomoのロゴだけ消せるシートが発売開始

1: 番組の途中ですがアフィサイトへの\(^o^)/です (アウアウ

bsLISA78_MBAsawaru20141018102912
子供にプログラミング教えることになりそうなんだが、どうやって教えたら良いんだ?

1: 以下、\(^o^)/でVIPがお送りします 2015/11/2

top
国内で最大容量の8THDDが2万円台に値下がり

1: 海江田三郎 ★ 2015/11/29(日) 14:43:35.

→もっと見る

  • Sorry. No data so far.

PAGE TOP ↑