ハッシュ使うのやめてクラスにしましょう
■ このスレッドは過去ログ倉庫に格納されています
ハッシュで使っていいのは、
キーの数が5つ程度まででしょうな。
それより大きなものになると
クラスにした方がいい。
ただの値の塊であるハッシュは
メンテナンス性が悪く変更に弱い。 >>1
ハッシュって連想配列って意味で使ってますか? >>2
はい、そうです。
データベースから取ってきた値を
そのままハッシュ(連想配列)にする。
データベースのカラムとハッシュのキーが
一対一で結びついている。
こういう設計は最悪です。
メンテナンス性が悪すぎます。 >>3
たしかにそういう側面はあるよねえ。
静的型付言語だととくにコンパイル時の型チェックで名前が正しいか
チェックされないっていうのがあるし。 連想配列のほうが良さそうなので言い方変えますよ。
設定ファイルでもありますね。
ファイル(例YAML)を読み込んで
その構造がそのまま連想配列になってる。
それをアプリからそのまま参照するとか。 >>4
「キーのスペルミスに弱い」という話ですね。
それも一つです。
まず自由なキーが使えた方がいい。という例は少ないです。
使えるキーは普通あらかじめ決まっているものです。
スクリプト言語のせいで連想配列が簡単に
使えるように成りましたが、大規模アプリを作る上で
連想配列はデメリットも多いです。
そうそう、クラスにした時の内部データ(プライベート)であれば
連想配列でいいですよ。連想配列のままアプリ全体で使うのではなく
クラスでラップしろってことです。 連想配列だとリファクタリングにも弱いですね。
設定ファイルのキーの名前を変えようと思っただけでも、
連想配列を直接使用していると、その影響範囲が
どこまで及ぶかわからない。
クラスであれば、メソッド名(プロパティ)の
変更のリファクタリングを行うだけ
互換性を維持するために、設定ファイルで古い値を
使えるようにしたり旧メソッドを残しておくということも簡単です。 だから
KEy => 値
これを
KEy => クラスオブジェクト
で、良いんだろ? >>10
それ、値がオブジェクトになっただけだろw
KEy => 値
これを
メソッド => 値
(または、プロパティ=> 値)
こうしろって話。
ちなみに俺がプロパティと呼んでいるものは、
変数と直接繋がっているわけじゃなくて
内部的にメソッド呼び出しに変換されているもののこと
説明しなくてもわかると思うけど。 >>11
いや全くわからん
最初クラスって言ってたのにてメソッドだとかプロパティになってるし
Keyをメソッドにするって事は、1回1回のハッシュ検索にメソッド呼び出す事になんの? メソッド呼び出ししてても、内部でハッシュを使ってるなら、
高速に値を検索可能ですよ。 関連スレです。
こちらも是非ご覧下さい。
【毛の壁】脱アルゴリズム宣言【FXST】
ttp://peace.2ch.net/test/read.cgi/tech/1403215505/ >>13
別の事やる為に速度妥協してるアルゴリズムを高速とは言わない >>15
大部分の速度が必要ない所に、速度を求めてどうするw
速度厨房はこれだから、役に立たないんだよ。
そんな小手先の最適化よりもメンテナンス性が大事。
内部でハッシュを使っているなら、たんなる
メソッド呼び出し程度の速度低下しかおこらん。 >>16
メソッド呼び出し程度の速度低下って。
素のハッシュ検索に比べてどの程度、速度落ちると思ってんだよ
話にならん雑魚だな つうか速度落とさずそれと同じ事やるなら二重ハッシュだろうが
管理的な何か => { Key => 値 }
これをわざわざ
クラス => 値
にしたらおせーだろうが知的障害か
あと、こういうのは別にハッシュの使い方自体を変えるんじゃなく、
ハッシュ自体は今まで通りのハッシュの使い方で
YAMLとかにバッチ処理与えるスクリプトかけば終わるんだよ
新しい規格を広めるよりそっちのほうが格段にコスパが良い
そもそもクラスって概念の応用ごときで新しいものは生まれない
新しいもの作るならラムダまで掘り下げろ
ラムダを二重にしたものがクラスなんだが、それは理解しているのかと
雑魚は入門からやり直せ > 管理的な何か => { Key => 値 }
>
> これをわざわざ
> クラス => 値
>
> にしたらおせーだろうが知的障害か
誰もそんなこと言ってないだろ?
クラス => { メソッド => 値 }
こうだろ。大丈夫かなこいつ?
だいたいなんで速度とか言い始めたんだ?
速度が重要な場所の話なんかしてないし。 学力足りてねーよ
そしていってる事が2転3転して説明能力さえない
それだけで学歴の低さがうかがえる
1回もプレゼンテーションやったこと無いだろお前
高校生か?高卒か?
死ね ほらね。人格否定に走っちゃった。
これは最初の書き込み内容から、
その後の発言まで想像できたね。 人格どうこうではなく言ってる事がどんどん変わってんだよお前は
その知能でプログラミングするのは難しかろうよ
脳トレでもやっとけ >>1 の言いたいことは分からんでもないけど、あくまで連想配列の特殊な場合だから
前提なりを示さないと他人に通じないと思う。
自分は Perl の連想配列(ハッシュ)をまずイメージするから、
「連想配列のキーが自由なことは少ない」というのは理解できなかった。
データベースでも環境変数でも、キーはどんどん追加される
>>1 が考えている連想配列は、プログラムのインタフェースに使われるもの、
もっと言えば、クラスで置き換えられるような連想配列において成立する。
そういう前提であれば分からんでもない
ただし、「クラスにした方がいい連想配列の使い方してたら、クラスにした方がいい」
っていうトートロジーのような気がしないでもない > データベースでも環境変数でも、キーはどんどん追加される
データベースのカラム名、nameとかtelとか、
この名前がどんどん追加される場合ってどういう時? >>25
カラムは増えないね
関係データベースで言うと微妙になっちゃうけど、
キー値が増える(列が増える)って意味で。 そもそも普通はそんな使い方しねーよという使い方をして、
連想配列だめじゃんって言っている気がしなくもない。 >>1は静的型言語限定の話だよね?
それなら理解できる。
動的型言語なら条件付きで理解できるが、
同意はほとんどできない。 ってか古の時代からさんざん議論されてきたことをスレ立ててまで言うことか
やはりアイちゃんの釣りスレなのか ハッシュと同じ機能をクラスで実装するって意味がわからん。
クラスって単にある機能をカプセル化したオブジェクトだから
ハッシュを実装したクラスとかリンクリストを実装したクラスとか
そういう概念になるんじゃないの? ハッシュのなかにクラス入れちゃダメって言ってるの? JavaでもO/Rマッパー(JPA)やO/Xマッパー(JAXB)が一概に良いとは言えんけどな
あと静的型言語でもphpとかみたいに動的配列と連装配列にシンタックスシュガーほしい ハッシュやめてクラスっていう意味がわからん
ハッシュテーブルもやめるの? 設定とかのキーが固定の場合はクラスを使えってことだろ?
キーが不定で増える場合とか、キーの名前を動的に作り出す場合とかは連想配列だろう Hackのshapeは連想配列だけどキーの文字列が固定されていて
宣言していないキーを入れたり宣言されているキーが足りなかったりすると型エラーになる まぁ>>1みたいなのはアプリの全体設計とかしたこと無い人が考えることだな
CIとかも使ってなさそう
staticおじさん臭もほのかに漂う
若いなら、まぁ誰もが通る道ではある typoに弱いのは事実なんだが、いちいちアクセス用のbeanクラスのようなものを
作ってという生産性を落とすようなのとは結局のところトレードオフなんだよね、
で終わるような話題だよな。 >>40
そもそも構造体代わりのBeanなんて作るなよ。
Objectから値を取り出すときは、常に何らかの処理をして出せよ。 BeansはBeanInfo実装したりBeanの中にPropertyChangeSupport入れなきゃならなかったりするのに、
単なる構造体のようなclass作ってbeansだと
言い張るアホが多いコト多いコトから。
それじゃjava.beansの恩恵を受けられずに意味がないってのに。 1 は腕自慢の新人で、できそこないのオッサンのコード見て叩いて俺スゲーって思ったんだろう。
みんながそんなヘボと仕事してるわけじゃないんだから、なかなか共感が得られなくても仕方ない。
必要なときにはやるけど必要じゃなければやらない。そんだけ。
普通しないことは普通しない。そうだね。
まあ、まるきり >24 だね。 PHPでは、ちょっとしたものを作るとき、クラスとハッシュのどちらの実装がいいか? ハッシュテーブルの事をハッシュって略すのって普通なの? >>45
普通だと思うよ。ティッシュペーパーをテッシュって言うでしょ。
だから全然ふつうのことだと思うよ。 紛らわしいから避けるべき用法な気はするけど、特にスクリプトでは結構使われてるんだよな 連想配列の実装がハッシュテーブルである保証はあるのか? このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所 >>46
vb(a|s)に連想配列ないから帰れよ
Dictionary オブジェクト使わせてもらってる身分でしゃしゃってんじゃねえぞ >>60
, 、、 ,, 丿⌒ヽ、
, ' ____ " 、、 /⌒ ヽ
, ' /⌒三 ⌒\ ', ( す す )
; /( @)三(@)\ ; ) い ` (
; /::::::⌒(__人__)⌒:::::\ ; _ / ま 丿
| u |r┬-| u | ; ヽ 、_ノ せ /
\ u `,. -'"´´ ̄`ヽ ; ヽ、_ノヽ ん ノ
_ / (___ | ', ) : (
,、' / | ; ( /
、 ( ̄ | ; ヽ、_ノ
 ̄ ̄ ̄| | ; ジャップまた負けたのかwwwwwwwwwwwwwwww ペコwwwwwwペコwwwwww
ペコペコペコペコwwwwwwwww
ペコペコペコペコペコペコペコペコペコペコペコペコペコペコwwwwwwwwwwwww
ペコペコペコペコペコペコペコペコジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwプwwwwwwwww ハッシュは実装方法に関する表現なんだから
連想配列って言えよ どうせ1個か2個しか言語知らない奴のたてたスレ
バッチ処理する考えすら思い浮かばないから静的言語しか出来ないんだと思う
この手の発想に落ちるのはJAVA使いだろう
JAVAは害悪だな >>67
バッチ処理ってなあに?無知な桃白白にやさしく教えて このように入力に対して一連の手順で加工しその結果を出力として返す処理をバッチ処理といいます >>70
入力に対して一連の手順で加工しその結果を出力として返す処理をバッチ処理と
仮定してもバッチ処理する考えすら思い浮かばないから静的言語しか出来ないんだ
とのつながりがわからなくない?だからたぶん違うんだと思うよ。 頭の悪い奴はたったの3行でも読みにくい文章を書く
死ねゴミ というかお前ら>>67の言わんとしてる事が理解出来るの? 別に一生理解しなくても困らないならいいんじゃないのって思う
周りで誰もやってないならそういうレベルの場所にいるってだけ バックグラウンド系の話かと思ったが
コマンドのチェーンの方を言いたかったのか オブジェクトとハッシュテーブルの区別がない言語もあるのに。
そもそもそれぞれ用途が違うし、どういう文脈の話なの
beanに限った話?クラスがわりにハッシュ使うのやめろって話? >>78
Map<String, String> getPerson() {
Map<String, String> person = new HashMap<>();
person.put("name", "たおぱいぱい");
person.put("bloodType", "O");
return person;
}
こういうのやめろってことだと思うよ。 >>79
なるほど。やっぱり言語や用途によるとしか言えないね
静的型の場合、ハッシュじゃ型情報が1個になるから基本クラスでいいけど、
メンバを動的に増やしたい時はハッシュになる。JavaのPropertiesみたいに。
動的型の場合は使い分けがあんま分からんね。 >>80
メンバを動的に増やしたいときってどういうときに必要なの?
リストじゃあかんの? >>80
PropertiesはクラスでラップしてるからOKの部類っすよね。
なので、>>80も>>7とほぼ同じ考えかと。 >>81
話がまた戻るが速度次第でしょ
キーが多いとか実行環境が遅いとかならリストじゃつらい
そもそもMapなりハッシュMapなりを使う理由の大半は速度だろ? >>83
速度が必要ないのに、クラスの代わりに使う人がいるんだよ。
定義するのめんどくさ〜いって。
それをどう思う? >>84
その方がコードが速く書けて仕事が速く終わるというならアリなのかもしれない
仕事の速さも要求されてないのにそんな事してるならタダの物臭 >>81
リストでもいいけど、添え字アクセスになっちゃう
用途の違うメンバを0,1でアクセスしたくない
ハッシュテーブルは連想配列のインターフェースがあるわけで。
>>84
クラス使えでいいよ。ハッシュリテラルでもなきゃ
ハッシュで書いた所で楽にならんし、型チェックも効かないし クラスに置き換えるべきタイミングの見極めが適切にできて
その作業を確実に素早くできるなら問題ない
まあ単に俺カコイイってだけの自己満臭が拭えないけど 後でクラスに置き換える必要が出るなら
最初からクラスつかえや、と思うな
クラスで実現できない部分があるからハッシュ使うわけで なるほど思い出した
システムハンガリアンで簡易型チェックを組み込んだりしたわ つかよっぽど小規模なツールでもなきゃハッシュとか使うな
O/Rマッパー使えよう JavaScript「連想配列がObjectなワシはどないしたらええんじゃ…」 javascript使うのやめてjavaにしましょう JavaScriptの仕様は無法もいいとこだが、こうもブラウザで使われてちゃあな。 連想配列よりC#のDataSetのほうが許せん
なんなんだよアレ ttp://www.24w.jp/study_contents.php?bid=javascript&iid=javascript&sid=array&cid=005
こういうのとか逆のケース多く感じる
連想配列って紹介してるけどそりゃプロパティだろ
ハッシュっぽくプロパティ指定できるJscriptにも問題あるが >>97
そのページは連想配列っぽい使い方だからおかしくないが JAVAがメインな奴って
明らかにズレてるからレスで分かる Javaしか知らんやつが指示をだすとマジでヤバいからな
プロジェクトが膠着する 連想配列というかメッセージのオブジェクトに連想配列を使うことがあるけど、
流石に数が増えてきたらプロキシオブジェクトを使うよね
単純にそういうことでしょ? perlもクラスはハッシュで出来ている。クラスとハッシュは同じものを違う側面からみてるだけ。
定義するのが億劫なだけで、定義さえしてしまえばクラスの方が使い易い。 〃〃∩ _, ,_
⊂⌒( `Д´) < ヤダヤダ!ハッシュがいい!
`ヽ_つ ⊂ノ
ジタバタ
〃〃∩ _, ,_
⊂⌒( `Д´) < クラス使うなんて、ヤダヤダ!
`ヽ_つ__つ
ジタバタ
_, ,_
(`Д´ ∩ < ヤダヤダ
⊂ (
ヽ∩ つ ジタバタ
〃〃
〃〃∩ _, ,_
⊂⌒( つД´) < ヤダヤダ
`ヽ_ ノ ⊂ノ
ジタバタ
∩
⊂⌒( _, ,_) < ヤダヤダ…
`ヽ_つ ⊂ノ
ヒック...ヒック...
∩
⊂⌒( _, ,_)
`ヽ_つ ⊂ノ zzz… コンパイラとインタプリタとideが賢くなればいいんじゃね 仕事の速さと実効速度が優先されて、
安全性やらメンテナンス性の犠牲が許されるなら
ハイパースパゲッティワンメソッドコピペプログラミングが一番早かったりするな
綺麗に作ってある部品を取り込もうとするとその流儀にあわせる必要が出るからあわせるが
そういう物がない部分なら綺麗に作るのは先行投資的コストになる
先にコストを払ってハッシュマップやら何やらをラッピングするか
後にコストを払ってバグ修正やメンテナンスに苦労するか
の選択、後者はリスクコストであって確定コストじゃないからかなり軽視さされるけどね
品質低かろうかバレなきゃ直す必要ない?コストかけるなんて無駄?せやね >>108
コピペするってことはすでに使用されている実績のある
安定したコードがあるってことだ。コピペこそ最高のプログラミングテクニック。
素人にはわからないだろうがな。 そうして無駄な処理が量産されるのだな
かつ、本人もメンテできないという… >>110
本番運用に入ったら基本触らないからな
実績のある安定したコードだからメンテする必要もない
コピペが悪いというのは自分でコードを書きたい素人が陥る自己満 .NETの話だがEF知ってればハッシュ使う気にはならない
DataTableは型付も含めて滅びていい マクロ使って二度書き超絶回避されるよりコピペの方がいいわな
あと本質的に違うものだけどいまは同じ処理をしてるものもコピペの方がいい ハッシュいらない
リストで良い
:a => 1
[:a , 1] case
when 1
関数A(引数a);
関数C(引数c);
when 2
関数A(引数a);
関数B(引数b);
関数C(引数c);
when 3
関数A(引数d);
関数B(引数e);
関数C(引数f);
end
こんな処理が今あるけど、事実上のコピペしてるな
when 2 , 3 はmapでも良いけど
when 1 に関してのコピペをやめるなら こんな事になる
def f
関数A(引数a);
end
def f_1
f()
関数C(引数c);
end
def f_2_3
f()
関数B(引数b);
f_1()
end 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
UL2UM ■ このスレッドは過去ログ倉庫に格納されています