◎正当な理由による書き込みの削除について: 生島英之 とみられる方へ:Ruby 初心者スレッド Part 61 [無断転載禁止]©2ch.net YouTube動画>1本 ->画像>1枚
動画、画像抽出 ||
この掲示板へ
類似スレ
掲示板一覧 人気スレ 動画人気順
このスレへの固定リンク: http://5chb.net/r/tech/1503644351/ ヒント: 5chスレのurlに http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 60
https://mevius.2ch.net/test/read.cgi/tech/1493398918/ るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/ Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/ 逆引きRuby
http://www.namaraii.com/rubytips/ たのしいRuby 第5版、2016 Effective Ruby、2015 メタプログラミング Ruby 第2版、2015 Rubyのしくみ、2014 改訂3版 基礎 Ruby on Rails、黒田努・佐藤和人、2015 リファクタリング:Rubyエディション、2010
前スレ
>>997 ,999
ありがとうございます。
自分のレベル的に997の方しか理解できていませんが、
999の方もがんばって読み解いてみます。
each_with_object なんて初めて見た。 a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]] b = a.each_with_object([[],[]]) {|(x, y), acc| acc[0] << x; acc[1] << (y || x) } p b # => [[1, 3, 4, 5, 6, 8, 9, 11, 13], [2, 3, 4, 5, 7, 8, 10, 12, 14]]
evens = (1..10).each_with_object([]) {|i, a| a << i*2 } # => [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] each_with_objectってのは引数一個(空の配列)とブロックを取るみたい。 ブロックには、引数が2つ渡り、最初は、列挙される要素、2番目は引数(空の配列)が渡るらしい。 ブロックの戻値がeach_with_objectの戻値かな?
a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]] p a a.each{|(x, y)| puts "x = " + x.to_s + "y = " + y.to_s} このtupleみたいな(x, y)ってのは何だ? Rubyにtupleがあるのか?
ブロック中での最後の評価値、じゃないのがこれの使い易いところ 戻り値には、each_with_object(ここのオブジェクト)を返す injectでやろうとして b = a.inject([[],[]]) {|acc, (x, y)| acc[0] << x; acc[1] << (y || x); acc} ブロックの最後でこうやってaccを返そうとして頑張っちゃうような時には考えたい
よく判らんが、要素2個の配列をブロックの引数で(x, y)って受け取れば、 2個の要素はx,yとして受け取れるらしい。
aの配列の個数が変わる場合があるので、とりあえず以下のようにしてみたのですがrslt1とrslt2で結果が異なるのは何故ですか? tobj==[[],[]]はtrueと出ます。 a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]] tobj=[[]]*2 rslt1 = a.each_with_object([[],[]]) {|x,tary|; tary.each_with_index{|n,i| x.instance_of?(Array) ? tary[i]<<x[i] : tary[i]<<x}} rslt2 = a.each_with_object(tobj) {|x,tary|; tary.each_with_index{|n,i| x.instance_of?(Array) ? tary[i]<<x[i] : tary[i]<<x}}
すみません。上のは不要なセミコロンが入っていました。(動作は問題ないみたいですが) a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]] tobj=[[]]*2 rslt1 = a.each_with_object([[],[]]) {|x,tary| tary.each_with_index{|n,i| x.instance_of?(Array) ? tary[i]<<x[i] : tary[i]<<x}} rslt2 = a.each_with_object(tobj) {|x,tary| tary.each_with_index{|n,i| x.instance_of?(Array) ? tary[i]<<x[i] : tary[i]<<x}} p rslt1,rslt2
Rubyの初め方 ルビィの冒険 ↓ たのしいRuby、初めてのRuby ↓ パーフェクトRuby ↓ Rubyベストプラクティス EffectiveRuby メタプログラミングRuby1版or2版 Rubyによるデザインパターン ↓ リファクタリングRubyエディション Rubyのしくみ。 ウェブアプリ方面 パーフェクトRubyonRails RubyonRails5アプリケーション・プログラミング Docker教科書 JapaScript本格入門第二版 入門Git GitHub実践入門 SQL 第2版 ゼロからはじめるデータベース操作 達人に学ぶ SQL徹底指南書 SQLアンチパターン
リファクタリングRubyエディション Rubyのしくみ このふたつは必読
>>前スレ989 それ継承でなくて上書きがダメって言ってるだけじゃん Objectクラス継承しちゃうんだからもうオブジェクト指向言語使うのやめなよ
>>13 最初からwebアプリ(Rails)を作りたい人は
ルビィの冒険
↓
たのしいRuby、初めてのRuby
↓
パーフェクトRuby
↓
パーフェクトRubyonRails
達人に学ぶ SQL徹底指南書
達人に学ぶ DB設計徹底指南書
SQLアンチパターン
テスト駆動開発をやりたい人は
Railsチュートリアル
はじめて学ぶソフトウェアテスト技法
Everyday Rails - RSpecによるRailsテスト入門
>>12 そりゃあんた2次元配列の初期化の基本でしょ。
tobj[0].object_id == tobj[1].object_id なんだから。
tobj = Array.new(2).map([]) とでもしないと。
>>10 x, y = [1, 2]
# x = 1; y = 2
や
x, y = 3
# x = 3; y = nil
を考えれてみれば分かる。
Rubyに多次元配列は存在しない とかいう例のアレにも通じるアレだな Array#*は単純にレシーバを引数回繰り返した結果を返す(値は複製しない) 複製しないってことは同じ配列がいくつも繰り返されるだけだ つまり [[]]*2 と [[],[]] は違う
a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]] a.map {|e| [[e].flatten[0], [e].flatten[-1]] }.transpose => [[1, 3, 4, 5, 6, 8, 9, 11, 13], [2, 3, 4, 5, 7, 8, 10, 12, 14]]
[a.map {|(e)| e }, a.map {|(*,e)| e }] => [[1, 3, 4, 5, 6, 8, 9, 11, 13], [2, 3, 4, 5, 7, 8, 10, 12, 14]]
[a.map {|(e,*)| e }, a.map {|(*,e)| e }]
=> [[1, 3, 4, 5, 6, 8, 9, 11, 13], [2, 3, 4, 5, 7, 8, 10, 12, 14]]
こっちのほうがきれい
>>21 は撤回で
カッコ要らないよ [a.map {|e,*| e }, a.map {|*,e| e }]
>>10 メソッドやブロックの引数の受け取り方は多重代入と似た挙動になってるから
入れ子になった配列も展開して変数に受け取ることもできる
def test(a, (b, (c, d)))
……
end
test 1, [2, [3, 4]]
コードゴルフ(もどき)はあまり好ましいことではないように思える 初心者スレであるから特に splat*を書いてしまったら立ち止まるべきかと
>>18 うぅーん。よく判らん。
Rubyの多重代入が、ブロック引数にも使えるって事なのか?
>>27 上のリンク先の多重代入の説明間違ってるな
カンマで区切る代入はRubyの魔境のひとつなので半端に深入りするのも半端に慣れるのも事故のもとだからやめといたほうがいいかも
多重代入でもハッシュが使えればなーって思うことがたまにある (x:, y: 1, z: 1.5) = { x: -1 }
式の評価の順番がわけわかめになるのでやめちくり><
>>33 それはHash#mergeじゃいかんの?
hash = {x:nil, y:1, z:1.5}
hash.merge x:-1
=> {:x=>-1, :y=>1, :z=>1.5}
>>32 ホントだ。魔境だ。変な仕様だ。
多重代入は括弧により、ネストした配列の要素を代入することもできます。
(foo, bar), baz = [1, 2], 3 # foo = 1; bar = 2; baz = 3
そういえばMatz自身が魔境だと言う動画を見たことある。 Matz 多重代入 で検索。 $変数も魔境だ。C言語の関数ポインタの宣言の読み方も魔境だ。 SwiftのStringも魔境だ。 おっと、失礼!
多重代入、trickyすぎる。 files = ['Gemfile', 'LICENSE.txt', 'README.md', 'Rakefile', 'bin', 'lib', 'maliq.gemspec', 'pkg', 'spec'] 多重代入+括弧で解決します。 (gemspec, *_), files = files.partition { |f| f.match(/¥.gemspec$/) } gemspec # => "maliq.gemspec" files # => ["Gemfile", "LICENSE.txt", "README.md", "Rakefile", "bin", "lib", "pkg", "spec"]
>>35 それだとその後に
x, y, z = hash[:x], hash[:y], hash[:z]
ってやるか
x, y, z = hash.values_at(:x, :y, :z)
ってやった上に必須キー・不正なキーの確認処理が必要になるじゃない
((x1:, y1:, color1: 0xffffffff), (x2:, y2:, color2: 0x00ffffff)) = obj
みたいに配列中のハッシュも多重代入で済ませられたらなってのが動機
……新しい魔境ができそう
長年の謎だったがアスタリスクのことをスプラットとも言うのか
いやアスタリスクはアスタリスクだよ 引数展開をsplatと呼ぶ それに使われるときの演算子だからsplat
>>40 うん、すまんが何を実現したいか理解できんかった
>>41 splat = ビシャ
スプラトゥーンってゲーム流行ってるらしいけど、俺は興味無い。
>>32 ,36
魔境?、よくわからんけど ML や Haskell といったモダンな関数型言語にある
タプルのパターンマッチングをRubyが部分的に導入した(パクった)だけでは?
たとえば SML(Standard ML) だと、以下は魔境でも魔術でもなんでもなく
単なるパターンマッチングの初歩でしかない
- val ((x, y), z) = ((1, 2), 3); (* 先頭の ‘-‘ はSML/NJのプロンプト *)
val x = 1 : int (* 以下はSML/NJ の応答 *)
val y = 2 : int
val z = 3 : int
少なくとも、これをSMLの世界で魔境やら多重代入と呼ぶ人は存在しない
君たちを見ていると、何やら未開の土人がテレビという文明に接して、
それを魔境の道具などと謎に満ちた深淵な事象に認識してしまう映像を思い出す
ただの変数リテラル代入を魔境と呼んでる人はいないと思う
Prologなんか言語自体が パターンマッチングで動作してて 全部魔境だからな
>>46 モダンな関数型言語のパターンマッチングが単なる変数への代入に限定されると
思い込んでるってことは、君も彼らと同じく未開の土人なんだろな
そんなのネットで調べればすぐにわかることなのに気の毒な
>>47 Prolog だと
>>45 の例は以下のようになる
?- ((X, Y), Z) = ((1, 2), 3). % 先頭の ‘?-‘ は SWI-Prolog のプロンプト
X = 1, % 以下は SWI-Prolog の応答
Y = 2,
Z = 3.
なお ML や Haskell といった関数型言語(および Ruby)のパターンマッチングは
変数と値の代入に限定されるけど、Prolog では変数と変数のマッチも許容され、
それを単一化(ユニフィケーション)と呼び、論理型言語の特質の一つになっている
まあそれを魔境と捉えるのはその人しだいだし、確かに初対面では魔境にしか
見えないのも仕方ないのかもしれない
でも自分にとっては、Lisp の caadr やら cadar やらに嫌気がさしていたから、
なんて(人に)優しい構文なんだと Prolog に入れ込む理由の
大きな要因の一つになっていた
同じく、Ruby のケースも導入されたのは 1.8 の頃だと思うけど、
自分はそれを肯定的に捉えている
パターンマッチングを参考に取り入れたはいいけど、つまみ食い的に取り入れたために きちんとした仕様を策定できなくて魔境になっちゃった …という感じでは?
>>45 パターンマッチングと多重代入は別もの
destructuringとかunpackingする部分が共通してるだけ
MLはしらんけどHaskell含めて関数型言語には
基本的に多重代入って考え方がないからそう呼ばないだけだと思うよ
>>50 上でもちらっと言われてるがただの変数代入なら複雑ではない
片方がメソッドの評価であるような場合何が何やらわからなくなる
>>51 スレに要らない人間だってあれだけ言われたのにね
脳の壊れた人間は厄介ですよ
魔境ってのも、仕様的魔境なのか、実装的魔境なのか、その辺があいまいだよねー
>>49 えーと、つまり代入の左右の扱いが等価って事?
何持ってこようとお構いなし?
>>53 どうやら
>>46 のお仲間みたいですね、しかたないから具体的なコードで
Ruby の場合:
$ irb
irb(main):001:0> [[1,2], [3, 4], [5, 6]].map { |(x, y)| x + y }
=> [3, 7, 11]
SMLの場合:
$ sml
Standard ML of New Jersey v110.79 [built: Sun Oct 4 14:45:06 2015]
- map (fn (x, y) => x + y) [(1, 2), (3, 4), (5, 6)];
val it = [3,7,11] : int list
Ruby のメソッド Enumerable#map の引数であるブロックに相当する
SML の構文 が “fn” <pat> => <expr> になる
>>45 の代入の構文は “val” <pat> = <expr> でしかない
さらに具体的なコードをお求めなら、以下を読んで:
関数型プログラミングにおけるクイックソート・アルゴリズムの実装
http://www.h6.dion.ne.jp/ ~machan/misc/qsort-in-fp.html
>>56 直感的に言えば、単一化の概念はそれで合ってる(左辺と右辺を同等に扱う)
そして Prolog に代表される論理型言語では、変数とは未知の存在を表し、
単一化により未知を未知のまま扱う(=計算する)ことができる
それは、人間の持つ自然な「等しい」という高度で抽象的な概念により近いはず
これ以上はスレ違いになるから、続きは Prolog スレで
a,=[1,2,3] こういうのがキモい。 そうしたいときはあえて(a,)とカッコをつけて書くようにしてる。
>>49 LispよりPrologの方が難しいと思うけどな
Lispは表記が読みにくいだけで動作はシンプルだけど
Prologは言語の挙動を理解するのが大変
Ruby, JS スレには、関数厨が、わんさか湧いてくるw 魔境に、片足を突っ込んでる、言語だからかな?w
「回答」ではなく「自分の知っていること」を長々と書くだけだから同定と回避はしやすいね
https://togetter.com/li/1021897 "型は絶対書きたくない" "Ruby3は東京オリンピックまでに
" Rubyの父Matzによる、「楽しいプログラミング体験を届けるために」
#rubykaigi 2016 Keynote
↑これを読んで本当に安心した
少なくともあと10年はRubyで型を書かなくてもよさそうな雰囲気
これで他の言語よりさらに10年遅れることになる
そのころにはすっかり浦島太郎でゴミになってることだろう、良かった
いや、もうすでにゴミなんだろうけど、その認識がもっと広まって
周知徹底していく過程が楽しめる
それでも完全放置プレーされてて単に周りから取り残されて風化していくんなら
それは自然現象なのでありふれてるっつーか、俺自身も含めて皆そうだしアレなんだけど
Rubyの良いところは頑張るんだけど方向性がおかしくてダメ、無意味な努力というのが良い
どのあたりで「折れる」のか、はたまた意地を貫き通して本当に「終わる」のか、見ものだ
これだけ啖呵を切って自ら退路を断ったのだから、ぜひとも華々しく散ってほしい
このようなことが本当に可能なのかどうなのか メソッドが動的に生える場合は対応できないのは仕方が無いとしても 代入という代入を過去も含めてすべて精査しなければ、その変数に 何が入りえるかなど分かりようもない プログラムが分岐していたら可能性が二つに分岐する もっと端的に、配列のようなコンテナで 静的型言語なら同じインターフェースを持ったオブジェクトしか入らないわけだが Rubyのような言語の配列はごった煮状態になりえるわけで・・・ さらに言えば変数への代入にしたって、同じ変数を、使いまわすかもしれない 変数へアクセスするときに適切に型スイッチしているならそれは合法なコードだが 検査ツールはそのことを検出して合法と決断を下さなければならない 型推論もコードを追わないといけないし、適切に使われているかもコードを追わないといけない 両方が泥団子であり、全くの不毛である 型という仲介を通して両者をつなぐとスッキリすることは既に十分実験されていて 分かり切ってるのにあえてこのような泥団子を好む人はいない これから先このような無意味で壮大なことに労力を割くことで Rubyのその他の面の進歩はどんどん遅れて、周りから取り残されていくだろう 10年単位で 是非そうなってほしい
動的型が当たり前の時代が有ったり、静的型が当たり前の時代が有ったり 両社は振り子のように揺れ動くものであるから 今は静的型が人気だが、いづれ動的型の時代が来るかもしれない 今、安易に静的型を取り入れると、そのときになって対応できなくなるから Rubyには静的型を入れない ↑という言い分だが、そもそもが全くの嘘、でっち上げである 思い出してみれば分かるが、動的型の時代など、「無かった」 C言語が登場して以来、ずっと静的型の時代だっただろう 時系列で言えば、C → C++ → Java → C# という感じの登場順かな これらの言語は今でも人気がある、というか、先頭集団 ずっと継続して人気者のグループ これらの言語にRubyが勝ってた時代があったか? だから振り子のような現象というのが、もう、真っ赤なウソ 動的型言語の時代などなかったし、これから動的型言語の時代が来ることもない とにかくあの人は隙あらば嘘をついて人をだまそうとする 例のカルト宗教の勧誘で得たテクニックなんだろうか、知らんがな もう一つの嘘は、動的型言語でもJavascriptのように速度が速い言語もある だから速度を上げるために静的型を入れる必要はない、っていうやつ まぁ嘘っつーかアレだが、Javascriptは物凄く多大な労力かつ非常に高度なことをやって あの速度を得ているわけだが、そんな実装はRubyでは無理って自分で分かってる癖に しれっとこういうことを言う だったら今すぐV8エンジン並みの実装用意しろよ、出来るんだろ?
RubyだけでなくPythonやJavaScriptのような 広く普及している動的言語があるのに 一方的にゴミ呼ばわりする方がゴミ
本当にそうであろうか Pythonは型アノテーションを入れて過去の過ちを修正して未来へ向かおうとしているし JavaScriptは実際ゴミ呼ばわりで、静的型のTypeScriptが評判良いし まぁそのうち静的型の機能を取り入れるでしょう あと、PHPも静的型の機能を取り入れているし Perlも静的型の機能を取り入れている 徐々に周りは進歩している ちょうど資本主義を受け入れた中国のようだ Rubyだけが時が止まってて取り残される恰好なのに さらに時を止めるつもりらしい ->「型は絶対書きたくない」 まるで北朝鮮といったところか 今は東京オリンピックまでに大陸間弾道ミサイルを作りたいと張り切っている 斜めっぷりというか、掛け違えたボタンというか 一回崩壊しないと正すのは無理なのかもしれないな
プログラマが本当に必要だったもの:nullセーフ という気がしている
海を越えられないから自転車は使えないとか言って近所のコンビニに行くだけのために テポドンを持ち出してくるようなゴミクズがまた出たのか
なぜ、ある言語を批判したいというモチベーションが沸くのか不思議 オカンの料理を食うだけの穀潰しによって、オカンの料理は批判されるのである
>>69 >まるで北朝鮮といったところか
>斜めっぷりというか、掛け違えたボタンというか
>一回崩壊しないと正すのは無理なのかもしれないな
自己紹介乙
東京のIT企業が松江に進出08/28 20:15nhk 松江市の技術者が開発したプログラミング言語「Ruby」を活用したシステム開発 を目指して、東京に本社を置くIT企業が松江市に進出することになりました。 新たに進出するのは東京に本社を置くIT企業、「パソナテック」で、28日、 吉永隆一社長が県庁を訪れました。 県庁では調印式が行われ、吉永社長と溝口知事、それに松江市の松浦市長が互いに 連携して事業を進めていくとする覚書にサインをしました。 「パソナテック」は新たな事業所を松江市朝日町のビルの一室に設けて、9月から 運営を開始します。 今後3年間で10人を採用する計画で、松江市の技術者が開発したプログラミング 言語「Ruby」を活用して企業の管理システムの開発を手がけるほか地元のIT 人材の育成などにも力を入れることにしています。 県や松江市も雇用の創出や地域産業の高度化につながるとして企業への助成など支援 を行うことにしています。 吉永社長は「人口減少や高齢化などの課題がある中、地方であっても優秀な人が活躍 できる環境を、産官学で連携しながらつくっていきたい」と話していました。
スレチかもしれませんが質問です。 爆サイというサイトで「なりすまし防止」でパスワードを入れたんですが、解析されて同じトリップを相手に使用されました。 気持ち悪くて怖くなり、それ以来やっていません。 62^4=14776336通りもあるパスワードをどうやって解析したんでしょうか? もし解析ができるなら、やり方までは聞きません。 解析ができるのかできないのかを知りたいです。お願いします。
>>76 本当に62^4通りなのでしょうか?
もしそうなら、総当たりで調べたのでは無いでしょうか?
>>76 Ruby関係ないが
「1234」みたいな簡単な
パスワードはバレてること多いぞ
>>77 数字と英文字の小文字も入れられるんで、その数字になります。
総当たりと言っても、ほんの数分で解析されてしまいました。
カメラから「おまえの顔も見えているぞ」とまで言われました。
ハッタリかと思っていたんですが、なりすまし防止のパスを解析されて、正直おどろき、どこからどこまでがハッタリなのか判らなくなってしまいました。
>>79 数字と英文字を混ぜたパスだったのですが、なぜか解析されてしまいました。
ご返答ありがとうございます。
>>76 トリップはぶつかることがある
元のパスワードと違うパスワードでも同じになるから
正確には62^4=14776336通り以下ってことになる
Ruby + Sinatra + thinでWebアプリの開発を始めました。 ruby Server.rb -p 8080でthinを起動し、ブラウザで表示を確認しながら作ってます。 Server.rbを編集する毎にthinをstop'n'runしてます。 thinを終了する事なくServer.rbを編集結果をブラウザに反映させる事はできないでしょうか? いちいちCTRL+C to stopしたく無いです。
>>82 require 'sinatra/reloader'
>>81 そうなんですか、参考になります。
しかし、ほんの数分で一致させるなんて偶然では無理ですよね?
解析ソフトのようなものが存在してるんでしょうか?
不思議で仕方ありません。
クレクレで、すみません。
やったぁ。解決 Sinatra/reloader つかうのね。
>>87 すみません。どこのカテゴリーで尋ねればよろしいでしょうか?
>>89 カテゴリー→プログラム→初心者という文字発見→スレチ覚悟で質問→マルチ扱いで、早速いじられる
こんな感じです。
ここなら専門的な人達が揃ってると思ったの質問してみました。
セキュリティ板とかインターネット板の 質スレで聞くか自分でスレ立てるか
まだこっちのほうがいいんじゃないの
スレ立てるまでもない質問はここで 146匹目
https://mevius.2ch.net/test/read.cgi/tech/1487825717 てかスレチを承知していたのなら初めから誘導先を質問すればいいのに
>>91 スレは立てられないんです。
このホストでは……という言葉が出てきてしまいまして。
すみません。ありがとうございます。
>>92 ご親切にありがとうございます。
>>74 大阪のハローワークでも、キヤノンなど、パソナテックの募集は多い。
つまり、できる人が見つからない
スレ違いだけど
>>1 【緊急】
すき家の定食に衝撃異物!
ずさんな管理体制が明らかとなった
指摘したその時!わざとらしく店員が声をあげごまかした!
229 名前:やめられない名無しさん [sage] :2017/08/29(火) 07:31:54.64 ID:EfhOnUp0
俺の朝はいつもすき家
楽しみにしてたのに・・今日に限って朝定食にしたんだ
見てくれ、これが証拠
店員さんも驚いて声をあげてる・・
VIDEO ちなみに半分食べた
お客様センターが通じない・・病院行く・・
(´・ω・`)すき家が大好きだったのに・・
progateでruby勉強してるんだけど到達点どれくらい?
Win32APIライブラリでCreateWindowExいじってたら、割りと簡単にウィンドウ表示までは出来た この先、作成したウィンドウのイベントメッセージ読むのとかプロシージャーの登録とかって可能なの? Rubyのオブジェクトをwindowsのシステム側で扱う事に全然イメージがわかない
今どきWIN32APIを直に操作して GUIアプリ作るのは推奨しない
>>101 へ?秀丸とか、Win32API直に使ってるが。
>>102 そりゃ秀丸は20年以上も昔にできたソフトだからだろ
>>101 石北会計だな。w
今日日、Win32を使う奴はわかってる奴なんだから、いちいち言うなよ。
>>100 Win32APIモジュールはobsoleteじゃなかったっけ?
>>105 require 'Win32API'
method = Win32API.new('UNZIP32.DLL', 'UnZipGetVersion', %w(v), 'l')
method.call()
こういうのは今は書けないのだっけか?
>>74 インド人エンジニアが松江に就職08/31 21:27nhk
松江市など5市でつくる経済圏域と経済連携協定を結んでいるインド南部のケララ州
から、初めて、エンジニアが松江にあるIT企業に就職することになり、松浦市長を
表敬訪問しました。
松江市でエンジニアとして働くことになったのは、インド・ケララ州出身の
ポール・ジョー・ジョージさんです。
市役所を表敬訪問し、松浦市長と対談しました。
ポールさんはことし1月、松江市にあるIT企業のインターンシップに参加したこと
をきっかけに松江で働くことに興味を持ち、受け入れ先の企業に入社することになりました。
ポールさんは、ケララ州から就職する初めてのエンジニアで、松浦市長から松江市の
印象について聞かれると「景色が美しく、人も親切な人が多いです。
働くことができてとてもうれしいです」と話していました。
また、松浦市長が「ケララ州と松江市を結ぶ人材となり、市の魅力を伝えてほしい」
と話すと、ポールさんも「ケララ州には日本に興味を持っている人が多いと思うので
ぜひ松江の魅力を友達に伝えていきたいです」と応じていました。
ポールさんは今後、松江市の技術者が開発したプログラミング言語「Ruby」
を用いて、スマートフォンアプリなどの開発に取り組むということです。
>>106 現時点での書ける書けないとobsoleteはあんまり関係ないけどな。w
-wオプションをつけると、警告が出ないか?
コールバックやら面倒な構造体を用意する必要があるAPIは、dlやfiddleで
>>109 dlは、表現できないAPIがあったと思う。
構造体の値渡しだったかな。
クロスプラットフォームGUIアプリであるAtomもVisualStudioCodeもお前らの嫌いなJavascript で動いているという事実。 それに引き換えRubyは初期からWindows環境冷遇し、英語ドキュメント揃えずソース読めで外人初心者冷遇し、今になってどっちも真面目に取り組んでたPythonに水を開けられた格好だね。
英語は冷遇してないぞ 今やRubyKaigiですら英語がデフォルトランゲージだ
ぐぐって調べたんだけど、 DLライブラリってruy1.8までのDL1みたいなものと、ruby1.9からのDL2みたいなものがあるのか それはさて置き、 言われてたDLライブラリでは、ちゃんとウィンドウプロシージャでメッセージを読む所までいけた webページ参考にしながらだったけどありがとう
Rubyに日本人が多いから 英語ドキュメントの不足は仕様がないにしても Windowsはもっと対応すべきだったね
Rubyの言語仕様は使いやすいけど Windowsの環境構築が大変だし Win用のGUIライブラリがパッとしない
あかん DLの挙動を確認したいけど、構造体を値渡しする関数が思いつかん 手近なところで試すのにめんどくさくない関数ってなにかない?
>>119 とにかく、構造体を値渡しするAPIをDLモジュールで呼び出せるかどうか、試してみろよ。
おっといきちがい。 スクリーン座標かマウスポインタかをどうこうするAPIにそういうのがあったと思う。 オレはそれで乗り換えた記憶がある。
MFC、ATLと続き、Cランタイムまでロードして色々試してまわったけど 構造体を値渡しする関数は自分で作らないとないっぽい どれもこれもポインターをわたしとった スマートポインターやインターフェイス、クラスやインスタンス、メンバーやメソッドの扱いなんかも、 DLではちょっと無理そう こういうのは横着せずラッパー書いてやるしかないと思う
な〜にキレてんだよ 不都合なレスでもでもあったのか?
>構造体を値渡しする 構造体みたいなサイズが大きいものは、普通、値渡し(コピー)しない ポインタで渡すとコピーされないから、普通は、ポインタ(参照)渡し
>>124 探したったぞ。
WindowFromPoint()
凝ったことをやりたいならffiモジュールを調べてみろ。
すくなくともコールバック関数は使える。
>>127 構造体が充分小さい場合は値渡しでいい場合もある。
C#でも、そのためにstructがある。
dlでcallack使えるとかはもう出ていて、
今問題になってるのはdlでも構造体の値渡しができるかどうか
>>129 結果、下記ので呼べたけどこれじゃダメなの?
module MODU
〜
関数ロード部分
extern "int WindowFromPoint(int,int)"
〜
end
p MODU.windowFromPoint(x,y)
ん? 荒らしが嫌がるという事は有益なレスなのか いいぞ、もっとやれ
>>132 たしかに素直な構造体ならいけそうだ。
場合によってはアラインメントとかパディングとかでひっかかりそうだが、回避しきる自信があるのなら、もうそれでもいんじゃね?
オレならさっさと逃げるけどな。
単にリファレンスを読んでないだけじゃないのかそれ?
133 名前:デフォルトの名無しさん 2017/09/06(水) 18:39:39.83 ID:xWkzKu3e
みんなffi使ってるからもうその話いいよ
134 名前:デフォルトの名無しさん 2017/09/06(水) 19:08:12.67 ID:2frueYn2
ん?
荒らしが嫌がるという事は有益なレスなのか
いいぞ、もっとやれ
135 名前:デフォルトの名無しさん 2017/09/06(水) 19:36:05.78 ID:vILuBDeW
>>132 たしかに素直な構造体ならいけそうだ。
場合によってはアラインメントとかパディングとかでひっかかりそうだが、回避しきる自信があるのなら、もうそれでもいんじゃね?
オレならさっさと逃げるけどな。
136 名前:デフォルトの名無しさん 2017/09/06(水) 20:19:48.12 ID:2frueYn2
単にリファレンスを読んでないだけじゃないのかそれ?
137 名前:デフォルトの名無しさん 2017/09/06(水) 23:23:31.25 ID:ygscOEFy
↑ユーザー層が良く表れててサイコー
別々のgemなのにrequireする時の名前がかぶってしまって、しかも両方を呼び出す必要がある場合、 どうやってrequireするのが正しいの? 例で、OpenGLのgemがいくつかあるけど、そのうちの二つが"opengl"でrequireする事になっている
問題ないです 名前が衝突することは良くありますが Rubyはダックタイピングを基調としているので 名前(メソッド名)が同じなら同じような振る舞いをします たとえ出所が違っていても名前が同じなら同じような振る舞いをします これがダックタイピングであり そのようなことはRubyが言語側で保証しているので プログラマが心配することは有りません
・・・/上のディレクトリ/opengl となっているのを ・・・/上のディレクトリ/exampl1/opengl ・・・/上のディレクトリ/exampl2/opengl のように手作業で新しいディレクトリつくってそこに移動させる で、 require "exampl1/opengl" require "exampl2/opengl" みたいな感じで呼び出す、とか
ん、同じrbファイル内でrequireするの? モジュール名も同じなら1つのモジュールの中に両方入ることになる気がするけど
通常、Load-Pathで最初に見つかったファイルひとつをrequireする requireはファイルパスつきで指定もできるので、区別できる程度のパスつきで指定すると実質複数読み込める んでRubyはオープンクラスなのでAA#bbの定義が2回目のrequireで発見されたら2回目ので上書きされる で、gemに限っては gem 'gemリポジトリ名' で指定して読み込むことができる(これは登録上被らないので) 一般的にはLoad-Path依存という回答
モジュール内だけとかにファイルを読み込めれば名前空間的な扱いができそう requireやloadじゃなく、第三の読み込み方法が必要になるけど
異なるgemだけどトップレベルのモジュール名が同じものを 一つのrbファイルの中で扱う場合の対処方法として一般的に認知されてるものは無いっぽいね (別のrbファイル内ならgemコマンドとrequireかな) loadの第二引数でtrueを渡してAnonymousにしたモジュールに別名を付けるような仕組みがあればいいみたいだけど loadはAnonymousモジュールを返してくれないから少しtrickyなことをしないと無理 ダサいけどdupして別名で使うのが簡単な気がする あとはforkしてrenameとかかな #load_foo.rb require ‘foo' Bar = Foo.dup Object.send(:remove_const, :Foo) #main.rb require ‘load_foo’ Bar.something
でも、違うクラスのほうを見にいって、うまく動作しないはめになりそうだけどな。
適当なモジュールを定義して、 そのモジュールに対してmodule_evalでファイルを評価させるとかどう? ファイル側はトップレベルでのloadを想定してるだろうから、何らかから派生させたモジュールを用意する必要があると思うけど kernelだったかmainだったか で、同名のファイルも別のモジュールでeval
ヤフー株式会社が中途採用していたので応募した。 会社半休とって、深夜01時までかけて、写真付き履歴書、職務経歴書(必須提出書類)つくった。 火曜に提出、金曜に不採用通知が来た。 ショック!でもまあ、さすが爆速開発の会社。 まあ、しょうがない。
RubyはマルチパラダイムなLLって言われるけど、 ほんとどんな書き方でも可能だよな 逆に、他の言語で可能だけどRubyじゃできない書き方って何かあるの?
>>150 少し前にあるけど
同じ名前の2つの異なるモジュールを
それぞれ別名でロードして使うことが簡単に出来ないみたい
>>150 インテリセンスのような、洗練されたIDEサポート。
>>150 なので、他人の読むほうからしたら悪夢のような言語
嘘をつかないとネガキャンもできないとか、 どんだけこの言語は強力なんだよ それ程rubyが怖いの?
こんなやつらばっかりじゃそりゃpythonに負けるわけだw
>>150 Lispのマクロ
Prologのユニフィケーション
python騙るなボケ このpythonの恥さらしが 勝利宣言なんか負けですと言ってる様なもんだろ
書き方を聞いたんだけど、なんで答えてるレスはどれも同じ様な勘違いしてるの? もしかして自演するほどRubyが怖い?
使えない言語ならそもそもアンチなんて湧かないし 使える言語だからこそ怖いんだよ
>>150 >>159 >>161 Prologのパラダイムは論理型でそれを
Rubyは標準でサポートしてないから
「マルチパラダイム〜」の反証になってる
嘘を付いてまでネガキャンしてる人がいるから言語の話は無理だと思うよ もうちょっと荒れていない時を見計らったら? それに、それ、異論がばんばん出そうだし
クラスはClassクラスのインスタンスだってのがよく判らん。 Fixnum, String, ArrayもClassクラスのインスタンスだって事らしい。 こんな仕様が一体、何の役に立つんだ?
インスタンスなのだから、クラスのメソッドをもちろん呼べる。スーパークラスのメソッドも呼べる。 それから、Classクラスのメソッドも呼べる。こういう仕様にしたかったという事なのだろうか?
Classクラスにインスタンス変数を定義すれば、すべてのクラスのクラス変数(Static変数みたいなもん)となる。 class Class attr_accessor :foo end class Foo;end Foo.foo = 10 puts Foo.foo # => 10 どうやら、こういう事が出来る様になるらしい。
どのサイト見てそういう話になっていっているのか少し気になる Webサイトは焚書できないからな
BasciObject, Objectがクラスで Kernel, Moduleがモジュールだ。 ClassはModuleを継承したクラスだ。Classにあるメソッドは、new, superclassだ。全てのクラスはClassのインスタンスなので、 Foo.new, String.new, Foo.superclass, String.superclassといったクラスメソッドを呼び出す事ができる。 ModuleにはRubyのリフレクション機能を実現するメソッドやeval族がある。 例:nacestors, instance_method, method_defined? 例:class_eval, instance….おっと、instance_evalはBasicObjectにある。 うぅーん。独特な世界観だ。
>>168 みてるのは、『メタプログラミングRuby」第一版。
あと見ているのは、Ruby 2.0.0 Reference Manual。macOS SierraにはRuby2.0が最初から入っているから、ちょいと古いRubyを使ってる。 Ruby2.2あたりでGCの改良があって、その関係でSecurity重視のWebアプリ作る場合は、2.0はNGらしい。 誤解してる?
そういう問題じゃなくて、Webアプリ作るなら実行環境と開発環境をなるべく同じにするのは当たり前。 特にRubyみたいに互換性のいい加減なものを使うなら尚更のこと。
webサーバやDSLの主流言語の一つって時点で他の主要言語を繋げて扱える上に手軽だから 使える人が増える事はあっても、減ることは無い そしてRuby恐怖症患者が恐れているのはこの部分だと思う
俺的ざっくりRubyのバージョンによる違い。 1. 2.0 - 2.1は1.9.3のbugfix版 2. 2.2 - 2.4はGC改良されてるが、言語仕様的には1.9.3と大差無い。 Fixnum, BignumがIntegerに統合された(2.4)とか、String Literalがdefaultでfrozenされている(2.3)とか、細かな仕様変更があるが、俺への影響は無いな。
俺:昔Ruby1.8 - 1.9.2の頃、WebスクレイピングをRubyでやってた。Mechanizeとか便利だぁ。。。とか言いながら。その頃DSLなんてあまり気にしなかった。 しばらくXcodeばかりいじって居て、Rubyに戻ってきたら2.4になってた。SinatraとかRailsとか触ってみたら、DSLバリバリで、これはまずいと感じて、「メタプログラミング」の本読んでます。
Rubyの歴史については、en.wikipediaのRuby(programing language)のpageがよく纏まっている。
今後、Ruby2.5, Ruby3.0が予定されているが、3.0の仕様は流動的みたいだ。 1. 並列処理 2. 静的型付け 1は技術的に難しそうだし、2はコミュニティに受け入れられるのか?
>>165 クラス自体を処理の対象にできる。
.NETでも、Typeクラスがあったりする。
C++などではできないこと。
>>180 クラス自体を処理の対象にする場面って?
一つ見つけたけど、他にある?
見つけた一つ!
1. クラスメソッドを提議
>>180 それは違う
Rubyのクラスはそれ自体が本当にオブジェクトだけど、
.NETのTypeオブジェクトやJavaのClassオブジェクトはリフレクションのためのハンドルに過ぎず、オブジェクトとは明確に異なる
クラス自体を処理の対象にする、ってのは例えばStringクラスのsizeメソッドの仕様が気に食わん。 だったら、俺が好きな仕様に変えてやる!(モンキーパッチング) って事ができるのは、StringクラスがClassクラスのインスタンスだから出来るってことなのかも。
クラス拡張、オブジェクト拡張は class << self; end class << obj; end って感じで行うが、extendメソッドを使ってもできる。 こいつがクラス拡張、オブジェクト拡張のショートカットみたいだ。 class MyClass extend MyModule end こんな感じ。 class MyClass class << self include MyModule end end こんな事しなくても良くなる。
俺の備忘録、スレ汚しスマソ aliasを使うとメソッドの再定義ができる。 String#lengthメソッドを再定義して、再定義前の実装をreal_lengthで呼び出せる様に退避させる様にする例。 class String alias :real_length :length def length # anaother implementation end end
aliasを使うと同じ実装を2つの名前で、可視性private/publicをコントロールしながら呼び出したりできる。 class C def x; “OK”; end alias :y :x private :x end obj = C.new obj.y # => “OK” obj.x # => private methodだから呼べまシェーン。
>>182 違わない。用途を限定しすぎ。
型を引数にできたり、型のリストが作れたり、型自体の基底クラスが存在するから可能になることがいくつもある。
>>165 >クラスはClassクラスのインスタンス
>こんな仕様が一体、何の役に立つんだ?
メタプログラミング
うわ、まだこんな言語やってるやついたんだ endとかきめえ
自分が使ってない言語の出来なんかどうでもいいだろ 関係ないんだよ、君には
中かっこで、一行で治るblockを記述し、 do end, class endで複数行に渡るblockを記述する。 class endもblockらしい。 例: class Foo puts ‘OK’ # => OK、なんと実行されちゃう! end
class Bar attr_accessor :a end これもModule#attr_accessorメソッドの呼び出し(引数:a)だって。
putsはKernel#putsで定義されている。
putsってグローバル関数だと思ってた。Rubyにはグローバル関数ってのは無いのか? たしか、$fooでグローバル変数だよねぇ。
ID:9tUjHIzkこそRubyを使うのに相応しい人材だ Rubyはこうでなくてはダメだ
試しにやってみた。 class Bar #attr_accessor :a attr_accessor “a” end puts (Bar.new).a = 3 # => 3 なんと、attr_accessorの引数はputsと同じ様に文字列でもOK! 調子に乗って、 puts :OK puts :Failed NG # error puts :”Failed NG” うぅーん。Symbolと文字リテラルは違うはず。
>>194 >グローバル関数ってのは無いのか?
ない
ただトップレベルのメソッドを
実質的にグローバル関数として利用するのは可能
ruby 2.1 WEBrick 1.3.1 Internal Server Error (erb):58: syntax error, unexpected end-of-input, expecting keyword_end ; _erbout.force_encoding(__ENCODING__) ^ 文法エラー、予期せぬend-of-input、keyword_endを待つ; _erbout.force_encoding(__ENCODING__) ^ って何でしょうか?
>>200 erbがエラー吐いてんじゃね?
template engineだから、*.html.erbに問題あるんちゃうか?
>>163 確かに「Rubyはマルチパラダイム言語である」の明確な反証になっているね ところで、Python の公式文書には以下の記述がある: https://docs.python.jp/3/howto/functional.html >> 複数のアプローチに対応した言語もあり、 >> Lisp, C++, Python はそうしたマルチパラダイム言語です 故に、少なくとも Python は標準で論理型をサポートしていないから、 >>163 の主張は「Python はマルチパラダイム言語である」の反証でもある訳だ たかだか2chの通りすがりのカキコ(>>150 )どころか、 Python様の公式文書にすら堂々と反証してしまう >>163 ってスゲーよなあ(棒 >>203 君もRubyとRubyコミュニティーに向いてる人材だな
>>200 endを期待してるところでendが無いよってエラーだよ
_erbout.force_encoding(__ENCODING__) は
ERB#set_eoutvar内で呼ばれてる処理だけど
今の理解状況なら気にする必要ない
>>174 自作のRubyで書いたドキュメンテーションツールを日常的に使っているけど、
1.9 で28秒だったのが(ほんの気まぐれで) 2.4 へ変えただけで6秒になった
レスポンスが4倍から5倍変わるのは大きなインパクトだった
付け加えると、こうしてバージュンアップを繰り返してもなお
後方互換性を維持し続けてくれているのはありがたい
(もちろん自作ツールでメタプログラミングといった魔術は使っていないが)
>後方互換性を維持し続けてくれているのはありがたい ナイスジョーク👍
>>201-202 >>205 助言くださった皆様、どうもありがとうございます。
とりあえずendを閉じ忘れていないかチェックしてみます。
>>207 >ナイスジョーク👍
確かに世の中にはバージョンアップしただけで、たかだか
Hello world すら動かなくなるナイスジョーク👍な言語も存在する(棒
Rubyの設計上の欠点とは何か?
http://mevius.2ch.net/test/read.cgi/tech/1413113999/126 >>150 >逆に、他の言語で可能だけどRubyじゃできない書き方って何かあるの? Ruby と競合するLLで、かつ関数型というパラダイムに限定すれば、 「関数は一級市民ではない」という制限がある これは Ruby の世界だと「メソッドがオブジェクトではない」と 言い換えることができる 具体的なコードを Python で示そう: (注:以下は Python を例にしているが、JavaScriptでも同様なコードは書ける) >>> def add(x, y): return x + y # 関数 add を定義 ... ^D >>> add(1, 2) # 関数へ実引数 (1, 2) を適用 3 >>> f = add # 関数は値(=一級市民)だから、それを別の変数 f として宣言 >>> f(1, 2) # 変数 f へ実引数 (1, 2) を適用しても add と同じ結果になる 3 それに対して Ruby では: irb(main):001:0> def add(x, y); x + y; end # メソッド add を定義 => :add irb(main):002:0> f = add # メソッドは値(=一級市民)ではないから..(略 ArgumentError: wrong number of arguments (given 0, expected 2) from (irb):1:in `add' from (irb):2 from /opt/local/bin/irb:11:in `<main>' ブロックがオブジェクトじゃないのはほんと糞 Rubyは基本的に嫌いじゃないけどこれだけは擁護できないわ
いや、ふつう。 必要であればlambdaにすればよし。
>>210 f = method :add
p f[1,2] # => 3
>>203 「マルチパラダイム」への反証じゃなくて
「どんな書き方でも可能」への反証
「他の言語で可能だけどRubyじゃできない書き方」の例証でもある
メソッド呼び出し時の括弧をオプショナルにしてるから f = add みたいなのは出来ないよね でもそういう使い方をするときはメソッドじゃなくProcオブジェクト使う だからObject#methodを実際のコードで使ったことはない
俺が質問したのは書き方 Rubyは純オブジェクト指向で書けるし、関数言語的な書き方も可能、ワンライナーやダックタイピング、メタプログラミングも書ける だから逆に他の言語で実用的な書き方を挙げてほしかったんだけど
rubyの連中は、初心者、日本人をバカにするからきらいだ
マルチパラダイムの言語をしらべればいいだろ D, pike, いろいろある
>>215 何でそんな言い訳がましい書き方すんの?
defで宣言した関数は変数に代入出来ない。そのような場合はProcを使う必要がある。この行き当たりばったりな仕様は関数を第一級オブジェクトとして扱える言語が流行ってきたため「る、rubyでもできるし!」と言いたいがために適当に実装したためである、ってスパっと言えよ。
>>216 それは「書き方」の定義が曖昧だから
でもまあもう少し小さな区分で言うと
動的型付けの関係でJavaができるような
メソッドのオーバーロードは標準のRubyではできない
>>220 嘘で印象操作はいかんよ
そのうちRubyも韓国起源説を唱えそうだな
>>224 今プログラミングエディタで一番勢いがあるのはVSCode
見た目はだいたいこんな感じ
>>218 Rubyの連中ってのは、「たのしい」だとか、「直感的」とか、「生産性が高い」
とかってよく言う。
けど、メタプログラミング、DSLの辺りで躓く人って多そう。
SinatraのDSLがどう言う実装になっているのか理解するのに相当時間かかった。
特に、こんなコードがキモだとは、長らく気づかんかった。
class A
puts “OK”
end
JavaScript でも、関数内の地の文は、実行される たぶん、Python, Groovy なども同じだろ
>>228 THX
JavaScriptでも同じなのね。class定義内の地の文が実行されるの。
> けど、メタプログラミング、DSLの辺りで躓く人って多そう。 その前に自分みたいにオブジェクト指向とか言う暗号が理解できなくてC言語で止まってしまう人もいると思います。 アセンブラからC言語は問題なかったんですけどね…
>>230 オブジェクトのポインタも暗黙の引数として渡される、と割り切ってしまえばとにかく理解はできるはず。
オブジェクト指向だからのこともあるけど、全体像がわかれば、たいして難しいことではないと思う。
まずこの本で、オブジェクト指向を学ぶ スッキリわかる Java入門 第2版、2014 その後、この2冊を順に読む たのしいRuby 第5版、2016 みんなのPython 第4版、2017 だから、勉強する順番が、この順になる この後に、4つの道に分かれる。 1. Groovy, Kotlin 2. C# 3. C++ 4. JavaScript
リファクタリング:Rubyエディションを読んだ方がもっと直接的にオブジェクト指向を学べる リファクタリングと名が付いてるけどオブジェクト指向が何のためにあるのか、源流から把握できるよ
>>220 >defで宣言した関数は変数に代入出来ない defで宣言できるのはメソッドであって関数ではない またRubyには(関数型言語における)関数は存在しない 基本に立ち返って、計算モデルという視点でメソッドと関数との違いを 学習したほうがいいと思われる また関数型言語の流行を見て適当な実装したのはナイスジョーク言語(>>209 )だよ ・クロージャって何がいいの? http://mevius.2ch.net/test/read.cgi/tech/1415419907/197 このカキコをまとめると、君の文章スタイルを真似れば: lambda式の本体には式しか書けない。文を書きたい場合はdefで名前付きの関数を 宣言する必要がある。この行き当たりばったりな仕様は関数型プログラミングを 扱える言語が流行ってきたため「ば、pythonでもできるし!」と言いたいがために 適当に実装したためである、 ってスパっと言えるね 少なくとも、Rubyはその誕生の時からすでにオブジェクト指向と関数型を融合した マルチパラダイム言語として設計された ・推薦図書/必読書のためのスレッド 74 http://peace.2ch.net/test/read.cgi/tech/1409526637/857 手続き型言語として誕生し後から流行を追ってオブジェクト指向と関数型を 行き当たりばったりで適当に実装したナイスジョーク言語とRubyを一緒にしないでね!!(棒 >>234 >defで宣言できるのはメソッドであって関数ではない
この難癖は頭おかしい。
トップレベルで定義したメソッドを関数と呼ぶのは便利な方便じゃないか。
そんなこと言ったらいちいち演算子もメソッドと言わなければならないのか?
たしかまつもと著の初期の書籍でも
関数を定義してみましょう→実はRubyでは関数はメソッドとして〜という流れだったはず。たしか。たぶん。
そしたらブロックローカル変数という 糞ダサいものは何故必要になったのですか? やっぱり変数宣言は必要だったのですか?
>>235 少しRubyやったことある人なら「defで宣言した関数」なんて理解の仕方をしないからさ
>>234 の言い回しはともかく
>>220 はRubyのメソッドを理解してないって指摘でしょ
演算子はメソッドの一部をさす言葉なんだから演算子って呼んでもおかしくないよ
でもRubyの場合メソッドは関数じゃないから「defで宣言した関数」とは言わない
>>236 うん、変数宣言は必要だった。
まちがいない。
鏡の自分と話していないでいい加減リアルで話し相手を見つけろ いつまでごっご遊びする気だ?
>>232 スッキリわかる Java入門 第2版
658ページ
すごいなぁ。
俺が良かったのは、Java流オブジェクト志向入門、この薄い本でOOPに合点が言った。
それから、Master Mind of Programming.
OOPのキモは、差分プログラミング。
オブジェクト指向の初期に言われてた (継承による)差分プログラミングは 今はOOの主流でない
主流ではないどころか現代では継承による差分プログラミングはクラスの典型的な間違った使い方であるというのが一般的な認識だよね あまりにも時代錯誤が過ぎる
class Product < ApplicationRecord end この継承だけで、 p = Product.new p.name = “Some Book” と書き始める事ができるが! これは、差分プログラミングでは無いのか?
今のオブジェクト指向って差分は嫌われてんのか。 しらんかった。
差分プログラミングは継承元のクラスの細かな仕様 特に処理の流れのようなものまでしっかり把握してないと 破綻するからな 複雑な動きをするクラスの一部だけ上書きして破綻なく動かすのは難しい
オブジェクト指向って継承とか差分とかをなくしたら それって関数型プログラミングじゃないのか?
差分と増分は違う。 一般的に差分プログラミングというと、243の例のように元あるものに足するだけではなく 上書きして元あったものを「引く」ことを伴うやり方を指す。 これは大抵の場合、論理的なis-A関係を無視した実装継承になる。
何がどうダメでどうするのがより良いことなのか書いてくれ
>>242 何が、「だよね」だよ。
変なやつ。
たんなる、知ったかだわぁ、こいつ。
>>249 簡単な話だよ
クラスを継承するとき、スーパークラスの実装を潰してはいけない
常に増分の形になるようにする
たとえばクラスAのメソッドaの動作を変更したいとき、サブクラスBでaをオーバーライドして置換えてしまうのが継承による差分プログラミング
そういう場合、AとBを共通のスーパークラスCを継承するようにして、Cのaは空にしておき、A, Bそれぞれでaを実装するのが一つの正解
多分意味が無いと思う 物分かりが良い人だったら今時Rubyなど触ってるわけないし そのなかでも特別アレな人がここに集まっているわけだし こういう人に何言ったって、なぁ・・・ そりゃ、聞く気があって向上心があるならRubyなんか触ってないって 差分プログラミングがあまり良くないって話は随分昔からあって 他スレッドだと、それを言っても、何今更当言ってるんだ? となるだけなんだが、こんなことに食って掛かるやつがいるってのがね さすがのRubyなんだわ 冗談みたいな話だけど、マジで Rubyは今の流行りと全く反対の方向に全速力な言語だから こういう言語を好む人に常識を解いても無駄なんだわ
まあ既存のクラスのメソッドを置き換えたりする醜悪なモンキーパッチをクールだと有難がってる連中が沢山いるくらいだから、 継承を使った差分プログラミングなんて可愛いもんだ
>>253 > そりゃ、聞く気があって向上心があるならRubyなんか触ってないって
つまりお前は聞く気がなくて向上心がない、という自己紹介?
念のためイメージしやすいように具体例を出しておこう。 何らかの処理結果をHTTPで出力するHTTPPublisherクラスがあったとしよう。 これをHTTPではなくFTPで出力したくなったが、最終的に送信するところ以外は実装は全て同一だ。 そこで、HTTPPublisherクラスを継承して最終的な送信のところだけをオーバーライドしたFTPPublisherクラスを作った。 その結果、FTPPublisher is HTTPPublisherという継承関係になった。 これが継承による差分プログラミングだ。何がおかしいか考えてみよう。
>>256 俺はRuby触ってないし
失敗した発明に興味があるだけ
>>259 > 失敗した発明に興味があるだけ
嘘はいけない
お前は単に叩いてスッキリしたいだけだよ
そのためには捏造も辞さない、半島系メンタリズムなんだよ
恨の文化ってやつだ
そこを自覚しよう
ガチ初心者で申し訳ないっす。 rake db:migrate:reset rake db:seed railsで作るサイトに上を実行してくれるボタンを作ることって出来ますか?
>>262 よくわからんけど、Ruby内からバッククォート文で実行させれば良いんじゃない?
>>264 ありがとうございました!感謝感激雨あられっす
>そりゃ、聞く気があって向上心があるならRubyなんか触ってないって 今年一番説得力あるレスだった
まあRubyは使いやすくて楽だからな Lispみたいな言語だと 向上心や忍耐力が必要とされる
手軽だし、便利だし、どこにでも手が届くわりに、細部まで言語として背景や地盤が整備されてる 確かに、使える人が増える事はあっても減る事は無い言語だ
>>269 俺、その背景や地盤ってのを理解するのに、めっちゃ時間かかった。
Gradle は、Groovy だけど、 vagrant, chef, SASS とか、ツールを作る時は、真っ先に、Ruby が選ばれる。 他の言語は、Rubyよりも、2年ぐらい遅れる この2つは、DSL も作りやすい。 さらに、Groovyには、JavaVM が必要だけど、Rubyには必要ない おまけに、シェルスクリプトの代わりにもなるし、 PowerShell よりも、プログラミングしやすい
>>271 >ツールを作る時は、真っ先に、Ruby が選ばれる
おっそうだな
静的サイトジェネレータならJekillとか
Rubyはプロトタイプを早く作るのに向いてるから
新ジャンルを開拓するのにふさわしい
そう感じるのは君がRuby村の中から見える世界しか見てないからだ 少なくとも今はRubyが最先端とはとてもじゃないが言えないよ
>>271 その手のツールがRuby製なのはちょっと不思議なんだよな。
バージョンアップで壊されるかもしれないんだから。
もっと安定性のあるものを選べばいいのに。
Railsと違ってRuby自体の後方互換性はかなり高いよ。1.8や1.9で作ったコードも今もそのまま問題なく使えてる。使えなくなる機能があっても数バージョン前から警告出るから対応しやすい。
>>273 Rubyは最先端ではない。
首相は獣医学科設置に関与してない。
首相は、国有地を森友学園へ売却するよう指示してない。
これらは、証明できない。
ツールを作る時の選択肢にRubyがある。
これらの証明は例を示せば良い。
例:vagrant, chef, SASS
自分がツールを作る時に、シェルスクリプトは論外だろ。 PowerShell は、補完が効くけど、 クラスを使うような、本格的なプログラミングは出来ない Kotlin は大掛かりで、厳格なものを作れるけど、 静的チェックが厳しすぎるような気もする 結局、Groovy, Ruby が手軽。 DSL も作りやすい Haxe も、様々な言語に変換できるから、面白そうだけど
PowerShellはクラス作れるぞ? そんなんだからアンチに馬鹿にされるんだよ
あと静的チェックが厳しすぎるというのも意味不明だな Rubyだって想定してる型を間違えたら落ちるかバグるだろう 型書くのが面倒というならわかるけど、静的チェックが緩いこと自体にメリットはない
静的チェックをするということは、Crystal みたいな方向性になるのかな
>>280 要はLLとかグルー言語っていうか
シェルスクリプトと静的言語の中間が
Ruby(やPython)の守備範囲ね
>>281 PSはバージョンアップでクラス構文が追加されたね
でもまあ本格的なオブジェクト指向はRubyの方がやりやすい
>>282 動的型付けにも多態するのに継承いらないとか
ダックタイピングとかメリットがある
>>282 >静的チェックが緩いこと自体にメリットはない
たとえばC言語が標準ライブラリ関数である printf を
容易に実装できたのは、C言語の「静的チェックが緩い」という
特性がメリットになった実例だろ
アンチはまた自演で誘導しようとしてんのか ほんと嘘をついて騙すのが好きだな
>>280 ためしに「Kotlin dsl」でググって見たら最初にヒットした記事
・KotlinでイケてるDSLを作る
http://qiita.com/kikuchy/items/7c8893c4e7e11dafdb6c この記事では DSL を作るのに有益な Kotlin の言語機能を
6つ紹介しているけど、先頭の4つは Ruby と共通しているね
・拡張関数
―> 既存のクラスへ後からメソッド定義を追加できる
・引数の最後がラムダ式であれば、メソッド呼び出しの …(略)
―> Ruby の「ブロック付きメソッド呼び出し」
・ラムダ式のreturnは省略可能
―> もちろん Ruby もメソッド/ブロックの最後に書くreturnは省略できる
・thisは省略可能
―> Ruby も同じく
特に3つ目の「ブロック付きメソッド呼び出し」は Apple の新世代言語である
Swift でも「Tailing Closure」という名前で導入されている
・クロージャって何がいいの?
http://mevius.2ch.net/test/read.cgi/tech/1415419907/262 世界は Ruby 良さに気付いている、そして Ruby の良き特性を取り込んだ
新世代言語が次々に登場している(
>>283 の Crystal、他には Elixir もある)
日々アンチっぽいと感じる書き込みがあるかもしれないが 書き込んでいる本人たちは、そんな気は決してない これは皆さんに末永くRubyを使ってもらおうと思ってしていること 未だなおRubyが好きな人に、何言っても回心しないのは分かり切ってるから 逆に強化していこうって方向なわけ
たとえばシステムにsafeな部分とunsafeな部分があったら unsafeな部分は一か所にまとめて管理したいって考えるだろう スラム街みたいなもんだな 別にこの世は俺の管轄するシステムでも何でもないから どうでも良いっちゃどうでも良いんだが 2chにも隔離スレという文化があるし 似たような感覚ではある
嘘付いてスレを妨害した荒らしのレスが上の方にあるじゃん
Rails5.1.4を使用しています アホしてsendカラムを含んだテーブルをmigrateしたところ、あちこちでエラーが発生するようになりました。 すぐにロールバックし、DBからはカラムが消えたことを確認しましたが、ApplicationRecordを継承したクラスではいまだに生きているようで、症状が改善されません。 ロールバック以外にできることがあれば、教えてください。
>>292 >ApplicationRecordを継承したクラスではいまだに生きているようで
そのModelも戻せよ
エスパーするが Rubyではメソッド名が同じであれば同じような振る舞いをします そのことはRubyで保証されているので プログラマは振る舞いについて何も考えなくてよいです メソッド名が同じなら、同じような振る舞いをします なのでそうしてください そのあと言語仕様から変数宣言を無くして代入で代用してください 一見すると「変数宣言」と「代入」の区別がつかなくなるように思えるかもしれませんが 変数宣言が無くなるので変数のスコープのことを考えなくてよくなります これらはRubyでサポートされているので、そのようにしてください
>>292 Rails の質問や話題はWebProg板のRailsスレへ:
・【RoR】Ruby on Rails Part20
http://medaka.2ch.net/test/read.cgi/php/1474523013/ >>294 > Pythonではメソッド名が同じであれば同じような振る舞いをします
> そのことはPythonで保証されているので
> プログラマは振る舞いについて何も考えなくてよいです
> メソッド名が同じなら、同じような振る舞いをします
> なのでそうしてください
> そのあと言語仕様から変数宣言を無くして代入で代用してください
> 一見すると「変数宣言」と「代入」の区別がつかなくなるように思えるかもしれませんが
> 変数宣言が無くなるので変数のスコープのことを考えなくてよくなります
> これらはPythonでサポートされているので、そのようにしてください
試しに Ruby を Python に変えて見たけど、何ら違和感が無い
そもそも「オブジェクト指向+動的型付け+手続き型言語」という特性を備えた
あらゆる言語(Python/JavaScript/Perl/PHP..etc)に通じる単純明快な事柄だね
いったいぜんたい
>>294 は何を言いたいのだろうか?
あえて
>>294 の主旨をエスパーすると:
「私はプログラミングを習い始めたばかりの初心者です、よろしくお願いします」
ってことではなかろうか
>試しに Ruby を Python に変えて見たけど、何ら違和感が無い それで何が問題? あと、Pythonは型アノテーションを取り入れてるから 過去の過ちを修正していこうということだろうね 一方Rubyは逆走中 失敗しちゃったから、もういっそ、突き抜けちゃおう、という勢い
Ruby 以外の動的言語は、関数の外で宣言した変数が、 関数の内側で、使えるよな つまり、関数スコープが厳格ではない Rubyで、変数宣言が無いのは、関数スコープが厳格だからかな?
>>299 Rubyはオブジェクト指向言語なので
カプセル化するために基本的に
他のオブジェクトの変数をそのまま使わない
使う必要がある場合は引数またはアクセサを通して使う
またグローバル変数も使えるが非推奨
|x; foo| ↑の foo のような、変素宣言と変わらない素晴らしい存在と出会うことが出来ます ちなみに python にも nonlocal という素晴らしいお友達が居ます 変数宣言を無くして代入で代用するアイデアは本当にうまく行きます 「@」に出会うことが出来るし レキシカルスコープについて考えると夜も眠れないほどです
Ruby のブロック(クロージャ内の)変数だろ python のnonlocal は、いらんわ。 親のスコープへ、遡って探しに行く、変数だよね
>>298 >過去の過ちを修正していこうということだろうね その Python の過ちがあまりに低レベルな訳だが: (1) print 機能が文として実装され、ライブラリとして分離されていなかった(>>209 ) すでに1970年代に登場したC言語では、 print は標準ライブラリ関数として言語仕様から 分離していたにもかかわらず (2) 整数の割り算という極めて基礎的な計算仕様が安定していない ・割り算の扱い – Python2からPython3への変更 – http://www.trusted-design.net/archives/455/ (3) 関数型言語ブームを追って行き当たりばったりで適当に実装したおかげで、 ラムダ式の本体には式しか書けない 改善要望は過去から存在したが、作者のGuid氏はGuido氏は 「複数行のラムダは解けないパズル(unsolvable puzzle)」と匙を投げた(>>234 ) (1)と(2)はようやく Python3 で修正を終えたけど、その代償として 「後方互換性の断絶」という事態を招いた (3) の「解けないパズル」に至っては Python3 でも修正の目処が立たず先送り おそらく Python4 で修正して「後方互換性の断絶」が再現されることになる つまり Python における「過去の過ちの修正」の歴史って、こういうこと 繰り返すけど、Python は過ちのレベルがあまりに初歩的すぎるのよ >>299 >Ruby 以外の動的言語は、関数の外で宣言した変数が、
>関数の内側で、使えるよな
いや、そもそも Ruby ではメソッド定義の中で入れ子になった
メソッドは定義できないよ
これは Smalltalk や Java といった最初からオブジェクト指向言語として
設計された仲間に共通する特性
>Rubyで、変数宣言が無いのは、関数スコープが厳格だからかな?
いや、メソッドの入れ子定義を禁止したことで、スコープの定義が簡潔なだけ
というか、Python や JavaScript のような関数の入れ子定義ができる
動的型付け言語でも、関数宣言は必要無いから、何を言いたいのだろうか?
>>301 >↑の foo のような、変素宣言と変わらない素晴らしい存在と出会うことが出来ます
Ruby:
lambda { |foo| …… }
Python:
lambda foo: ……
JavaScript:
function(foo) { …… }
Scheme:
(lambda (foo) …… )
SML:
fn foo => ……
言語によってブロック、ラムダ式、無名関数と呼び名は様々だけど、
どの言語でも「変素宣言と変わらない素晴らしい存在」foo とは出会えるよ
ひょっとして
>>301 は「仮引数(パラメタ)」という概念を知らないのかなあ?
>>304 >動的型付け言語でも、関数宣言は必要無いから、何を言いたいのだろうか?
最後の文章を自己レスで訂正:
X:関数宣言は必要無いから、
O:変数宣言は必須では無いから、
補足しておくと:
・JavaScript は予約語 var で始まる変数宣言の構文があるけど、
省略すれば暗黙的に宣言される
・Python の型アノーテーションは、その名アノーテーションとあるように
コメント扱いだから変数宣言の意味とは全く異なる存在であるし、
当たり前だけど省略できる
> Ruby:
> lambda { |foo| …… }
ではなく
Ruby:
lambda { |x; foo| …… }
この仮引数ではない余計な「foo」の事ですよ
明らかに浮いてますね、変ですね
何なんですかね、このfoo
変数宣言を代入で代用するアイデアは本当に素晴らしいですね
>(2) 整数の割り算という極めて基礎的な計算仕様が安定していない
http://postd.cc/sick-of-ruby-dynamic-typing-side-effects-object-oriented-programming/ Ruby: それはstdlibが搭載されているモジュールをrequireすると、
整数割り算の動き方に影響を与えてしまう言語。 @tomdale
>>307 >Ruby: それはstdlibが搭載されているモジュールをrequireすると、
>整数割り算の動き方に影響を与えてしまう言語。 @tomdale
それは整数割り算のメソッドをオーバーライド(上書き)したからだよ
リンク先の文書だとモジュール “mathn” を require で指定しているね
外部モジュールの import うんぬんとは無関係に、バージョンによって
素の「整数割り算の動き方」が変わってしまうナイスジョーク言語(
>>209 )と
一緒にしないでね!!(棒
>>307 >変数宣言を代入で代用するアイデアは本当に素晴らしいですね
へ??
lambda { |x; foo| …… } ブロック(クロージャ内の)変数として、使いたい場合、 わざと、foo に代入しない JavaScript でも、undefined が予約語ではないから、 わざと引数に代入せずに、undefined を作る方法がある
X だけに代入して、foo には何も代入しなければよい そうすれば、foo は、ブロック内だけのローカルスコープを持つ、 ブロック変数として使える
fooに代入出来るけどあえてしない場合は lambda { |x, foo| …… } って書くんじゃないの? 俺の書いたのは lambda { |x; foo| …… } 「;」以降の変数って何なんですかね、こんな変な文法 変数宣言してるのと変わらないですよね 変数宣言を代入で代用するアイデアは本当にうまくいってますね 「@」もサイコーですし、python の nonlocal も最高
>
>>307 > >Ruby: それはstdlibが搭載されているモジュールをrequireすると、
> >整数割り算の動き方に影響を与えてしまう言語。 @tomdale
> それは整数割り算のメソッドをオーバーライド(上書き)したからだよ
> リンク先の文書だとモジュール “mathn” を require で指定しているね
> バージョンによって
> 素の「整数割り算の動き方」が変わってしまうナイスジョーク言語(
>>209 )と
> 一緒にしないでね!!(棒
これもはっきり言ってPythonのがマシ
問題になるのは2から3への移植の時だけだから
自分で移植しようとしているのは明らかに分かり切っているから
当然注意深くやるし
requireするしないで、割り算の挙動が変わる方が悪質
ああ分かりにくい日本語になってしまったな 移植の時だけ気にすればよいPythonと違って 常に気を付けなければならないRubyの方が悪質 requireするしないで、割り算のような基本的な四則演算の 挙動が変わるのはあり得ない
>>317 なるほど納得
ずっと逃れられないのは、たしかに困りますなあ…
>>317 Rubyはオープンクラスなのでそれを致命的なデメリットと感じる人は使わないよね、というだけ
そう感じない人が多いから使う人も多いんだけどね
> requireするしないで、割り算の挙動が変わる方が悪質 何の話かと思ってmathnを検索したら標準クラスをオーバーライド?するのね。 ただやるかやらないかと出来る出来ないは別の話だと思うし requireする前に説明文読まない人はいないでしょう。 まあ間接的にrequireされてたら憤死ものですが…。
逆に言うとrequireするだけで、自分のタイミングで置きかえれるのは柔軟
いつもの荒らしを相手にしてごめんなさい 私が馬鹿でした
確認したらmathnライブラリは非推奨扱いになってる リファインメントを使う代替ライブラリがあるのかな mathn自体使った事はないけどさ
こういう人の話を聞かないで延々、一人しゃべりしてるやつって気持ち悪い
オープンクラス、つまりモンキーパッチは嫌われてる JS の、prototype.js と同じ。 基本的なAPI を上書きするから、挙動が変わる だから、嫌われる
なぜそんなものを作ったとなじる前にそんなものじゃない実装をお作りになったらどうでしょうか。 オーバーライドな実装が気に入らない、だから自分でそれをしない実装を作った!というのは別に誰にも否定されませんよ。 出来たそれが多くの人に支持されるかどうか?の話はまた別ですが。
オープンクラス自体が必ずしも悪いわけではないけど、問題はどこかで一回requireしたら影響がVM全体に波及してしまうことだね。 そのことは重大な問題としてよく認識されていて、 例えばC#の拡張メソッドはそれを含む名前空間を同一ソースファイル内で明示的にインポートしないと使えない。 Rubyも必ず毎回requireしないといけないようにすればよかったんだよ。Matzに言わせれば屈辱かもしれないけど。
それは逆のこともあってグローバルにしたいからそのようにヤルってのもあるでしょう。 それがそのように作成されているのはそのようにする意図があるのだし 影響受けまくりの共同開発のリポジトリで独断なら話は戦争ですが 使う人がいなきゃ肥やしにもならないライブラリにいちいち文句つけるなんて時間の無駄ですよ。 ただそこにあるだけで目障りという話でしたらまったく同じ理由で罵詈雑言の応酬になるのがオチでしょう。
アンチは思い込みの激しい性格だから、まともな社会生活をおくれなくて孤独なんだよ
話し相手が欲しくてスレを荒らしてたのか なんだかちょっと可哀想
必要ならrefinementを使おうで終わる話をグダグダ続けるなよ 初心者なら素直に、こういう場合はどうすればいいのって聞こうね
孤独な人生を送るのは親の育て方が間違っていただけ だから思い込みが激しいのは本人の責任ではない
標準クラスを上書きしようって発想に至らしめる原因は Rubyが遅いからなんだけどね C++ならユーザー定義の数値クラス作って終わり
>>331 C#の拡張メソッドは、別のメソッドを変更しない。
昔、Rubyのコードを他言語のソースコードに翻訳したり逆翻訳するコンパイラツールを見た覚えがあるんだけど、 誰か詳細知っている人いる?
>>341 Crystal:Ruby風の文法を解釈し、LLVM IRを生成
こんなんあるけど。
>>341 Opal: Ruby to JavaScript Compiler
こんなんも。
どっかでrubyからC/C++に変換する物を見たけど、 どこだったかな?
荒らしが出てこない所を見ると、学部生の夏休みは終わっちゃったか
LLVMの中間言語に変換するのはまだ完成してなかったんだっけ
単位取得ギリギリの学生さんは、夏休み中イライラ爆発してんだろうねぇ。 最近は、単位バラマキなんだけか?
JRuby は? JVM 中間コードから、逆コンパイルできるかも?
>>348 聞いたことないんですね。作ってもらえるんですか?
>>348 JRubyのランタイムにがっつり依存したクソビッチなコードをゲロゲロするから使い物にならんよ
しかし、釣った後の魚をどうするかで困るんだよな 本当に魚じゃあるまいし、無下にも出来ない せっかくスコープをグチャグチャにしてまで変数宣言を無くしたわけで それが結局メリットが無いのが皆にバレても、今更ね
変数宣言に型を書かなくてもよいって所までは 動的型にすれば簡単なんだけど ここで誤って勢いあまって変数宣言自体を無くすところまでやると スコープがぐちゃぐちゃになる 代入で変数宣言を代用しても 新しい変数への代入なのか、既存の変数への代入なのか、区別がつかない そこへきて、動的型自体にメリットが無いことが広く知れ渡ってしまったもんだから スコープをグチャにしてまで変数宣言を無くした意味がもうワケワカ ここで変数に静的な型を付けるよう改良するなら、変数宣言も復活する話になるし 変数宣言があるなら普通のレキシカルスコープでよい話になるので 今までのキメラ的な苦労が水の泡 素晴らしい
オメーの話なんざ価値ねーから 1行未満にまとめとけや
1行未満って0行じゃんw 消えろっていう表現ってことかーいいね、その使い方w
いつもの人だと思うけど こういうのは即NGできるので助かるわー
今だにruby1.9.3以下がメインですが、今の言語・システムの設計では、変数宣言とスコープが今の論点の一つなんですか? 思いついた解法を書くつもりは特に無いですが。
全然 皆もっと先を行ってるけど Rubyは一番最初の時点で躓いてるってだけだね 「@」
perl嫌いって言いつつperlの真似しちゃってるのがね
>>359 lambdaの引数で、|a,b;x,y|という記法が追加されたんだよね。
事実上、ここにだけ変数宣言が追加されたってことなので、ヘンな弱みみたいになってるかも。
つまづく原因は、履いてる靴が悪いのか、障害物があるのか、のどちらかでしょう。頑張り過ぎ、何でもござれ、全方位対応は、昭和時代の思い出です。 stringの、force_encoding (String)あたりはrubyならではの釣りだと思います。java9のstringは内部はbyte[]みたいになるそうですけど。 ところでrubyの、初心者じゃない方の質問スレは、いつ消えたんですか?
またいつもの人だね NG捗らないからID変えならが書くのやめて欲しいわ
>>361 pl,rbで比較したんですが、僅差でrbの勝ちでした。
plだけあればなんでもできます。が、plはawk+rbで代替するのを善しとします。
u8サポートないならplです。けれど、バイナリ操作はjava,c99があります。pl5に未来はありません。rbは複雑ですがshell scriptと考えれば、rbはplと比較するものではなく、bashの仲間です。
>>362 最近js(es6)の方がおもしろいので、rb1.9.3も使ってないです。js: function(a,b){}みたいな話ですか?
FXRubyなんていう便利な代物を今更知った RubyにもちゃんとGUI作れるツールあるじゃないか!
>>365 > pl5に未来はありません。
きっとまだまだ未来はある。
クソ変化をする可能性がほとんどないからな。
> rbはplと比較するものではなく
比較するものだよ。シェルとは違う。
>
>>362 > js: function(a,b){}みたいな話ですか?
近いかも。
jsも、関数スコープしかないけど、ムリヤリ無名関数にすれば外を汚染しないとかあるからな。
私のお聞きしたことに答えないなら、このスレで私がお役に立てることは無いです。
>>366 www.fxruby.orgは接続できませんでした。fox tkですね。guiは、はるか昔に考えたことがあります。が、普通はwxwidgets,tcltk,javaswingじゃないですか。guiを今ならhtmlしかないです。
作ってみても、どうせformもどきでしょ。しかもコードは、処理(命令)と云うより構造(宣言)だらけだし。
>>367 あなたとお話することはなさそうです。私が知ってることばかり、または、容易に推論できることばかりです。その程度の指摘しかできないなら、ググれば十分です。なので、あなたが、私へ、時間を使う、必要は、ありません。
>guiを今ならhtmlしかないです。 xmlならwx,qt,gtkなどよく見るけどhtmlってどんなの? HTA的なものがあるのかな
>>369 stringが不明ですね。あなたは蟲なんですか?
rubyスレでも、達人はいなくなったんですね。寂しい限りです。
>>373 ID導入の数年前までは少しいましたよ。今は、rubyの達人さんたちはどこにいるんでしょうか?
>>354 いくつか勉強不足な箇所はあるけど、「スコープがぐちゃぐちゃ」という 指摘に関しては、まったくもってそのとおりだね >>> x = 1 # グローバル変数 x を初期値 1 で宣言 >>> def f(dx): x = x + dx # 変数 x を破壊的に更新する手続き f を定義 ... ^D >>> f(2) # 手続き f を引数 2 で呼び出してみると・・・ Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 1, in f UnboundLocalError: local variable 'x' referenced before assignment まさに公式文書に書かれている通りの結果になった: https://docs.python.jp/3/glossary.html#term-nested-scope ネストされたスコープはデフォルトでは変数の参照だけができ、 変数の代入はできないので注意してください。 では、続けてみよう >>> array = [1,2,3] # グローバル変数 array を初期値 [1,2,3] で宣言 >>> def f(x): array.append(x) # 変数 array を破壊的に更新する手続き f を定義 ... ^D >>> array # 念のため、変数 array の内容を確認 [1, 2, 3] >>> f(4) # 手続き f を引数 4 で呼び出してみると・・・ >>> array [1, 2, 3, 4] # あれれ、グローバル変数なのに書き込みできてしまったぞぉ?!(棒 ああ。このレベルなんですか。このスレは。よく分かりました。
Python を知らない人には
>>357 はワケワカメだと思うので補足しとく
変数への破壊的代入を基本とする大半の手続き型言語、例えば Ruby や JavaScript、
さらには古典的な Pascal や C において、スコープは以下のように定義される:
(1) あるスコープの内側で宣言された変数は、スコープの外側にあるコードから読み書きできない
(2) あらゆるスコープの内側のコードは外側の変数を自由に読み書きできる
ところが Python という言語だけは、ナゼか (2) をオレ様定義した
(2)’ あらゆるスコープの内側のコードは外側の変数を自由に読めるが、書き込みはできない
まあそんなオレ様定義も設計哲学やら個性と見れば批判にはならないのだけれど、
>>375 で実際のコードを使って示したように、このオレ様定義が実装されたのは
数値や文字列といった単純型だけで、配列/集合/辞書およびユーザ定義クラスといった
複合データ型では実装を忘れたものだから、何のためのオレ様定義だったの?と批判されている
おまけにこのスコープ問題を解決するために世の中の常識的なスコープ定義へ訂正するという
根本策を採用せず、わざわざ予約語 nonlocal やら grobal を消費してまで変数宣言文という構文を
追加するといふ「行き当たりばったりで適当な泥縄実装」を Python3 でやらかしたものだから、
>>354 氏が指摘したように「スコープがぐちゃぐちゃ」になったわけです
このスコープ問題もラムダ式問題(
>>303 の (3))と同様に Python4 で修正されて
「後方互換性の断絶」が再現されるんでしょうね
>>376 このスレに達人がいると言うつもりもないけど
そんな一方的に上から目線になるほど
レベルの高いレスしたの?
>>365 >rbは複雑ですがshell scriptと考えれば、
>rbはplと比較するものではなく、bashの仲間です。
こんなのただの雑な印象論で
別にレベル高くないと思う
「Rubyってbashの仲間だよなー」って思ってる
Rubistがどれくらいいるかね?
>>359 >変数宣言とスコープが今の論点の一つなんですか?
いいえ、それらがホットな論点であるのは Python といふナイスジョーク言語だけです(
>>377 )
>>362 >ヘンな弱みみたいになってるかも。
あまりにひどい言い方ではないでしょうか(棒
Ruby のそれは単純明快なブロックというスコープの内側だけで有効なローカル変数宣言の構文です
それに対して Python は nonlocal などといふ否定形の単語で「非ローカル変数宣言」という
前代未聞で意味不明瞭な構文を追加してしまったんですよ
Ruby のそれが「ヘンな弱み」なら Python のそれは「トラウマレベルの致命的欠陥」です
でも、そこまで言うのはあまりに酷すぎるんじゃないかと思います(棒
かわいそうなので、Python に関する話題は止めにしませんか?
pyでは、ブロック {} do endのサポートはされたんですか?
>>378 そのレベルの高低は、何を基準としてでてきたんですか?
名前欄と
>>377 内のアンカが間違っていたので訂正:
>>377 X:Python を知らない人には
>>357 はワケワカメだと思うので補足しとく
O:Python を知らない人には
>>375 はワケワカメだと思うので補足しとく
あと
>>377 の grobal はglobal の typo
pyの話やpyの言語specはすれ違いです。まず、pyを使い続けることに疑問を持ったほうがいいでしょう。 人工知能など、十数年の周期で起きているインフルエンザです。あと2年は流行が続くでしょうけど、ノイマン型の限界で研究も限界が来るでしょう。そのときにpyの人気も終息します。 どうせバイトコードにするなら実行速度など比べても仕様がないと思うんですけど。なんでどうしようもないところを気にするんでしょうか。シングルスレッド?マルチスレッド?知能が低い人の考えてることは、なんだかよく分かりません。
>>381 >>376 自分で「レベル」って言い出したんじゃん
スレのレベルより突出して
高いレスはないって言いたいだけ
最近、このスレ以外でもマッチポンプ目的で荒らしが出没してるから気をつけて
Pythonのスコープはひどいが、Rubyスレで言うことではないし 同じようにRubyのスコープもひどいのだから笑えない 「@」はどう見ても今時ではないし if文などがスコープを持てないのも酷い これらは変数宣言を無くしたからそうなった 明らか
Pythonのスコープは本当にバグってて 変数への代入の有る無しでスコープが変わる どこのスコープに属しているか調べるのに 代入の有る無しを調べなければならない 変数への代入があればインナースコープで 参照のみならアウタースコープ つまりは 変数宣言を無くしたことで 変数宣言->変数への(最初の)代入 としたので 代入の有る無しでスコープが変わるという糞になった これに加えてnonlocalまである このような動作は安全性の面から好ましいという人もいるが それは絶対嘘で、実装上の都合でそうなったに過ぎない 本当にひどいと思うが しかしRubyのスコープが優れているという結論には繋がらない
Pythonは一例だが 基本的に変数宣言を無くすとスコープの仕様がバグる だから変数宣言は有ったほうが良いし どうせ変数宣言するんならオプショナルで型をけても悪くない という風に考えていくと、すごくありきたりな言語が出来上がる Rubyの最初のバージョンがそういう形で出来上がっていたら良かったが 一番最初の基本的な部分で誤ってしまって今更修正できない 修正すると、ごく普通の言語の仲間入りをするがRubyではなくなる だから素晴らしい
スレ違い なんでわざわざRubyスレ来てるんだろうかこの荒らし 寂しいの?
>>366-369 Redmine は、Rails
便所の隅っこで、しかもrbスレでpyの話をしても、もしかしてアスペ?
ID:WtNBJIHg(
>>363 ,365,368,370,372,374,376,380,381)
http://hissi.org/read.php/tech/20170923/V3ROQkpJSGc.html ID:L7/sMAP/(
>>368 ,388,389)
http://hissi.org/read.php/tech/20170924/TDcvc01BUC8.html >>386 >Pythonのスコープはひどいが、Rubyスレで言うことではないし
などと言っておきながら、
>>388 っすか?
>同じようにRubyのスコープもひどいのだから笑えない
>「@」はどう見ても今時ではないし
>if文などがスコープを持てないのも酷い
結論として、Ruby のスコープ仕様に関する具体的な問題は、
主観的なその2点だけしか見つけられないほど小さいのだと
納得しますた
>>388 >しかしRubyのスコープが優れているという結論には繋がらない
誰一人「Rubyのスコープが優れている」なんて言っていませんけど
個人的には、Rubyのスコープ仕様は複雑だけど矛盾は無く一貫しているし、
きちんと理解すれば現実のプログラミングに支障は無いと思っています
ただし、とりたてて「Rubyのスコープが優れている」と言うほどのものではない
>>354 氏が指摘してくれたように、Python のスコープ仕様は世の中の常識とは
かけ離れていて、あまりに酷すぎるんです(
>>375 ,377)
さて同胞がRubyのスレでPythonの悪口言ってますよ 皆さん擁護してあげてください
よっしゃ んじゃ俺はPythonスレでRubyを的外れにディスってくるぜ!!!!!
リアルで話相手見つけろ ここにおまえを構ってくれるほど暇な人はいない 受け付けているレスは初心者の質問中心だ
瑕疵担保責任(かしたんぽせきにん)
瑕疵担保責任のポイント
民法改正で事実上期限が「無制限」になった
バグや設計のミスなどは、瑕疵担保責任
納品物に不具合があれば損害賠償を請求される可能性もある
不具合を指摘されたらすぐに行動をとるべし
軽微なミスでも先延ばししない
http://www.atmarkit.co.jp/ait/articles/1706/26/news014.html http://itpro.nikkeibp.co.jp/atcl/news/17/052601508/?rt=nocnt 改正法では欠陥に気付いてから1年以内にITベンダーに通知すれば、
通知後5年以内は修正や報酬の減額などを求められるとしている
全ベンダーが泣いた民法改正案を解説しよう その1
http://www.atmarkit.co.jp/ait/articles/1609/14/news009.html http://www.atmarkit.co.jp/ait/articles/1609/14/news009_2.html http://www.atmarkit.co.jp/ait/articles/1609/14/news009_3.html ポイント1:修補や損害賠償、契約解除の期限がなくなる
従来あった「瑕疵担保期間は引き渡しから1年」という考えはなくなる。
条文にある通り、注文者は成果物が契約の目的に適合しないことを発見したら、
その「発見したときから1年以内」ならさまざまな請求ができる。発見が10年後なら、
11年後まで請求可能なのだ。
もっとも、現実のユーザーとベンダーの関係でも、たとえ契約書に「瑕疵担保責任期間は納品から1年と」明記されていても、
「2年目以降は不具合の修正に対応しない」と主張するベンダーはまれだ。多くの場合は、納品から何年たっても、
バグが見つかればユーザーのところに飛んで行き、無償で改修するだろう。
arrayのpackメソッドってみんな全部覚てる? 俺は量が多くて覚えきれないから、いまいち何ができて何ができないか把握できない
バイナリいじったり、作ったりするときに使う その都度リファレンスを読み返すけど
>>403 だいたい何ができるかだけは覚えておく
詳細は覚えるだけ無駄なので毎回マニュアル見る
個人的にはこれまで使った回数合わせても10回くらいだと思う
使う回数多ければ自然と覚えるだろう 文字列扱うやつなら正規表現とかみたいに
packフォーマットってある意味暗号だよな かと言ってFiddle::CStructとかFFI::Structとかは文字列オブジェクトをそのまま扱えないし それにバイナリデータをいじる時たまにunionを扱いたくなるけど一手間なんだよね
プロトコルの多くがテキスト化してきてるから、packは出番が少なくなってるんだよねー
Rubyでファイル群を再帰的にパースして抽出したデータを表計算ソフトで編集後に書き戻す という処理をする場合に表計算ソフトとのインターフェイスを簡単かつスマートに実装できませんかね? OSはWindows、Linux、FreeBSD。表計算ソフトはExcel、Libre/OpenOffice、Gnumericを想定します 現状はWindows上でSYLKを経由してLibreOfficeで編集しているのですが、Unicode文字をそのまま 扱えなかったり、SYLKのサポートが不完全だったり、編集の終了の検出が難しかったりして面倒です CSV/TSVでは書式や数式を扱えないですし、ODFでも編集の終了の検出が難しい問題が残ります
>>410 Rubyでの内部表現は処理しやすいようにして
表計算ソフトとのデータ受け渡しの際には
CSVに変換するのが普通だと思う
表計算ソフトのファイルを何とかしようというのは筋が悪いよね データとビューを分離するべき
>>410 WindowsとExcelに限定してしまって、win 32oleモジュールで処理すれば。
Excelのフル機能にアクセスできるのでは。
判りにくくてすみません
現状のRubyスクリプト
ファイル群をパースして情報を抽出
SYLKファイルを生成してこれを引数にLibreOffice Calcを起動。スクリプトは待機する
Calcで情報を編集する。このときにセル参照や簡単な数式等を使用する場合がある
編集した情報をSYLKファイルに上書き保存してCalcを終了する
スクリプトが再開しSYLKファイルをパースして情報を取り出す
ファイル群の情報を更新する
な感じです
>>411 最初はTSVを使っていたのですが
>>410 に書いた制約等を緩和するために今はSYLKを使用しています
>>412 情報を表形式のUIで編集したいです。これを一から作る大変なので既成の表計算ソフトを使えないかなと考え
今のような形になっています
>>413 Excelはライセンスを1つしか持っていないこともあって滅多に使いません(絶対に使わないわけではない)
表にRubyコードをテキストとしてぶち込んで、 後でRubyからeval
MVC の、データ部分だけを処理すべき。 View は、そのアプリ(表計算ソフト)独自の規格だから、無理 結局、View の規格を学ぶことは、 自分で表計算ソフトを作ることになり、車輪の再発明となり、 ビジネスロジックとは無関係のことに、開発費を掛けることになる
CSVで用が済まないならエクセルVBAでやるのが一番妥当だと言う結論に至った システムにくっついたスクリプト言語がなんだかんだでマシである
表計算アプリからの戻りはプロセスを監視するかファイルを監視するかしかない Windowsの場合はファイルクローズをイベントとして基本的に拾えないので 定期的にポーリングするかファイル変更イベントを監視してチェックする Linux系で動かしてinotify使うと楽 でも表計算アプリでの編集は手動だろうから それが終わったらRubyを起動したんでも良くない? 個人用でしょ? もしそれも面倒なら最低限のマクロを書いてRubyからwatchしやすくするとかかな
>>414 >Calcで情報を編集する
確認するけどこれは手動だよね?
>Calcを終了する
>スクリプトが再開し
「編集の終了の検出」で再開を自動化したいの?
普通に編集後スクリプトを
手動起動するんじゃダメなの?
商業アプリでも他ソフトで編集してから
再起動させるのは普通だと思うけど
もし表計算と何度も往復して面倒とかだったら
1. VBAを使ってエクセルメインで処理する
2. RubyにGUIをつけて編集可能にする
上記のいずれかを考えるが
表計算のGUIを実装するのは非常に大変なので
1の方が圧倒的に楽だと思う
表形式のUIで編集したいだけなんだから、GUIはWebブラウザに任せればいいだけじゃん
Webアプリにすれば連携しやすいが GUIを実装するのに JavaScriptが必要になる JSが使える前提ならアリかもしれないが やはりエクセルの挙動を再現するのは ライブラリがあっても大変
require 'win32ole' ServiceManager = WIN32OLE.new("com.sun.star.ServiceManager") StarDesktop = ServiceManager.createInstance("com.sun.star.frame.Desktop") doc = StarDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, []) #doc = StarDesktop.loadComponentfromUrl( 'file:///D:/Office/OOO/wrk.ods', '_hidden', 0, []) sheet = doc.sheets.getByIndex(0) cell = sheet.getCellByPosition(0, 1) cell = sheet.getCellRangeByName("A2") sheet.getCellRangeByName("A1").string = "文字" sheet.getCellRangeByName("B1").value = 123 sheet.getCellRangeByName("B2").value = 654 sheet.getCellRangeByName("B3").formula = "=B1+B2" p sheet.getCellRangeByName("A1").type p sheet.getCellRangeByName("B1").type
やった事ないけどリブレオフィスならpythonでマクロ操作できるんじゃないの?
ここまでの書き込みを読めばわかるけど これだけ話がそれるのを見てもわかる通り 物凄く端的に言えば 出来ない が回答のようだよ
Windowsで使ったことないけど
起動したプロセスを待ち受けるだけならこれ使ってみれば
https://github.com/enkessler/childprocess 本日14時から ニコニコ動画などで Excel方眼紙は悪なのか? その是非を問う公開討論会を生中継 2017/09/30 14:00開始 - ニコニコ生放送
質問です
ブロックつきで呼び出されたメソッドから、
super をブロックなしで呼び出したいんですが、
どうやればいいんでしょうか?
親クラスに外部イテレータ取得用のメソッドを追加するしかない?
コード例はこんな感じです
https://ideone.com/HMVdVD super(&nil)かな。でもeachのEnumeratorだからBのeachが呼ばれるだけだな
>>431 method(&nil) って記法があるんですか
知らなかった……
まあ確かに今回の場合はこれではうまくいきませんが、
>>431 さんのおかげで解決法は見つかりました
よーするに A#each を呼ぶときにブロックがあればいいわけなので
https://ideone.com/706h5s こんな感じ?
17-18行目と、41行目以降です
あっ 違う
https://ideone.com/oNjS8J これでいいんですね
シンプルだしこれで行きたいと思います
どうもありがとうございました
そして sage 忘れ……
教えてください。 hash = [{"fruits"=>"apple","price"=>"100"},{"fruits"=>"orange","price"=>"50"}] という風に続いている配列から オレンジの値段を取り出す場合、 どうしたらいいですか?
ハッシュが入ってる配列にふさわしい名前は少なくともhashではないと思う irb> fruits_data = [{"fruits"=>"apple","price"=>"100"},{"fruits"=>"orange","price"=>"50"}] irb> fruits_data.each{|h| p h["price"]} "100" "50" irb> p fruits_data.map{|h| h["price"]} => ["100", "50"] irb> p fruits_data.inject(0){|sum, h| sum += h["price"].to_i} 150 だいたいこんな流れかと
すまん寝ながら書いてて要件満たしてなかった irb> p fruits_data.find{|h| h["fruits"] == "orange"} {"fruits"=>"orange", "price"=>"50"} irb> p fruits_data.find{|h| h["fruits"] == "orange"}["price"] "50" 文字列が嫌ならto_iでもしとけ
>>437 果物と値段を直接ペアにした方がシンプルになる
answer = ""
fruits_price = {"apple"=>"100","orange"=>"50"}
fruits_price.each do |k,v|
answer = v if k == "orange"
end
p answer #=> 50
書いてたら先を越されてしまった
array.find{|i| i[:fruits] == "banana"}&.fetch(:price) &.[:price]って書ければいいのに。 &.[](:price)は読みにくいからfetchで
>>438 >>441 >>442 みなさまありがとうございます!
Effective Ruby の項目10に書いてあるけど、 構造化データを扱う際、Hashの配列よりも、 クラスまたは、Struct(簡易クラス、クラスジェネレータ)のような専用の型を、使った方がいい data[:name] キー名のような実装の詳細が、隠蔽されず表に出てくる。 また、存在しないキーは、nilとなる Person = Struct.new(:name, :address) #定数に代入 data = Person.new("foo", "fugafuga") data.name Structでは属性になるから、getter, setter も付いているし、 存在しない属性名でアクセスすると、NoMethodErrorになる
ちまたのRubyハッカソンってどうやって見つけるの?
Rubyの話題っていうか、rspecなんだけどさ、 すごいもやもや感がある。 rspec便利なんだけど、なんで通常のプログラミングとは ことなった技術を使わないといけないだのだろう? アサーションとかモックとか アサーションって要は比較命令だろ? モックは要はクラスの継承だろ? もちろんテストのための機能(エラーが起きた時の情報表示)が ついてるのはわかるよ。でもそれは本質的なことじゃなく 比較命令や継承ができればいいはず。 つまり通常のプログラミング技術と同じ書き方でテストコードも書けるはず。 テストコードが読みやすいようなDSLになっているというのなら それを通常のプログラミングでも使えばいいやん?読みやすくなる。 なんでテスト用に特殊な書き方を覚えなきゃならないんだ?
TDD, BDD とか、流行っている Ruby は、DSL に強いから、常に流行の最先端。 2, 3年遅れて、他の言語に取り入れられる
BDDを実現するためにあんな「変」な書き方になってる どうしても性に合わなきゃフツーのユニットテストもあるよ ただそういう「メソッドの戻り値が妥当かテストするテストの一覧」だけではテストたり得ないという考え方が主流 個人的には好きよ、はみ出ないことを保証する自分向け補正レールとしての大量のユニットテスト群を高速でぐるぐるするやつ あの時代に戻れたらいいなと思うことはある
>>477 Ruby TUEEEEはどうでもいいんだけど、そのレス見てRubyがなまじDSLに
強いからRubyという言語仕様の範囲内(内部DSL)にした結果
通常のプログラミングと異なる技術を使ってしまうんじゃないかって思った
いやちょっと違うかもな。通常のプログラミングで使う内部DSLとテスト用の
内部DSLが異なるという問題かもしれない。DSLといっても内部であればRubyという
言語でしかないので言い回しの違いでしかないかもしれないけど
TDDとかBDDとかshould系とかexpect系とか通常のアサーションとか正直どれもテストとしては
読みづらいと思う。英語としては読みやすいかもしれないけど、テストとしてはということ
どういうことかというと、テスト仕様書ってよくマトリクス(二次元の表)で書くでしょ?
日本語とか英語じゃなくて、マトリクスの形でテスト仕様書書いちゃうんだから
じゃあテストコードもマトリクスであるべきだよ。エクセルの表がまんまテストコードになる感じ
たぶんこの時点でRubyによる内部DSLとして書くのは無理なんじゃないかな
Rubyの表現能力を超えてしまう。無理にやっても読みづらくなる
そしてこのマトリクス。テストコード(定義書?データ?)はエンドユーザーでも
読みやすい(専用のテスト内容ビューワーを作っても良い)と同時にそれが
そのままアプリケーションのコードとして使えればよくね?
テストを書くだけでアプリができるとはいわない。それは不可能。でも減らすことはできる。
エンドユーザーがテストを目視で確認してOKだして、それがそのままアプリで使われれば楽じゃん?
このパラメータには英数字しか使えません。英数字しか入れられないようにチェックコード書きました
英数字しかうけつけないことを証明するテストコード書きました。頑張って英語風にしました。
そこまでやってもエンドユーザーはそれ見て判断できません。これじゃやっぱり無駄に感じる
俺が今話ししてるのはだいたい「定義」の部分なんだよね。「処理」ではない
処理に関してのテストはいままで通りやるしか無いと思うけど
定義に関するテストは(エンドユーザーにもわかりやすい形で)テストコードを書いて
それがそのまま通常のプログラミングのコードとして使えると思うんだよ
モックもクラス「定義」だしね
じゃあとりあえず、そのやりかたを例示したら。 現行BDDへの不満はもうわかったので。
RSpecはテストを構造化しやすいのが良かったが 3からmatcherの文法がクソになったので基本使わない
>>446 >なんでテスト用に特殊な書き方を覚えなきゃならないんだ?
それがDSLだから
たとえばHTMLやSQLもRubyやJSとはぜんぜん違うだろ
ただオレは実はMiniTest使ってる
RSpecが大きいフレームワークなので使いこなすの大変
RSpecはRakeやRailsみたいに独自の世界観築いてる
RubyでDSL使った大きめのフレームワークはみんなそう
使いやすいのはメリットだけど
学習コスト大きくなるデメリットもある
まあ個々に選べばいんじゃね?
>>450 例示は5ちゃんねるとは別の場所でやってる or これからやる
ここではしない。雑多なアイデア?みたいなのを書いて
まあ誰か突っ込んでくれw
モック大嫌いなんだけど、今考えていて気づいたことが有る。
モックって形を変えた引き数なんだな。
テストする時のマトリクスとして考えれば、引数列とは別に
例えばAPI列があってその戻り値が○の場合なんて形で書くと思う
つまりArrange、Act、Assert(AAA)におけるArrange部分だな。
【アンチパターン】Arrange、Act、Assert(AAA)を意識できていないRSpecのコード例とその対処法
https://qiita.com/jnchito/items/91779b55cae0f4915da5 モックを使う使わないに限らず、マトリクス(二次元の表形式)で
テスト仕様書(パターン)は作れると思う
あぁ、そうかrspec等は、このパターンを記述しづらいんだ。
describe、contextなどでパターンを書くことができるけど一覧性がない。
(マトリクスで書きづらいもののために)describe、contextみたいなものはあってもいいけど、
テストパターン(結果含む)とテスト内容はファイルごと分けるべきなんだろうな。
あとモックを使った場合、通常はテストパターンがあればいいと思うんだけど
呼び出し回数や引数テスト(つまりreceive(:hoge).with(引数)).at_least(回数).timesみたいなやつ)
なことをしたいことも有る。単体テストとして考えれば他のモジュール呼び出しだから理解はできるけど
どうみても内部実装に依存したテストだから嫌いだしわかりづらい
こういのはAAAと独立させて、内部実装のテストだって割り切って別に書くべきなんだろう。
マトリクスの表を用意して、引数列、テスト結果列とは別に、内部処理列を作って、
どういった関数が呼び出されるかを書いていく
たとえば内部処理列に書くテストコードは マトリックスの1行目を実行した場合、内部処理として hoge.foo() hage.bar(1,2,3) tsuru.baz("aaa") みたいに縦書きで書いていければいいんじゃないかな? こういう処理が実行されることって。 あー、そうかrspecだと Arrangeに相当する部分と 内部実装のテストがごっちゃになってるんだな。
テスト仕様書ってエクセルがよく使われるけど、 それと同時にエクセルで書くなともいわれる。 ようは表計算としてとして使ってないからなわけだけど、 じゃあ表計算機能をなくしたものを作れば良いんじゃないかな
ここまではテストパターンをどうやって書くかの話で rspecでは一覧性がないから適していないという結論で良いんだろう。 これは別ファイルにするということで、describeとcontextとitあたりの 存在は消えたことだろう。 残ってるのはテストパターンではなくテスト内容。 expectとかそこらへん。これがまたRubyの通常のコードと テストコードで書き方がぜんぜん違うってのが残ってるんだよな。 とここまで書いたが、あれ?テスト結果もマトリクスの テスト結果列に書き込むよな? テストコードのためにDSL(expectとか)を覚えなきゃいけないんって 本質的な問題は何なんだ? テスト結果には、○○が××であること を ○○ == ×× みたいに書けるではないか? あー、そうか。to be eq みたいに書かないと読みづらい(誰が?)という問題か。 to be eq みたいな構文いらんな。代わりにテストで使える命令のサブセット定義すればいい そして専用のビューワーを使って見た時は、そのサブセット命令を日本語なりに置き換える。 WISYWIGみたいにどちらで書いても相互反映するのもいいだろう。
バリデーション部分は実は前からアイデアがあって、
Railsとかこんな感じで書くわけだけど、
https://railsguides.jp/active_record_validations.html こんなのは一切廃止して、言語非依存の
YAMLとかでバリデーション定義ファイルを作ればいいと思ってる。
そしてモデルでその定義ファイルを参照することもできるし、
APIからも参照することができる。関数からも参照することができる。
言語非依存ということは同じファイルをJavaScriptからも参照できるので
クライアントサイドのバリデーションも同時に定義できる。
ここで俺がいいたいことの1つとして、正規表現をバリデーション定義に
直接書くのはやめようということ。なぜなら技術的な内容過ぎて
エンドユーザーにはわからないから。
正規表現の代わりに独自の関数を使えば事足りる。
複数の条件や現在のデータも考慮しなければいけないものなどは
バリデーション定義ファイルでは実現できないかもしれないけど
重要なのは完璧にすることではなく無駄を減らすこと
またバリデーション定義に似たものとして
権限管理ファイルってのも考えられる。
なるべくエンドユーザーでも直接みれるようにして、
それをそのままプログラムに組み込めるようにしたい
>>457 > なぜなら技術的な内容過ぎてエンドユーザーにはわからないから。
え?Railsは技術者が使うものでしょ?
Railsは決して「誰でもWebアプリ書けます」みたいなWAFを目指してるわけじゃないんだし
正規表現すら使えないような技術者に媚びる必要性は一切ないと思うんだけど
%bで ASCII_8BITの文字列リテラル作れるようにして
"\xA5もじれつぅ〜〜".bみたいに.bメソッドじゃあ物足りない?
マジかよレイルズ最悪だな
>>462 rubyでfreezeされた・されないを気にし過ぎると頭がハゲるぞ
変更されると本当に困るところだけfreezeしとけばいいんだよ
文字列をfreezeしない理由なんて無い 関数型プログラミングを勉強しろよ
何点か質問させていただいてよろしいでしょうか? 現在「Markdown → HTML 変換をする掲示板」のような CGI を練習がてら作成しています。 変換部を全部自作するのは難しいのではないかと思ったので、既存のライブラリを使用しようと思ったのですが、 種類が多すぎる上、Rails 関係のトピックばかりで検索してもいまいち判断に困ります。 以下の条件を満たす適当なものをご存じでしたらご教示願えませんでしょうか? 1. GFM 記法対応(シンタックスハイライトは不要) 2. 使用法は簡単な方が好ましい 3. 高速であったり多機能であったりする必要はない 同時に、Redcarpet を試しに使ってみようと思ったのですが、 以下のような結果となってしまい正確にインストールできません。原因など分かりますでしょうか? (本文長すぎと怒られたので次の書き込みに続きます)
(
>>467 の続き)
NG ワードを特定できませんでした……
http://2chb.net/r/mango/1507328607/52 上記書き込みのような結果に終わってしまいます。
他のライブラリを gem 経由でインストールする際には正常に動くのですが、
何が問題だかよろしければご教示ください。
記法が増えるのが好ましくないと言ってしまうと 極端な話、ifとwhileでだいたい済んじゃうんじゃないか よく使われるから専用の記法を設ける 使いたくないなら使わなければいい
>>468 理由もエラーも書いてある通りだと思うのだが
詳細なエラーはgem_make.outに書いてある
コンパイラがないか必要な開発用ライブラリがないかどっちかだろうな
稀に手元のgemバージョンがインストールパッケージの想定より新しすぎるというパターンもある
>>467 そんなもんpandocでも呼べば終わりでしょ
>>467 ・library rdoc/markdown (Ruby 2.4.0)
https://docs.ruby-lang.org/ja/latest/library/rdoc=2fmarkdown.html Ruby標準ドキュメンテーションツールの RDoc くらいは使ったことがあるよね?
RDoc でも当然だけど markdown は使えるのだから、真っ先にそれを読むべきじゃねえのかと
>>469 インライン要素は簡単ですけど、ブロック要素が全体的にややこしくないですか?
Marked.js のソースを読んでみたのですが、何をしてるのか分からなくなって……
>>470 あ、そちらを乗せ忘れてました
現在スマホなので確認できませんが、何かが足りないとかいう感じじゃなくて見たことのないエラーでした
検索してみたのですが英語のフォーラムばかりでちょっと分からなかったです
>>471 これって Ruby に組み込めるんですか?
独立したツールのように思えるのですが
>>472 すみません、RDoc は使う機会がなくてほとんど分かりません
RDoc::Markdown の存在は知っていたのですが使い方がよく分からず、
調べてみたら使い物にならないみたいな記事があったので鵜呑みにしていました
上記の目的だとこちらでも問題ないのでしょうか?
>>466 こういう押しつけこそがJava化
関数型はすでに知ってるが
言語仕様で決めるかどうかは別
>>473 markdownをrdocで変換するサンプル
テーブルは使えないし、他に足りない機能があるのかも未確認だけど
機能的に充分かどうかは君の方でいろいろ試すといいよ
require "rdoc"
require "rdoc/markdown"
filename = "README.md"
md = File.read(filename)
doc = RDoc::Markdown.parse(md)
opts = RDoc::Options.new
converter = RDoc::Markup::ToHtml.new(opts)
html = converter.convert(doc)
puts html
>>466 rubyで関数型プログラミングを勉強しろって、何の冗談だ?
しかもfreezeするのは文字列だけにするとか中途半端だな
『あらゆるオブジェクトをfreezeしない理由なんて無い』くらい言えよ
>>475 ありがとうございます!
変換したのをテキストにする方法を根本的に勘違いしてたみたいです……お恥ずかしい
PCに戻ったらいろいろ試してみます
>Markdown → HTML 変換をする これを行うアプリは、無数にあるから、自作する意味はない Python のSphinx とか
>>476 > rubyで関数型プログラミングを勉強しろって、何の冗談だ?
どうぞよんでくださいねw
可変性の回避 ― Rubyへの関数型プログラミングスタイルの適用
http://postd.cc/avoid-mutation-functional-style-in-ruby/ >>478 分かりにくい書き方ですみません。
変換処理を組み込んだ CGI を作成したいのであって、独立したツールだと目的からちょっと外れてしまいます。
レンタルサーバーだと無理矢理組み込むのも大変なので……。
>>479 一応 CGI の練習がメインです。何点か自作する必要がありますので。
可能なら変換部も自作できればよいとは思いますが、上記の通り、現状だと少し難しいかなと判断しました。
興味はあるので、将来的には挑戦してみたいとは思っています。
>>480 > 関数型プログラミングを勉強しろよ
って言っておきながら出して来たのが
> 可変性の回避 ― Rubyへの関数型プログラミングスタイルの適用
かよ。ほんと、なんの冗談だ?
そういう事は組織内のコーディング規約で決めればいい事で、
緩いプログラミングをしたくてrubyをいじってる俺に押し付けるな
それに全てのオブジェクトを不変なものとして扱えって書いてあるのに
ことさらに文字列だけをあげつらって
> 文字列をfreezeしない理由なんて無い
とかマジでお前が何を理解してるのか心配になりますね
>>480 なんかのインスタンスを書き換えるの御法度、全部newでやれ、なんて記事出されても
新しい嫌がらせだなぁって思った
この記事の人の言ってることを正しいとするなら、Stringだとこうするしかないかも
temp_string = String.new(OldString, "append_a")
new_string = String.new(temp_string, "append_b")
前衛的なご発想をお持ちのようで
なんかキャメルとスネーク混ざったのなんでだろう、俺 JavaのStringBuilder思い出してたかも
>>483 "a" でも結局はnewしてるんで同じことだよ。
>>485 ん、記事だと「 "a" + "b"」できるよとか書いてるのみてないのかしら
たぶん「そんなめんどくさい記法はいらね」ってレスかと思ったんだけど
となるとメモリ周りの扱いでイミュータブルかそうでないかの利点を挙げてもらわないといかんわね
たぶんシャローとかディープとかで足かまれるか パフォーマンス問題のチューンでもなければ すっげーどうでもいいのでさっさと動け って話になりそうな気もするけど(90%の問題はコレ)
パフォーマンスの問題はchefかansibleでもありゃなんとでもなるでそ、サーバ乱設 chefが必要になるほど大規模な話にかかわったことないのがアレだけど orz
Rubyでゴリゴリの関数型で書く気しない Rubyは動的型付けだから コンパイラの型チェックなどのメリットが少なく 柔軟性を失って書きにくくなるデメリットが残る
>>486 > ん、記事だと「 "a" + "b"」できるよとか書いてるのみてないのかしら
それがなんなん?
それは "a" という文字列を newして "b" という文字列をnewして
オブジェクト同士を加算する(イコール +メソッドを出している)という
意味のシンタックスシュガーなんだけど?
>>490 言い方が悪かったのかもしれんが
「イミュータブルであると、なぜ、誰にとって、どううれしいのか」
を説明してくれって言ってるわけだが
シンタックスシュガーとかぶっちゃけどうでもいいし
イミュータブルがどうとかもかなりどうでもいい(パフォーマンス問題が出ない限りは)
今の場合
「(aaa)という理由により、文字列をイミュータブルにすると
(bbb)という利点がプログラマーにあり
(ccc)という利点がユーザーにあります」
の
aaa と bbb と ccc 埋めてねってくらい
俺的にはxxxであるべきとかどうでもいいんですよ、そんなん主観的な感情論
>>485 そうしないようにfrozenで最適化したんでしょ。
んー、興味の対象が違うのかなぁ ちょっぱやで書かしてくれる言語って意味でRuby使ってるようなところはあるので
>ちょっぱやで書かしてくれる言語 >って意味でRuby使ってる そうそう Rubyは典型的なLLだからね 全部関数型で書きたければ 最初から関数型言語使うでしょ
「Effective Ruby」の項目47 に書いてある。 ループ内のオブジェクト・リテラルを避けよう ループの度に、オブジェクトが作られて、すぐにガベージになるから無駄。 オブジェクトをループの外に出すか、freeze するか ARY = %w(a b c).map(&:freeze).freeze p ARY #=> ["a", "b", "c"] 各要素をfreeze して、配列もfreeze する Ruby 2.1 以降は、 "a".freeze これで定数になる
frozen_string_literal: true
>>483 最近のRubyなら-"a"で可。
文字列はデフォルトでfrozenになる予定なので、すでに簡便な記法が用意されてる。
>>497 賛成。
統一感があるようでいて、実は全然ないところはキライ。
>>435 のスライドによるとruby4では
不変リテラル配列を @[1, 2, 3] で作れたり、
不変リテラルハッシュを @{ 'a' => 1, 'b' => 2 } で作れたり
出来るかもしれない
リテラル文字列も一律freezeなんてしないで @"string" っていう構文にすりゃよかったのに
>不変リテラル配列 Pythonのタプルじゃねーか
タプルはタプル 行き当たりばったりなRubyとは違ってPythonにはシーケンスというプロトコルがあって、 タプルも配列もrangeも文字列もシーケンスなので統一的に扱える
おおっ! シーケンス! シーケンス! 言語機能として組み込まれ、特定の型のみに作用するなんて流石はパイソンだ 一方RubyにはEnumeratorが用意され、あらゆるクラス/オブジェクトに組み込めるのであった
>>506 Pythonはジェネレータでクソ簡単にシーケンス作れるよ
a、bが配列の時、 a,sort + b とするとおかしくなる時があります。 文法上間違いなのでしょうか (a.sort) + b で回避できますが
>>508 間違いじゃないよ
おかしくなる例とRubyのバージョンは?
>>508 実行可能な具体的なコードを出すと答える方も答えやすいよ
その上で何が起きるのか、本当はどうなって欲しいのかをあらかじめ言っておくとさらにいい
エラーが出るならばそのメッセージをつけて
一応聞いておくけど a,sort + b ってなってる部分はドットじゃなくてコンマなの?
>>509 ruby 1.8.7です、古くてすみません、
ひょっとしてこれが原因なのかな
>>510 a..sort + b です
これまで何年も()なしで問題なかったのに、
かなり前の方の行を変更したらエラーになりました
エラーメッセージは保存していなかったので、
元に戻せば再現するか試してみましたが再現しませんでした
確かにいろいろえーーって感じだが とりあえずエラーの原因箇所はそこと違ったんじゃね
>>511 >前の方の行を変更したらエラー
じゃあ普通に考えて
その変更が悪かったんじゃないの?
なんでsortが原因だと思うのか分からない
環境が分らないし、エラーの詳細もわからない そもそもタイプミスでエラー起こしてる可能性もでてきた これでどういう答えを出せと言うのか
>>517 (a.sort) + b
と括弧をつけるべきなのか、()は無くてもよいのか、どっちなのだろうという疑問でした
エラーの方はなるようにしかならないので
>>518 カッコは不要
'+' よりも '.' の方が結合強度が強い
演算子の優先順位については
https://docs.ruby-lang.org/ja/latest/doc/spec=2foperator.html に書いてある
…………と思いきや、'.' が書いてねーじゃん
'::' と同じ優先度と思っていい
つまりだ、カッコをつけるつけないで挙動が変わるって言うなら
それ以前の所がおかしいのは確定的に明らか
そもそも問題の切り分けが出来てないっぽい コード履歴取って一行ずつ変えて行けば どこが原因か特定できるのに
>>519 >>520 ありがとうございます、()無しで問題なしということですね
どっかがおかしいのは確定ですが、気力がなくて
そのうち時間ができたら調べます
クラス毎にファイルわけたり、 多機能なクラスをシンプルなクラスに分けたりしてれば おのずとエラー表示で何処が問題なのか分る とは言っても、横着しちゃうのはあるあるだから、他人には言いづらい
Ruby自体が大クラス主義だけどね バイナリデータもStringクラスで扱ってしまおうって考えは最たるもの だからと言ってクラス/モジュールにちまちまと細分化しても 使う時にあれを使いたいこれを使いたいで結局ひとまとめにしちまうんだろうけど さじ加減って大事だよな
昔rubyの本を読んだ時はさっぱり判らなかったけど、 perlとpythonが判った後で読んだら全部最初から知ってる感じになるな
大クラスでもメソッドは 粒度が細かい方が良いと思う
枝分かれと繰り返しで素数判定プログラム書く課題出て適当にやってたらそれっぽいものができちゃったんだけど、なんで出来たの分からないから助けて ソースは以下 def prime(n) if n==0 || n==1 || n<0 then return 'Not Defined' end i=2 while n%i>0 do if i==n-1 then return 'true' end i=i+1 end return 'false' end
>>526 ソース3行目にこれ付け加えて考えてください
if n==2 then return 'true' end
>>526 素数とはもともとそういうものだからとしか言えん
いや確かめてないけど
やり方通りに作ったのならそりゃ書いたとおりに動くよ
>>526 def prime(n)
return 'Not Defined' if n < 2
!(Range.new(2, n - 1).map{ |e| n % e }.include?(0))
end
Rubyっぽくないコードだったんで短く書き直してみた
メモ化しろ。 つまり、答え(素数)をキャッシュする 11 を、[ 2, 3, 5, 7 ]の順番で割って、割り切れなければ、11は素数だろ。 まあ、正確には、11を、[ 2, 3 ]で割って、割り切れなければ素数だが つまり、√11 までの素数で割って、割り切れなければ素数
>>523 主義なんかないだろ。
文字列かバイナリかは扱いの違いでしかないし、クラスによってはかなり細かいしな。
>>529 > !(Range.new(2, n - 1).map{ |e| n % e }.include?(0))
(2...n).none? { |e| n % e == 0 }
存在しない配列やハッシュに値を入れようとしたら、 初期化して入れてくれればいいのに
>>530 なるほど…もう一回考えてみるわ
>>529 書き直してくれたのは感謝するし今後に役立つからありがたいけど、今回は基本的な演算の他には『枝分かれと繰り返し』しか使えないんだ
そういう課題ってことだ
>>531 大クラス主義についてはmatzやko1が話してる
http://www.atmarkit.co.jp/news/200712/25/ruby.html > まつもと 1.8にもEnumeratorとGeneratorという2つの似たようなライブラリが
> あったんですけど、それが1.9ではEnumeratorに統一され、組み込みになりました。
> ここら辺、ああ、Rubyはやっぱり“大クラス主義”だなって思いますね。
>
> ――大クラス主義とは?
>
> 笹田 似たような機能のものを大きなクラスにまとめるという方針です。
> たくさんあると覚えるのも大変だし、使い分けられないから、まとめちゃう。
言語の設計と言語の使い方は別だ クラス毎にファイルをわけたり、多機能クラスをシンプルなクラスにわけたりするのを勧めたのは、 エラー表示が効果的になる言語の使い方の話だ 分ってると思うけどそれ外にも、ワンライナーや関数型等の書き方で使いこなせるようになっている
Ruby自体が大クラス主義だから利用者も大クラス主義であるべきだとは俺も思ってないよ だからといって過剰な程にクラスを派生しまくるのは、型を束縛しないダックタイピングということもあって、 利便性が下がるんじゃないかなーとも思ってる そりゃStringとHashとThreadが1つのクラスになっていたら発狂するけどね
>>535 流れでたまたまそう思っただけなんじゃないかなあ。
ポリシーがあってないような連中だろ。w
>>539 教条主義的なポリシーなんて要らないというポリシーなんじゃね?w
大クラス主義の話になったところで じゃあみんな具体的に どれくらいの大きさのクラスにしてる? 目安は一クラスあたり何行?
多くても500行ぐらいだろうな。 1000行いったら嫌悪感が出る
俺の場合はクラスの大きさに目安はないな 100行に満たないものもあれば1000行を超えるものもあるし それよりもメソッド(Cなら関数)があまり長くならないように気をつけてる 具体的には80文字×25行のスクリーンからはみ出ないくらい なんちって
深いネストのifがあって、Cだったら { に対応する } に飛べば範囲が判るけど、 rubyだとどうするの?
>>546 rubynに限らず、エディターのプラグインで、対応するブラケットに飛ぶのが有る。
何も見ずに書けるくらいに慣れた言語はRubyが初めてで便利に使ってたんだけど、最近JavaというかKotlinやってた んで戻ってきた インスタンス変数が名前だけでアクセスし放題なのってすげえ便利だけどすげえ邪悪だな! 行く前はなんとも思わなかったけど@hogeとか生であちこち書いてあるとなんか不安になるようになったぞ!
要はattrでゲッターセッター使いまくりってことだよね Rubyは便利だけどそれが時にかえって落とし穴になる
railsの前からruby使いで今でもrails何それな人っているんだろうか
このスレにはWinでRuby使ってる絶滅危惧種がちらほら生息しているみたいだから割といるんじゃないかな
winでperlだとactiveperlが定番だけど、rubyだと何だろう
>>548 インスタンス変数はコンストラクタで必ず初期化するようにすれば
他の言語とそう変わらないと思う
>>550 perlから浮気して半年しないうちにrailsが騒がれた
railsの情報はたまに見るけど未だに使ったことがない
>>553 インスタンス変数を直で使う可能性がわりと残ってるということ自体がキモいというのはあるにはある
それだと「いんすたんすへんすうはつかわないでください」と利用マニュアルやらコーディング規約やらに赤字で書くのと変わらんしな
winでrubyだけどUnicode引数が扱えないのと パスにUnicodeが混じると動かないのは治った?
>>548 >>553 インスタンス変数の宣言が不要って部分のこと?
それはコンストラクタで初期化すればいんじゃないの
kotlinはインスタンス変数を直接作れないし触れない 同名のセッターとゲッター経由でのみアクセスする Rubyでいうとこのattr_accessorだけしか存在しない状態 まあ他の言語の話はどこまでも広がるから程々に
インスタンス変数を直接使うよりattr_readerとかattr_accessorを経由するようにしてるなあ 主にタイポ対策として
@で直接インスタンス変数を使うか アクセサを経由するかってことか クラス内なら直接使ってもいいと思う クラス外からアクセサを使う方が問題
>>556 すべてのOS・言語で、
ユーザー名・PC名・パスなどのシステム要件には、半角英数字しか使うな。
誰も日本語ではテストしていないし、すべてのアプリでテストしていないから
半角空白も使うな。
「a b」などは、2つの引数に扱われてしまうから、バグる
Unicode の4バイト文字などには、多くのアプリが対応していない。
例えば、中国の地名の「深せん」の「せん」は、TeraPad では対応していない
こういうアプリが一杯ある。
特に、圧縮・解凍アプリでは、日本語のパスは使えない
>>559 通常はプロパティのみで実体の変数にアクセスする場合に特別なキーワードを使う
https://kotlinlang.org/docs/reference/properties.html#backing-fields >>560 privateなattr_accessor/attr_writerを用意するより
@fooのほうがインスタンス内部の状態にアクセスしてるのが直感的に見えるから個人的には好みかな
>>562 今どきUnicodeのパス名くらいはテストしてるだろ
半角スペースもちゃんとクウォート対応して作ってればいい話
コマンドラインで書く時に少し面倒になるくらい
ディレクトリツリーを再帰処理したときにディレクトリ名に“[]{}”があって Dir.glob(File.join(subdir,"*")) # subdir = "photo[2017]" てな感じでハマった
globは昔からへなちょこだよ 入ってるファイル名がglob安全だと事前にわかってるディレクトリにしか使ったらだめだよ
winのRubyで日本語できないとか言ってる奴いるけど、 UTF16Nの文字コードも知らないで適当にやってるからじゃないの?
原因は一つだけじゃない エンコ間違いを文字化けと言ってしまうくらい 知識が貧弱すぎる
それも違うよ 本来文字化けは通信回線のエラーで発生するものを指してた
まず、環境変数やコマンドラインオプションの -E で utf-8 を指定しないと、ARGVがutf-8にならないので 正確なコマンドライン引数を取得できない*バグ*がある。 さらに、ディレクトリのファイル一覧を取得する時に、encodingオプションを指定してutf-8にしないと、 ユニコードのファイル名を取得できないという*バグ*がある。 作ってる人たちは仕様だと思ってるが、こんなの誰も嬉しくないし、単なるバグ。 だからrubyinstaller2の人も-Eutf-8をデフォルトにしようとした ソースコードがデフォルトでutf-8の時代に、何でこんなことになってるのか理解しがたい でもそれ以外のことは相当windowsのために頑張ってくれている pythonよりマシでnode.jsより劣ってる
根本的にスクリプトのパスをUnicodeで扱ってないから、スクリプトにlocaleで表せないUnicodeの文字が含まれるだけで実行できない糞仕様
やろうと思えばできる、とデファクトがデフォルトではない、との間には深くて深い溝が
なるほど
http://magazine.rubyist.net/?preRubyKaigi2017-01 に挙がってるRuby3.0の三つの課題って
なんというか、C言語ですらクリアしてるような・・・なんだろう、なんで今更
そんな、プログラミングの最黎明期まで時間を戻して修正しなければならない事態って一体
Rubyはレジスタ利用できないから30年遅れてるとか喚いてた人と同じ人かな
下手にRuby本体をいじるより、TypeScriptみたいなものを目指して欲しい Matzの発表を見ると、中途半端な実装で終わりそうだから
Rubyはクラス定義自体が動的で、それを悪用したメタプログラミング(笑)とかいうハックが横行しているから静的解析でなんとかするのは無理がある Rails界隈も含めて現実的にまともに役立つものにするにはTypeScriptみたいな後付け方式しかないだろうけど、 「型書きたくないでござる」(笑)に真っ向から反するのであり得ないだろうね
>>580 俺が言ってるわけじゃなくて、Ruby界隈の人が言ってるんだよ
君の文章も借りて平たく言うと
Rubyは実行速度が遅くて、静的型が無くて、並列実行が無くて
(何十年かは知らないが) 遅れてるから
Ruby3.0で上記3つをなんとかしたい
って事でしょ
いや実際問題ないんだったら、Ruby3.0の目玉になんかするかね
Javascriptみたいに strictって文頭につければ厳しくチェックできるように typeって文頭につければ型をつけれるようにとか出来ればいいな
>>584 付けるならソースファイルじゃなくてクラスに対してだと思う
Rubyの場合、型付けをどうするかよりも、そもそも型というものをどう定義するかが問題
Rubyのクラス定義ってクラスの静的な構造を表してるんじゃなくて、メモリ上にクラスを定義する手続きなんだよ
実行してみないとどんなクラスになるかが分かんないの
ここは初心者スレなので初心者に役立つ会話をしようね リアルで話し相手がいないレス乞食が常駐してるとうざいよ
Rubyのバージョンを上げるんじゃなくて、別の言語をまた作るべきだな 何か言語を使っていると、こうだったらもっと楽なのにというネタがいろいろ溜まってきて、 それを解決した言語が現れる それを使っているとまたネタが溜まってくる、というサイクルで進化していくもので、 それはバージョンアップで対応できるような内容ではないのが普通
まぁはっきり言ってそれは無理だね 言語のシェアみりゃ分かるが、昔からある言語が未だに強い その言語を使うしかない(他にない)、ってぐらい追い込まないと 新規の言語が広まるのは無理(Swiftとか) 特にRubyの場合は今の一般的な常識でまともな言語に作り直したら C#やJavaとそう変わりない物が出来上がるだけで、だったらC#やJava使えば?ってなる これはちょうど、新たに希望の党を作って民進党のリベラルを排除して 自民党と何が違うのかよくわからなくなって、だったら実績のある自民党で良いじゃん、な 希望の党みたいなもの 逆に今のRubyをどんどん改良していけばよいかと言われると、これも民進党と同じでジリ貧 C#みたいに互換性を維持しつつ新しい機能を取り入れまくって進化している言語もあるが Rubyがそうなれなかったのは、最初の一歩が既におかしかったから 今頃、静的型がどうのこうの言ってるのは最初に犯した過ちを今まで引きづってて 2020年のオリンピックまでにはRuby3.0で云々言ってるわけだが 逆に間違えたからこそ、一部の狂信者に支持されてここまで来たわけで マトモにしたらJava、C#、C++などのメジャー言語とガチンコになるし、狂信者も付かない 押すも引くも、結局どうにもならんということ
もちろん新規言語がそう簡単に広まるわけないが Rubyが登場したときにも昔の言語はあったわけで 自由に選択できても広まったし 今でも囲い込みされてるSwiftより 言語ランキングで上位だったりする 政治の比喩を持ち出して印象操作してるけど ScalaとかGoとか新言語どんどん出てきて JavaやC#ほどじゃないけどそれなりに使われてるから むしろ昔より新言語が使われてる位だと思う
LLスレから追い出された連中が相手してもらえると思って来てるからな 彼らは別にRubyを使えるわけじゃないから厄介だ
>自由に選択できても広まったし >今でも囲い込みされてるSwiftより >言語ランキングで上位だったりする どうでもよいことだが、それは昔からある言語の方が 新規の言語より強いという裏付けにしかなってないのでは? 新たに言語を作れば今のRubyのポジションは捨てて0からなわけで 今の時代に何の後ろ盾もない状態で新たに言語作ったって
>>591 >昔からある言語の方が
>新規の言語より強いという
>裏付けにしかなってないのでは?
「昔からある言語」も昔は
「新規の言語」だったんだよ
もし常に昔の言語の方が強かったら
永久に世代交代しないで
FortranとかLispがずっと主流になってるはずだろ?
だから、かつては受け入れられた新しい言語が今は受け入れられない時代背景を説明しろ
>>594 時代背景を考えると、今の言語なんて
まだまだ未発達なので、今の言語は新しい言語に
追い抜かれる運命だよ
そりゃそうだね。建築なんて何千年前からあるんだって話だから
やっほー discordrbについて聞きたいんだけどこのスレでいいんかな
>>597 >>1 を見てみ?
質問・要望・雑談・頃しの以来までなんでもゑるかむだよ
俺はもう練るけど那!
>>596 それは今の主流言語がさらに進化するだけ
いくつが理由がありそうだけど、みんなそんなに言語に飢えてないし
(おおむね満足している、というか供給過多)
光るアイデアを持った新たな言語が生まれても
メジャー言語がパクれば終わりだし、皆がそれを望んでる
何か光るものを見出しても
それだけでその言語を使おうということにはならない
仮に新しい言語を作るにも、今時は求められるものが高すぎるので
個人では手に負えないし、そもそも個人で作った言語など
昔から存在していて実績があるとかでもない限り、誰も使わん
他、既存の言語の資産が、C言語が登場した当時と比べて
というか比べられないほど凄いことになってる
世界中のプログラマがひたすら書きまくったから
一例としてLinuxのカーネルのソースコードの行数の推移
1991年 0.01 約 10,000 ユーザー数1人(開発者)
1992年 0.96 約 40,000
1994年3月14日 1.0.0 176,250
1995年3月 1.2.0 310,950
1996年6月9日 2.0.0 N/A
1997年 2.1.0 約 800,000
1999年1月25日 2.2.0 1,800,847
2001年1月4日 2.4.0 3,377,902
2003年12月17日 2.6.0 5,929,913
2008年 2.6.x 約 10,000,000
2011年7月21日 3.0 14,646,952
2012年1月 3.x 約 15,000,000
2015年8月 4.2 約 20,000,000
建築がどうのこうの言ったって建築に互換性は関係ないしな セキスイだろうがダイワだろうが、基本的にどうでもよい 車もそうだし、というか、ほとんどの物は自由競争の名のもとに メーカー間の互換性を気にしなくてもよいようになってるんだが (ハードウェア業界はわりと規格をきっちりやる) ソフトウェアだけは互換性の壁が異常 この辺、なにか フォトショップのデータを山のように持ってればフォトショップを使い続けるしかないし MSOfficeのデータを山のように持ってればMSOfficeを使い続けるしかない 値段は大手企業の良心にかかってるというか、不当に値段を吊り上げられても、割と買うしかない パチもんもあるけど、互換性が完璧ではないしな まさかRubyでPythonのコードが走るわけないし
3DCG目的で、答えが同じになる浮動小数点を含んだ別々の計算で、 結果にズレのない同じ数値になるようにするにはどうしたらいいの?
>別々の計算 式が違うって意味なら結果が変わっても仕方ない 何桁まで使うかを自分で決める
あと >浮動小数点を含んだ ここもちょっとあいまいだな BCDとかを除外するのか使ってもいいのか いまいちどっちともとれなくもないこともない
>>602 浮動小数点数の計算誤差なんて、値と式によっていくらでも蓄積されるから、割り切りが必要だぞ
極端な例をCで言うけど、floatの精度で一致させるつもりでdoubleを使っても一致しないことも出てくる
rubyだと標準ライブラリに含まれるbigdecimalライブラリがあるけど、
これも無理数だと計算誤差が出てくるわけだし
https://docs.ruby-lang.org/ja/latest/library/bigdecimal.html >>606 えっ、まじで?
3DCGって言ってるから座標計算とかじゃないの?
sin cos sqrt使うとRationalってFloatになるんじゃ
マクローリン展開でどうやって誤差なしで計算するのw
真の値である必要は無い 二通りの計算が同じになって欲しいんでしょ どんなコンピュータ持ってきても円の面積すら誤差なしで計算できないぞ
宇宙船でも、円周率の誤差のせいで、目的地にたどりつけないから、double 型を使ってる float だと精度が足りないから
>>610 次の命題Pが真であるといっているんだよね?
命題P
任意のマクローリン展開可能な関数f:R -> Rに対して
適当な次元で切り上げたものをgとすると、
任意のr, r' ∈ Q に対して
g(r) = g(r') => f(r) = f(r')
しかしr'の任意の近傍Dに対して
g(r) = g(r') => f(r) = f(r') (r ∈ D)
は、自明なfを除き明らかに成り立たない。
よってその論理はおかしいよ。
>>594 具体的な提案持たずにこき下ろしたいだけの奴はつまらん。
単なる背乗りダネ。
誤差のあるPC1 誤差のあるPC2 PC1とPC2で同じ結果になったら合格です!!!
10.0 , 10.0 , 0.0 の座標にある頂点に、 Z軸を軸とした45度の回転を正負どちらの方向に加えても、きっちりX軸やY軸にのってくれなくて、 頂点が同じ座標に重なるはずの別々のポリゴンの計算でも、ずれる可能性がある これってライブラリ使うだけで解決できそう? それともライブラリ+αで自分で何か実装しないといけないの?
>>612 じゃあ、sin xをx - x^3/6で近似して、
有理数演算した結果を比較してみれ
>>615 浮動小数点計算の同値判定は差の絶対値が微小値未満かどうかでやれ、というのが
よく言われることかな
もちろん計算誤差の蓄積の問題もあるけどこれ以上は計算機科学でも勉強しないと
いけないかもしれない
というか浮動小数点の話はスレ違いかと
Ruby遅い ↓ 速いと言われるPythonやLuaに手を出す ↓ 言われるほど速くならない ↓ Ruby(+ネイティブコードの拡張ライブラリ)に戻ってくる ←イマココ
>>616 だからそれじゃ意味ないでしょ
結局それはsinの引数xが等しいかを比較してるのと殆ど同じなんだよ
x' = x + ε (|ε| << |x|) の時、その方法では正しく比較できないことは自明だし
更にsin(π/3) と sin(2π/3) などの比較も同様
まあ速度でRubyからPythonに変えようとするのは無知としか言いようがない
>>速いと言われるPythonやLuaに手を出す ↓ なんでPython? いまならGoだろ ↓ >>唐突にコンパイラ言語が出てくるのはなぜなのか 速さを求めているのに、 逆にコンパイラ言語と突っ込むほうが なぜなのか? だわ Pythonに手を出すほうもほうだけどな
浮動小数の話は、他のスレで聞くか、検索して 誤差があるから、同値比較はできないので、 自分で誤差を決めて、範囲内かどうかをチェックする 値 - 誤差 < 値 < 値 + 誤差
それはもう工夫とかじゃなくて、 プログラムを作る時の当たり前の話だな どんな言語でもそう いるんだよ ループ変数に平気で実数使うのが
浮動小数点は、情報処理試験の基本。 プログラミング以前の問題 float に、ずっと、1を足していくと、どうなるでしょう? とか
Rubyにおいての浮動小数点のライブラリの話とかはこのスレの範疇だからどんどん質問していいぞ スレ違いとか言ってるのは、ただのスレ進行の妨害したい奴だから無視していい 以前もこのスレには自演で荒らそうとする奴が出没してるんだ
Rubyに関する話なんてほとんど出てないだろこのスレ どこに目をつけてるんだ
落ち目だから目移りするのは仕方ない いくらRubyが好きでも、今の状況でRubyしか見てないとしたらむしろエンジニアとしての資質に欠ける
まだいるのかコイツ 自演してる暇あったらくたばれ屑
https://japan.zdnet.com/article/35109803/ なかなか嫌われてるねーw
PerlとかObjectiveCとかCoffeeとタメ張るくらい立派なオワコン言語だわ。
JavaScriptの方がよっぽど嫌なんだが 罠みたいな奇妙な仕様が多いし
>>633 それはおまえがJavaScriptに詳しくて
他の言語に疎いからだな。
他の言語にも罠はたくさんある
>>634 Rubyの方が詳しいが
Rubyは罠が少ないから良い
>>636 むしろ0が偽の方が嫌だわ
ある変数がnullかどうかだけ知りたいのに0が偽だと==nullとか書かないといけないし
求める答えが0の場合ってけっこうあるし 1,0を真偽に使う言語仕様だと 数値化されてグダグダになることがよくあるから 0とfalse,nilを分けるRubyの方がスッキリしてて良い
javascriptはTypeScriptに救われたが、rubyは誰が救ってくれるのか
数字の0とか文字列の""は、大抵はfalseになってくれた方がシンプルに書ける でも、たまーに落とし穴にはまる perl だと "0" という名前のファイルだけ処理できなかったりしてた そういう痛い経験があるから、敢えてなんだろうな
JavaScript では、偽が何種類もあるから、 !!変数 みたいに変数を否定して、ブール値に直してから、 さらに否定するなど、大変
0という1文字だけが書かれたファイルはPerlが誤作動するというのは大昔からの定番ネタだからな
TypeScriptの何がいいのかさっぱりわからん CoffeeScriptと何が違うのか?
開発力 CoffeeScriptは所詮個人のプロジェクト 一人がやめたら頓挫するレベル
Rails使いは宗教上の理由で絶対にTypeScriptに手を出せないのが悲しいよね バックエンドよりフロントエンドのほうが厳格な言語で書かれてるとかさすがにキチガイ
>>638 ,649
分かれてはいるけど、肝心のifではnilは偽と同じ扱いになる。
はじめから、boolしか受け付けない、であれば0が真とか悩む必要なかった。
一見よく考えられているようで、実は大失敗だったと。
>>649 プログラミングで宗教とか言い出すのがキモい。
何でも強制連行!みたいな。
>>646 コード補完やリファクタリング
騙されたと思ってVSCodeでTypeScript書いてみたらいい
なぜ手間をかけてでも型を書くのか理解できる
型書きたくないでござるを否定するわけじゃないが、
ちゃんと両方の短所長所を理解した上でどちらが優れているか自分の頭で判断することが大切
それを放棄して一方の信者の言うことを鵜呑みにするのはそれこそ宗教だ
「とにかく楽をして速く書きたい」 というのと、 「売り物なんだから万に一つの間違いも無いようにガチガチに作りたい」 という、二つの相反するパラダイムがあって、 それを同じ言語に負わせるのは無理がある awkとかperlとかrubyとかは前者を志向してるので、 それに逆らった使い方をして使いにくいとごねられても困る
>>653 前者は「好きなエディタで」または「書捨ての単純なものを」が抜けてる
メンバ補完がバリバリ効く環境ならAPIリファレンスを見る時間が節約できて、ある程度まとまった規模なら型を書く手間は余裕でペイする
Matzクラスになると慣れたEmacs以外のエディタを使うコストが大きいからまた違うんだろうけど
型推論でvarで済むようになると、型を書く煩わしさがほとんど無くなって さらに一般的に使われるエディタがIDE化した現在では 型があるメリットのほうが遥かに大きい しかし動的言語に直接型を導入するのは無理があるので TypeScriptみたいなのが最良の方式になるわけだが、 あんな完成度の高いものを作るのはもっと無理な話だろうな
>>653 そんなに速く書きたいのかな?
それよりも速く読めるほうが重要じゃね?
型を書くのは面倒だけど、読む方は型が書いてあるから
コードの理解が速くなる。
書くのはタイピング速度を上げればいいだけの話だし
バックエンドで安全性最優先ならコンパイラ言語だがRustじゃね。まだ発展途上だが
斜陽なのは事実だから仕方ないね 全盛期に粗製乱造されたRailsアプリが負債化して、品質も大事だという方へ揺り戻しが来てるのが今
リプレイス案件で次は別の言語使いましょうですね判ります
早くシンプルに作る時代から 安定して長期的な傾向になったんだから 時代に合わなくなってきているのは分かる。 でもスタートアップとかにならまだまだ現役
日本って本来の意味のシステムエンジニアリングは壊滅的にダメだからなぁ 品質を管理できる体制作りとか絶望的に期待できない。ガバガバ管理でゴミが 乱造されても現場に押しつけて終わりだし
RubyやRailsや最先端だと誤解されていた時期もあったけど 実は全てJavaが十数年前に通った道・・・のすぐとなりの けもの道を歩いているに過ぎない
>>664 その差は大企業の力と一個人の力だろうね
一方は整備しつつも巨大な力であっという間に
先に進んでしまう。
けもの道はできるのも遅い
小型船の製造を得意としていたルビー造船所だったが、 大型船の製造を頼まれてこなし、持て囃されてしまったのがケチの付き始め。 挙句の果に「ルビー造船所は豪華客船を作るのに向いてない!」 と言いだすお馬鹿さんまで出てきてしまった。
Rubyのような動的型言語は手軽に気楽に素早く、 だが長期的にみればむしろコストがかさむかもしれない ↑っていうイメージがそもそも嘘っつーか これは言語開発者が言語を作る場合においては確かに成り立つ マトモな実用的な言語を作るのは大変なわけだが、それでも 動的型言語をを作るのは静的型言語を作るのに比べればかなり楽、最初は楽 ただし、発展していって、実行速度とかコード補完とか、本当の意味での使いやすさとか そういう次元の話になってくると、むしろ難しいというか行き詰まる だから、手軽に素早く作れるが、後で困るかも、というのは Rubyの言語生命の話であって、そこからくるイメージは有るが 実際には俺らには関係が無い 利用者には単に手抜き言語であることのディメリットしかない もしくは言語開発者自身がそういう思想に基づいて言語を作ったことから派生する 負の連鎖のようなものが起こっているかもしれないが
>>669 むしろ、作った後困ってない言語って何よ?
未踏に参加して金が絡んできてからおかしくなった気がする
冷静になって考えてみると
>>659 の言い方もおかしいよな
揺り戻しっつっても、全盛期ですら静的型言語に勝ってたことは一度もないし、ニッチもニッチ
一部の人がはしゃいでただけだからなぁ、揺り戻しもなにもなー
殆どの人は支持も何もしてなかったし(むしろ冷ややかか?)
既定路線っつーかなんつーか、大人と子供みたいな感じかね
民主党みたいに一時期でも与党だったってわけでもないし
揺り戻しっていうのかね、これ
Rubyがニッチっていうのは違和感がある D言語とかもっとニッチなのがあるからね 言語ランキングの十位台位に常にいるんだから そこそこメジャーって言ってもいいと思う
コーディング仕様と言語仕様の区別が付いていない人がいるな
>>674 D言語は競プロには便利だぞ
C++よりは書きやすいし、競プロならライブラリが揃ってるかどうかは関係ないしな
それはともかく、Rubyは10位前後をずっと保ってるわけだからニッチではないわな
完全にメジャー言語だと思う
メジャー言語なんだからそりゃアンチもいるわ
たまたま粘着度の高いアンチがいるとこういう状態になるのも2chならよくある話
粘着度が高いのはキモいけどね、個人的には
rubyにアンチが多いっていうのはrails伝説に夢見て飛び込んで 勝手に挫折や絶望を味わった連中が暴れているからだろ。 rails絡みの要望をそのまま受け入れ続ければrubyは死ぬな。
何を今更 今のRubyのコミットはほとんどRails絡みでしょ とっくにRails専用スクリプトになってるんだよ
もともとperlの進化系として便利に使ってただけの人にとっては、 いろいろ環境が充実して有り難い限りだ
世界の中でプログラマーは1%も居ない。 更にその中で複数の計算モデルの違う言語を使いこなして、本当の意味の比較が出来る者など極一部。 つまり、殆どの者は自分の好き嫌い・得手不得手を言語の良し悪しに摩り替えて喋ってる。 そういう俺も、Javaは許せん!w
珍しくスレ数が伸びているからと覗いてみたけど、 エンジニア視点によるRuby固有の問題点は何一つ話題になっていないのね
何か問題があったとして それがRubyだけの固有の問題かどうかは、割とどうでもよい ざっくりというと、動的型言語はどれも同じような問題にぶち当たってる 元々は多少マシンのリソースを食ってもプログラマが楽できた方が良い とかいうユルフワな考えもあったんだろうけど 実際にはプログラマは楽できないし、マシンに負荷がかかるだけだった 動的型で楽できたのは言語を開発する側だけ (それも自分たちは静的型言語で静的型の恩恵を受けながら言語を開発してるという) しかも、パフォーマンスとかコード補完とかマトモなことをやり始めると むしろ静的型より難易度が上がるという 結局、言語開発者にも利用者にも機械にも、おおよそ誰にも優しくないのが動的型で 非常に筋の悪い、行き詰まった方式と言える また、文法の面からみても、変数宣言が無いから変数スコープがぐちゃぐちゃになるし ( もし変数スコープを明確にするために変数宣言を導入するんなら (オプションかどうかは置いておいて)型がかけても良いんじゃね?という発想に至る←通常は ) 元々変数宣言が無い言語に後からオプションで型宣言を入れるなら これは本当にダサくて、それをやっても、後付け故に変数スコープはグチャグチャのままで だったら初めから変数宣言導入しとけって感じ
多分だけど、ここに書いてる粘着君はただ叩きたいだけだね 静的型と動的型を理由にしてるのも、そこが叩いてる人にとって分かりやすいからというだけだもんね その証拠としてはPythonの話が一切出てこないところだね
動的型のくくりとしてPythonはもはや避けられないレベルで普及してる言語なんだけど なぜかRubyを叩く人はPythonの話を一切しない これはPythonはRubyよりは勢いがある言語なので下手に叩くとしっぺ返しを食らうからだろうね その点、Rubyは勢いはそこまででもないので叩いてもそういうことがないと思ってるんだろうね つまり、叩きやすいから叩いてるだけで、そのメンタルは煽り荒らしと何ら変わらないんだろうね
>>682 ハサミは髪や布を切るものだからな
ガラスが上手く切れないからと言って店に因縁つけるクレーマーがコイツ
ダックタイピングは便利な面もあるだろうが 静的型でも静的なダックタイピングなら出来るし コンパイル時にチェックが入るから安心 大体は静的なダックタイピングでなんとかなるし 動的なことがしたければインターフェースを介したほうが 分かりやすいし、安全
それをPythonスレに書き込んでるなら説得力もあるんだが、それをやってない時点でお察しだよな 動的型を敵視するなら今ならまずPythonスレに書くべき内容な訳なんだから
>>682 完全にいつもの粘着おじさんだね
理解できないなら使わなければいいだけなのに
粘着するのはコンプレックスの裏返し
動的型といってもPythonは型アノテーションを入れたし
過去の過ちを反省して修正していく方針だからね
そーゆーのまで叩いたりはしないよ、まぁ頑張れって感じ
一方Rubyは未だにこんなこと言ってるからね
>
https://togetter.com/li/1021897 > 型は絶対書きたくない" "Ruby3は東京オリンピックまでに
> Rubyの父Matzによる、「楽しいプログラミング体験を届けるために」
まぁこんな感じなんで、かなり差があるよね
他の動的型言語も基本的に静的型は入れたいんだけど
後から入れるのは難しく、技術的に苦労しているという感じ
「型は絶対書きたくない」とかワケワカラン事 言ってるのはRubyぐらいだろうな
>>689 「過ち」とか言うならそれをPythonスレに書きこんでみたらいいよ
話はそれからだよね
Rubyスレにだけ書いてる時点でただのRubyアンチであって、動的型アンチであるなら
他の動的型スレに書いてないと説得力皆無だよ
ある程度話の流れで付き合ったけど、基本的にPythonは関係ないからな さっきから事あるごとにPython、Python言ってるのはお前であって俺ではない むしろ俺がPythonについて何も言わないから Pythonについての言及が無いのはおかしいと言い出したのはお前 それで、ほんの少しだけPythonの事も言ったら (それもPythonについては何も思ってないという内容) 「それをPythonのスレで言え」はおかしい だからPythonについては何も思ってないといっただろ、話聞いてないな
>>691 動的型の話をしてるのにPyhonについて完全無視
これは明らかにおかしいよね
アンチ動的型ならPythonについて語らないのは現在においては嘘だし
他にも古くはLispなど動的型言語は数多くあるのだから、そこらの言語スレに書いて
ないならアンチ動的型じゃないよね、と
>>691 ruby-devでもruby-coreでもいいからキチガイの主張を投げてこいよ
便所で叫んでも滑稽なだけだぞ
あと日本語解る?
今のところmatzのアイデアは希望が持てないし、この件に関して議論が無さすぎて rubyコミュニティーが停滞してるように感じる
>>692 だからpythonは型も書ける方向に進んでるでしょ
>>695 型を指定できないのが「過ち」だと言い切ってるならそれをちゃんとPythonスレで主張しないとね
型「も」書けるレベルなら意味は無いわけで
型を無くすことが目的になっちゃダメだよね。 コンピュータにとっては型が無くても良いかもしれないが 人間にとっては型があったほうが理解しやすい。 型は人間にとって必要なもの 書くのが面倒っていうのなら、必要な所と必要ない所にわければいいじゃん そもそも型は何かというと外部とのインターフェースだよ。 外部というのはクラスであれば、クラスの外から呼び出す時 つまりはprivateメソッドやローカル変数には型はいらない 逆にpublicメソッドには型は必要 あとメソッド名だけで区別するのはいい加減やめよう Aというインターフェースのnameと、 Bというインターフェースのnameは意味が違う インターフェースを複数実装するなら、 def A_name や def B_name という名前で定義できるようにするべき 外部から呼び出すときは、B_name()ってやらないといけないのか?と 思うかもしれないがそれは違う。例えばこんな感じだ obj = Klass.new obj.name ← これはKlassのnameメソッドが呼び出される a = cast<A>obj a.name ← これはKlassのAインターフェースのnameメソッドが呼び出される b = cast<B>obj b.name ← これはKlassのBインターフェースのnameメソッドが呼び出される このように複数のインターフェースを持たせても適切なメソッドを呼び出せるようにできる
>>697 他の動的型スレで同じ主張をしているなら説得力があるけど、ここだけで書いても何も説得力ないよ
>>697 rubyに求める事じゃないな
やる気のある人間はruby (+他の言語) を元にして新しい言語を作ってる
お前も作ってみろ
>>700 はい。だから作ってますよ?
将来、言語の標準機能としてlint相当のものが内蔵され
現在ドキュメントとして書いている設計書を
プログラム言語として記述できる言語ができたとしたら
その開発者は俺だと思っていいよ。
>>702 今の言語は、言語と言う割に処理を記述することに
特化していて、設計を記述する能力が低いんだよ。
そして言語というのは自己検証可能でなければいけない
>>703 うん、分かったからrubyスレに書き込むなよ
言語作ってみろと言われたから 作ってると言っただけなのに この反応w コンプレックスかな?
>>706 5ちゃんねるで好き勝手やれなくなるから断る
どうせあんただってgithubのアカウント言わないだろ?
>>706 作ってるけど公開してるサイトは言えない、なんて宿題はやったけど持ってくるの忘れましたより
信頼性のない発言だよ
>>708 じゃあちょっとおまえの信頼性を知りたいから
githubやtwitterなどのアカウントを教えてくれ
>>709 意味が分からん
公開する気がないものを開発してるのかい?
勘違いしてそうだけど 言語作ってるから偉いとかじゃないぞ どうせ確実にRubyより使われないだろうし
>>710 5ちゃんねると紐付けられるのがいやなんだよw
おまえだって公開するつもりなんだろ?
さっさとgithubやtwitterのアカウント教えれ
>>712 宿題やったけど持ってくるの忘れました、ってことね
おっけー
言語を作って公開したら次に言うのは 「このオレの素晴らしい言語が流行らないのは どう考えてもRubyにしがみついてるお前らが悪い!」
>>713 せっかく煽ったのに教えてもらえなくて
踏んだり蹴ったりだねw
おまえの願いは叶わなかった
>>714 すべての言語を作っている人にそれ言ってあげると良いよ
>>715 勝利宣言して逃げるタイプかー
よくあるねw
昔は別スレ立ててゴミクズ連中を隔離するだけの分別があったのにな 今のRubyコミュニティはすっかり腐り果ててしまった
>>720 5chで世界を知った気になり始めたら、色んな意味でヤバイぞw
matrixライブラリのベクトルクラスってなんで昔は外積ついてなかったの? 俺が知らないだけで右手座標系か左手座標系かってそれほど問題になるの?
>>692 だからなんなんだよ
Pythonは関係ないだろ
そんなにPythonが好きなんだったらお前がPythonのスレへ行けよ
>>724 動的型の話してるのにPythonの話がないのは明らかにおかしいからね
Rubyを叩く材料としての動的型、という理由付けしか見えない
プログラム言語の話をしてるのにCOBOLの話がないのは明らかにおかしい
だからpythonは過去の過ちを認めて静的型の機能を取り入れていく方向で 今まさに努力している最中なんだから、もういいだろ?生暖かく見守れよ なんで更生しようとしているやつまで叩く必要があるんだよ、それはいじめだろ、鬼畜 最初からやっとけよ、とは思うが、済んだことだからもういいんだよ
でさ、Pythonの話なんだけど、あの言語標準で なんでもかんでも用意するっていうのは素晴らしいと思うわけ
>>727 「過ち」だと言い切るならそれを披露してこいよ
RubyスレでだけやっててもそれはただRubyを叩きたいだけにしか見えないよ
>>720 維持しようとするよりも見捨てるコストのほうが安くなった
おそらくあなたも私と同じようにこのスレは1日に1回見るか見ないかになってるはず
そのうち週1にでもなるのだろう
荒らす意図でないならRuby議論スレ立てな。スレタイ読める?
おいこら 自演してスレ立てんなどあほ Pythonスレいけやボケ
>>733 初心者スレでしか議論ゴッコが出来ない奴も荒らしだろうな。
>>733 触っちゃダメ
荒らしを構ってるのは荒らし本人だから
>>735 これだけ長々やってるならどんなにIDを変えようがリホモだって固まってくる筈だから、
サーバ管理者に言えば各リホモ教えて貰えたり、
永久ban等の対策してもらえるんじゃない?
サーバ管理者自身が荒らしてるのでなければだけど
>>736 請求していろいろ引っ張る前に、次から注意文を書かないといけないな
荒らしを構うと荒らし本人と判断されてリモホ請求されます、とか
注意してもしなくても続けるのが荒らしなんだから問答無用で良い
荒らしを構ってる奴は荒らし本人の自演だから、構ったりせず見つけ次第、自演を指摘して排除すること 荒らし叩きに見せて持論を言い出す奴も荒らし本人だから、これも自演を指摘して排除すること 他の言語について話そうとする奴は、その言語スレから排除されてRubyスレに流れ着いた荒らしだから、これも構ったりせず元の言語スレへ誘導すること 注意するとしたらこんな感じか? これでも続けるのが荒らしだから、見分けやすくなるだろう
>>729 誰しも神ではないから本当の意味での過ちかは誰にもわからないし
そこの部分の定義ははっきり言ってどうでもよいが
ともかく過ちを訂正する振る舞いが行われた、という事実だけで十分
現象としての事実だけが重要だし、それ以上は求めてない
それに、「過ちだったか?」などという議論の段階では無くて
もう既に訂正されているし、意思が行動で示されてるし、終わったこと
>「過ち」だと言い切るならそれを披露してこいよ
何度も言ってるが、もう済んだ過去のことを無理に掘り起こして
つべこべ言う趣味はない
>荒らしを構ってる奴は荒らし本人の自演だから、構ったりせず見つけ次第、自演を指摘して排除すること >荒らし叩きに見せて持論を言い出す奴も荒らし本人だから、これも自演を指摘して排除すること >他の言語について話そうとする奴は、その言語スレから排除されてRubyスレに流れ着いた荒らしだから、これも構ったりせず元の言語スレへ誘導すること 毎回コレをはっても、続けるようなら悪質だよ 後は粛々と関連する法令の元で弁護士に請求してもらって、法的に措置とるしかない
荒らしがどうこう言ってる奴らのほうが圧倒的に鬱陶しい
もう相当長く粘着されてるからこの辺りで荒らしとはケリをつけて良いと思う いい加減にうざい
>荒らしを構ってる奴は荒らし本人の自演だから、構ったりせず見つけ次第、自演を指摘して排除すること >荒らし叩きに見せて持論を言い出す奴も荒らし本人だから、これも自演を指摘して排除すること >他の言語について話そうとする奴は、その言語スレから排除されてRubyスレに流れ着いた荒らしだから、これも構ったりせず元の言語スレへ誘導すること 荒らしはこれ張られるのが物凄く嫌いみたいだな 荒らしってばれちゃうから
>プログラマは楽できないし、マシンに負荷がかかるだけだった 嗤っちゃ遺憾がほんそれの通りだ みんな裸の王様が好きなのかそれともそのことにすら気付いていないあほばっか
上に出てたテンプレ張ってとことん荒らしを炙り出してやればいい 誰も困らないし つーか、荒らしの一人芝居がキモイ
荒らしを構ってる奴は荒らし本人の自演だから、構ったりせず見つけ次第、自演を指摘して排除すること 荒らし叩きに見せて持論を言い出す奴も荒らし本人だから、これも自演を指摘して排除すること 他の言語について話そうとする奴は、その言語スレから排除されてRubyスレに流れ着いた荒らしだから、これも構ったりせず元の言語スレへ誘導すること とりあえず荒らしはこれを破りたがるから踏み絵にして、IPやリモホ請求するか
そもそも誰のことを荒らしと言ってるのかがわからないし、過剰反応してて気味が悪い
散々、荒らされたけどこれで決着か どれくらい荒らされてたんだっけ? 半年?
それぐらいじゃない? 流石にこんなに長期間荒らされたら誰だって対策もとるし、 過剰反応とかなんとか苦情を言い出すのは自演してる荒らし意外いないわ
一般人を装った荒らしが文句を言うかもしれないけど、 ここは初心者用の質問スレだから、荒らしの排除は誰からも文句でないよ
これだけ注意しても荒らしは意固地になって自演してくれるわけだから ある意味、わかりやすい
>>753 するかではなく君がやりなさい
君が何を考えているかは君しかわからない
5chでのやり方は教えたはずだ
>>758 ログ潜ったらもっと前から荒らしてたわこの荒らし
ID換えて一般人装っては荒らしを繰り返してる
本物の確信犯
やり口が759と同じ
【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://mevius.2ch.net/test/read.cgi/tech/1155031689/ なんか連投してる奴がいて落ちたな
class Hoge require 'matrix' class Vector def huga return "huga" end end def self.get_vector(array) return Vector[ *array ] end end p Hoge.get_vector([1,2,3]) #=> 11:in `get_vector': undefined method `[]' for Hoge::Vector:Class (NoMethodError) これやるとVectorの元のメソッドが未定義っていわれるんだけど、 オープンクラスなライブラリとそうじゃないライブラリがあるの? class Vector < Vectorって派生させてやればメソッドの追加はできるけど、ものすごく気になる
現実を正確にとらえる力や想像力が無いのが分かりやすく露呈してて 面白い流れだったから期待してたけど、あまり伸びなかったね まともな頭のやつは流石にドン引きしたか
>>763 どういうこと?
Hogeクラス内でVectorクラスにメソッドを追加するんじゃなくて、
外でVectorクラスにメソッドを追加するって事?
Hogeクラス内でVectorクラスを定義すると、Hoge::Vectorクラスを定義する事になる 当然、require 'matrix'でロードされるのはHoge::Vectorクラスではなく、トップレベルで定義されたVectorクラスだから、違うクラスを定義している事になる self.get_vector(array)メソッドはmatrixのVectorクラスではなくHoge::Vectorクラスのメソッドを呼び出そうとしてそんなメソッドはありませんよって言ってるわけ matrixのVectorクラスはトップレベルで定義されているからどこからでも呼べるけど、 追加の定義を行うにはトップレベルで記述するか、下記のように記述する必要がある class Hoge require 'matrix' class ::Vector def huga return "huga" end end end p Vector[1,2,3].huga それはそうと、初心者用の質問スレで質問をブッチして意味不明な事を言い出す奴は何考えてるんだ? ここは初心者用の質問スレだぞ? そんなに自己主張したいなら他スレ行けよ
>Vector[ *array ] Vector クラスに、[ ] のメソッドが無いのだろ Vector クラス内で、Vector を使っているのが、おかしいのかも? self を使えば? メタプログラミングは、この本を読む。 メタプログラミング Ruby 第2版、2015 「ruby オープンクラス」で検索して
Rubyの内部クラスの定義ってそういう事なんだ すごく勉強になった ついでにもう一つ質問 特定の内部クラスとしてtopレベルにあるクラスを継承した時、 クラスの一部が機能しなくなるクラスってあるの? 継承すれば元のクラスの全部を引き継ぐんだよね?
>>770 お前がそう思うんなら(ry
お前の中ではな
同じRubyファイル内で定義したメソッドを別のメソッド内で呼び出すことってできる? AAA.rbってファイルがあって、その中に『def A』ってメソッドと『def B』ってメソッドがあって、メソッドBの中でメソッドAを呼び出す的な
def a hoge end def b a end
クラスメソッド、インスタンスメソッドなど継承される。 変数に関する記憶が怪しかったからちょっと確認したら、 クラス自身のインスタンス変数のみが警鐘されない買った。 class A X = self # 定数は継承される! @y = self # クラス自身のインスタンス変数は継承されない! @@z = self # クラス変数は継承されう! end class B < A p X: X, y: @y, z: @@z # => {:X=>A, :y=>nil, :z=>A} end
>>769 アンカ忘れちった
>>775 あと誤字が多かった
>>770 だから何かを問題だと思ってるならまずは削除依頼きちんとしなさいって言われてるだろ
私たちはあなたが何を考えているかわからないから手伝えないけど、あなたが何かすることを妨げることはしない
>>777 いい加減うせろよ荒らし
これ以上スレの進行を妨害するな
それと下記のテンプレ読めや
>荒らしを構ってる奴は荒らし本人の自演だから、構ったりせず見つけ次第、自演を指摘して排除すること
>荒らし叩きに見せて持論を言い出す奴も荒らし本人だから、これも自演を指摘して排除すること
>他の言語について話そうとする奴は、その言語スレから排除されてRubyスレに流れ着いた荒らしだから、これも構ったりせず元の言語スレへ誘導すること
>>778 だからそれを他人に強制して何か変えた気になる前にあなたの考えできちんと行動しろと言われているのでは
テンプレのおかげで誰が荒らしかすぐ分るようになったな さすがに半年以上も荒らされて、みんなぶち切れてたし
コードで間接参照の概念が必要になったとき、 Arrayクラスでオブジェクトを包装してやり取りしてるんだけど Ruby的には正しいのコレ?
そもそも何が間違いかなんて見方はナンセンス 筋が悪いとは思う
>>783 Rubyに限らないが、一般論でいうなら、低い抽象度で物事を考えすぎてる
例えば文字列中のカーソルの位置を進めるなら、
それは pos[0] += 1 ではなく cursor.next_char() だろ
Rubyでポインタが必要だと思ったことがまずない Cを難解にしてるのがポインタだし
関数やprocやlambdaでSystemStackErrorを起こすとRuby自体が落ちちゃうんだけどこれって仕様?
https://ideone.com/GmkU9W IDEONEでは何も問題ないんだけど
うちの環境(UbuntuとWindows8.1)ではnested_method1の2回目の途中でRubyが落ちる
1.8.7ではなぜか問題なく動くがそれ以外のバージョンは全て全滅
メモリーがハード故障起こしてると落ちたりするし、マルウェアからの保護機能で落とされてる可能性も有る 落ちる現象がハードウェア要因なのかソフトウェア要因なのかいまいち判断付かないから、 CPUからM/B、OSのバージョンとかRubyのインスコ環境や実行環境をもっと書いて なんだったらVMWareでシンプルな環境を構築してそこでコードを試して、落ちるかどうか確認する方法もある
>>787 ruby のBug だと思う。
手元の環境だと、2.4.2 2.3.5 2.5.0-preview1 rbx-3.84 でsegfault 、jruby-9.1.13.0 はsegfault は回避してるのを確認した。
1.9 以降で出てきたのは、ruby の実行エンジンが YARV 化されたタイミングでの問題だと思う。
ただ、スタック食いつぶす動作を安全に回避するのは面倒な上に、過度な再帰はプログラムの問題なので優先度は低い扱いになる気がする。
begin - rescue を外に書けってことかな
>>789-790 ありがとう
SEGVだったんだね
確認してみたところ同様の問題はいくつも報告されてたわ
https://bugs.ruby-lang.org/issues/13412 https://bugs.ruby-lang.org/issues/13596 ちなみに
RUBY_THREAD_VM_STACK_SIZEを10000とか小さい値にすると
>>787 は想定通り動く
#terget = Proc.new do |x| #p "nest_in" #x.call(x) #p "nest_out" #end #terget.call(terget) proc使ってstack level too deep (SystemStackError)が出るコードって言ったらこんな感じか?
ポインタが難解なのではない、C/C++のポインタの実装が難解なのだ
平易といわれようが読みやすいんだから仕方がない def func_recall() func_recall() end proc{func_recall()}.call
昨日と同じように今日も池沼のフリして荒らしてきたか
荒らし本人は自演がばれてないと本気で思っていそう 今のうちに例のテンプレ貼っとく >荒らしを構ってる奴は荒らし本人の自演だから、構ったりせず見つけ次第、自演を指摘して排除すること >荒らし叩きに見せて持論を言い出す奴も荒らし本人だから、これも自演を指摘して排除すること >他の言語について話そうとする奴は、その言語スレから排除されてRubyスレに流れ着いた荒らしだから、これも構ったりせず元の言語スレへ誘導すること
new以外のインスタンス生成方法を持ってるクラスって、 派生させても元のクラスのインスタンスを生成するんだね 全てのメソッド書き換えるのがすごく面倒なんだけど何か良い方法ない?
class MyArray < Array end p (MyArray[1,2,3] + MyArray[1,2,3]).class #=>Array 上のコードを見てもらえば分るけど、 Arrayを継承したMyArrayのインスタンス同士の演算を行うと、MyArrayでなくArrayのインスタンスが出力される 全てのメソッドの出力をMyArrayのインスタンスになるようにしたいんだけど、 メソッドを全部書き換える以外に良い方法って何かない?
>>807 ソースコードを見てみるとArrayの派生クラスであってもArrayとして作成されるようになってる
https://github.com/ruby/ruby/blob/trunk/array.c#L3643 度々似たようなやり取りが起こるけど、この件についてはRubyの仕様として、
改善される兆しが見えない (開発者の変更する必要性が薄そう)
正攻法となるとメーリングリストのruby-devに必要性を訴えて改善するくらいになるんじゃないかなあ
>>807 ビルトインクラスは継承すんな、てのがあるらしい
確かに、出力するオブジェクトのクラスをメソッドの書き換えしないで派生先や派生元に切り替えられたら便利だよな
しかしそもそもArrayとか継承したいクラスだよな オープンクラスで直接Array自体の挙動を変えてしまうと 何か問題が起こったときに怖い
方法を聞いているんだから感想を言っててどうするよ 一つの方法としてMarshal.dumpとMarshal.load使うってのはどうか? メソッドで派生元クラスのインスタンスがでてきたら、 そのインスタンスをMarshal.dumpしてクラス部分だけ書き換えてMarshal.loadしてクラスを変えるわけ
どの言語でも、Array, String などの基本クラスは継承できないし、継承してはならない prototype.js というライブラリは、基本クラスの動作を上書きして、変更したため、 モンキーパッチと言って、非常に嫌われた ただし、Rails のような権威が、基本クラスにメソッドを追加するのは、認められている。 これらは、開発保守が継続して行われるため つまり、個人レベルではダメ
どうでもいいよ どうせRubyなんか書捨てスクリプトにしか使わないし
配列が使いたいときは代替eachが使いたいから EnumerableかEnumeratorを継承するとか?
+ が返すクラスをどうすべきかってだけで、他のメソッドはできるだけ継承したクラスを返すようになってるよ
処理系に依ってEnumerable#mapとArray#mapが別実装だったり同じだったりして気持ち悪いから Array継承するくらいならEnumerableを継承するわ
>>818 > 別実装だったり同じだったりして気持ち悪い
オブジェクト指向の考え方を真っ向否定するんですか…w
また荒らしが進行妨害してるのか 方法聞いてるレスだっつってんだろ 毎度毎度、スレの質問無視して自演で持論を語って荒らすのやめろ ここは初心者用の質問スレだ
確かに、聞いてたのは方法だったな 明らかに見当違いなレス返してた荒らしもいたし ごめん 質問への回答だけどメソッド書き換えせずにという事だから、 const_get、const_setを使ってその場だけクラスを入れ替えるというのは? 今、適当に思いついたので検証してないけど
では雑談をしましょう 型Aを渡したときは型AAで、型Bを渡したときは型BBで こういったことが簡単にしたければ、静的型の機能を使うのが一番手軽で自然 なぜなら構文レベルでサポートされてるから (C++で言うところのテンプレートとか) なのでRubyに静的型を導入するのが手っ取り早い 結果的にはうまくいかなかったんですが、TypeAnnotationをつけて 頑張ろうっていうのを余暇でやっているらしく Ruby 3で導入しようとしている型システムは型推論だけでどうにかしようという アプローチとは別のアプローチ 2010年代のプログラミング言語は型ありなのが当たり前になってきているので Rubyはだいぶ置いてけぼり感(笑)があります ですので、コミュニティ内での危機感も高いと思います
雑談にみせかけた荒らしをずっとやってる奴が何か文句言ってるけど、 初心者の質問スレで質問無視してスレ妨害し続けてたらみんなぶち切れるわな もう半年以上になるんやで?
そうやって質問のレスを無視して荒らすから、 みんなぶち切れてるんやで? いい加減にしとけよ
俺は荒らしてないよ。そうやって絡んでくる君のほうが荒らしじゃないの
ID:Ob05ibl6 ほぼ毎日、スレに質問ついてるのに何処見てるの? もしかしておまえが例の荒らし? テンプレ貼っておくね >荒らしを構ってる奴は荒らし本人の自演だから、構ったりせず見つけ次第、自演を指摘して排除すること >荒らし叩きに見せて持論を言い出す奴も荒らし本人だから、これも自演を指摘して排除すること >他の言語について話そうとする奴は、その言語スレから排除されてRubyスレに流れ着いた荒らしだから、これも構ったりせず元の言語スレへ誘導すること
だから俺じゃないってw 俺普通に質問に答えてやったりしてるし
>質問なんてめったにないでしょ ってどのスレの話?
>>831 もちろんこのスレのことだよ
普段大して話題なんてないんだから、そんなに目くじら立て無くてもいいのになーって思うけどねえ
>>832 このスレの初心者?
ここの荒らしはアンチ粘着型だからめくじら立てなくてもってのは通じないよ
ただの雑談だったらいいんだけどねー
質問者がいるんだから雑談やめろとかアホだろ 質問に対する回答以外全部荒らしってどういう事だよ それに回答者がアンカつければいいだけじゃん 謝辞どころか〆宣言すらない質問者がどれだけいることやら
ずっとこのスレを荒らしてる奴がいるんだが 頭大丈夫?
静的型のほうがさ宇ぐれてる云々言う粘着してる奴は確かにいるけど それ以外のささいな会話も荒らし認定ってどういうことよ
雑談に似せた荒らしを行うから荒らし認定されるんじゃない? 荒らし行為やスレの妨害じゃないなら誰も文句なんて言わないよ そもそも、この期に及んで質問なんてめったに無いとかレスつけたり、 何ヶ月も荒らされてる事を無かった事にする奴って荒らし本人じゃないのか?
>>837 今日の書き込みだけでもおかしなコメがいくつもあるから
やはり荒らしが自演してるんだろうね
こうやって工作して荒らせる環境を作るのが目的だと思う
rubyのメソッドチェーンがよくわからない あとフックかけられるポイントも メソッド呼び終わった直後にフック掛ける方法ってある?
>>839 トレースポイントというものがある
https://docs.ruby-lang.org/ja/latest/class/TracePoint.html TracePoint.trace(:return, :c_return) do |tp|
p tp.return_value
end
"A".downcase.upcase.upcase!
# => "a" => "A" => nil
追記 全てのあらゆるメソッドに介入するため、 if tp.path == __FILE__ したり、 if tp.method_id == :method_name したりして範囲を絞ると見やすくなる 他には自家製クラス・モジュールであればprepend使って面白おかしくすることも可能
コードゴルフで1000までの素数を標準出力に出力ってのをやってるけど 60文字が限界だ。誰か画期的なの教えてくれ。
過去スレには結構そういうのが載ってると思うけど参考にしてみたら? 今現在はあんまり流行っていない、 というかコードをスレに書かないと誰も乗ってこないと思う あと、変わったお題ならプチ盛り上ると思う
50B a=[*2..1e3] p a.each{|e|a.reject!{|v|v!=e&&v%e<1}}
47B 切りがないのでこれで終わりにする p (a=*2..1e3).each{|e|a.reject!{|v|v>e&&v%e<1}}
45B これでほんとにラスト p (a=*2..1e3).each{|e|a-=(2..31).map{|v|v*e}}
おお流石さらっと回答が。ありがとうございます。俺のぼろ臭いエラトステネスもどきとは一味違いますね。
ついでだがPrimeクラスを使ってもいいなら33B #!ruby -rprime p *Prime.each(1e3)
「Rubyのpublic/private/protectedはaccess controlとしては壊れている」と言われたが、その答えは「確かに。access controlとして作ってないからな」というものであった。
「privateはsendとかでアクセスできるし、サブクラスからも見える」だそうです。確かにそうだ。publicは壊れていないと思いますけど、他2つが(access control として)壊れていたら、そもそも指定できる必要はないとは言えそう。
sliceで負数を指定したときの挙動の解釈が合ってるか教えてくれ 例えばnに12345って文字列があったとして p n.slice(0,1) p n.slice(-1,0) ってやると1と5が出力される つまり、絶対値が正数の負数が文字列の後ろから順々に対応してるって解釈で合ってる?
>>859 あってる
StringだけじゃなくてArrayでも同じ
ちなみに二つの整数値を与えるのではなく範囲で終わりを示す方法もよく使われる
p "12345".slice(1..-1) # => "2345" # 二つのピリオド
p "12345".slice(1...-1) # => "234" # 三つのピリオド
p "12345".slice(1..-2) # => "234"
p "12345".slice(1, -1) # => nil # 二つの引数
sliceだけじゃなくて[]でも同様に使う事ができる
(-6..6).each{|i|p n[i]}と試せばすぐにわかることをなぜ人に聞くのか
というかp n.slice(-1,0)は""じゃないのか
>>860 サンクス
ついでに聞くけど
二つピリオドの方は範囲xが『1番目≦x≦-1番目』で
三つピリオドの方は範囲xが『1番目≦x<-1番目』って事でいいの?
>>863 その認識でいい
それと
>>862 の指摘は正しい
俺様うっかりしてた
イミュータブルの話していい? 記憶違いかもしれないけど、なんか将来のRubyでStringがイミュータブルになるって話だかを小耳にしたんだけど、どういうこと? 今のStringって書き換える操作に見えても実は別の生成したStringへ参照を換えているだけだで、 イミュータブルだと思ってたんだけど違うの?
>>866 <<したらインスタンスの中身が書き換わるよ
まあRailsがフォークしてMRIは事実上終了だろうから心配いらない
現実的に考えて、今のRuby界にPython3ショック並の非互換を乗り越える体力はない そもそも3がリリースされる日が本当に来るのかは怪しいけど、もし出てもRails系には完全スルーじゃないかな 静的型もメタプログラミング全開のRailsに役立つようなものにはならないだろうし
>>866 今はリテラル文字列のオブジェクトが別だけど
ruby3になったらおなじオブジェクトになるって事
今のrubyでもコマンドラインオプションやソースコードのマジックコメントで挙動を確認できる
$ ruby24 -e '5.times{ p "abcdefg".object_id }' 17208605440
17208605280
17208605200
17208605120
17208605020
$ ruby24 --enable frozen-string-literal -e '5.times{ p "abcdefg".object_id }'
17208605640
17208605640
17208605640
17208605640
17208605640
rubyの実装レベルの話だと内部で共有文字列オブジェクトがcopy on writeされるようになってるだけ
ruby3になると共有文字列オブジェクトが直接表に出てくるってことになるんだろうね
一番の違いは文字がイミュータブルになるってことだろ だからcopy on writeする必要もない writeできないんだからcopyも不要
>>869 また静的型かよ
それにRailsのコミッタがどんだけRubyコミッタとしても掛け持ちしているのを知らんのか
ruby3にショックを起こしそうな変更が大してなさそうな所がショックなのではないだろうか 文字列といえば、SHARABLE_MIDDLE_SUBSTRINGはruby3で標準になるのか誰か知らんか
>>874 今はArrayだけだもんね
ぜひとも標準にしてもらいたいけど
俺を含めて第三者のC extensionに不安があるからなあ
文字列のデータがヌル終端文字列とは限らないので、char*取る時はStringValueCStr()使うとか
たのしいruby読みとおしたけどあんまたのしくない
プログラミングが楽しいんであって 本で勉強するのが楽しいわけじゃないからな
関数型言語 Elixir からの影響 文字列が、immutable なら、安全で効率的
>>866 Rubyで文字列をfreezeしまくるのが流行ってて
なんでかって、最適化のため
>
http://d.hatena.ne.jp/ku-ma-me/20151004/p1 > 2 行目は 1 行目の 2 倍くらい速いです。
だもんで、freeze付けまくるっていう手動の最適化が蔓延していて
(二倍も速くなるならせざるを得ない)
なにかCとかアセンブラでシコシコ最適化していた90年代の香りがする
これもRubyが意味もなく遅すぎるのが原因で
主要言語と比べて30〜50倍ぐらい遅いので、3.0GHzの最新CPUで走らせても
実質60〜100MHzの激遅化石CPUで走らせていることになるので
まぁ90年代といわれれば、ちょうどそのあたりかもしれない
>
https://qiita.com/sue738/items/6c312672cecd9e0400a2 あの頃はちょっとの速度差がクリティカルで、何か懐かしいね
Rubyはコンピュータに出来ることはコンピュータにやらせる主義なので
プログラマに手動の最適化を強いるし、型チェックもプログラマにやらせる
何か矛盾したことを言っているように思えるが
言語開発者の視点に立って、全力で手抜きして言語処理系を作ることを考えると
別に間違ったことは言ってない
幽遊白書風に言うと、仙水の言う「俺達七人」に君らは入ってないってことだな
早くしたいなら言語変えろよ JavaでもC#でもGoでもさ
腕振り回すのが早いからって、野球選手にはなれないんだけどね。
速度が必要なら他の言語を使え、と言いつつも 巷ではfreeze祭り開催中 (事実それが理由で3.0で検討されてるわけで) やはりちょっとでも早くしたいというね 遅いといっても限度があるんだろうな 1.2倍とか1.5倍とかなら我慢できるが 30〜50倍は別次元というか、もはや別物 折角3.0GHzの最新CPUを使ってるのに 100MHz以下になるとはねトホホ プログラムは遅くて困ることは有っても速くて困ることはないわけだが 遅くなった原因が、今となっては何のメリットもない動的型を採用したことと コンパイラの最適化の手抜き、だからな ちっとも利用者視点じゃなく、単に言語を作る側の手間の都合なわけだが 教祖様よろしく巧みに隠して言いくるめてきたが、もうウソがばれて限界ってところかな
>腕振り回すのが早いからって、野球選手にはなれないんだけどね。 さすがに意味不明すぎて吹いた 他の主要言語は、腕振り回しているだけだとも? 随分だな
今やC/C++、Java、C#などの主要言語はコンパイラの最適化が鬼だから 常識的には人間がアセンブラで書くより速いわけ だから書くなら じゃぁC/C++、Java、C#使っておけば? だし、言われるまでもなく世の中そうなってて んーだから何?って感じなんだが なんというか・・・ 速度が速い代わりに使い勝手が悪い、だの 使い勝手が良い代わりに速度が遅い、だの そういう厨が好みそうなマンガの設定みたいなトレードオフは発生してない 非常だわなぁ では全てにおいてメリットが無い方式なら いったい誰が作って、誰が支持するのかというと これがなかなか北朝鮮のような国があったりもするので 存在していることだけを理由に正しいとは言えない
>>889 アホか?
C++がマジで使いやすくて速いとか思ってるなら、一回脳みそ洗濯機にかけた方がいいぞ?
C++は速さのために色々と犠牲にした言語だということを理解できないならエンジニアとして
致命的欠陥があると言わざるをえない
Javaや.NETは起動時にコンパイルしてるから 実行速度ではなく起動速度が遅い そしてRailsも起動が遅い。こっちは理由が少し 異なっていて動的型だからコンパイルが不要なんだが 読み込むファイルが多くなりすぎて起動速度が遅い
いくら早くたってC++は複雑で読み書きしにくい Rubyは実行速度より開発速度に振ってるから
>>892 というほどでもないんだよなあ。
とくにC#あたりと比べると。
>>890 C++11以降はRubyよりはるかに使いやすい。
スタートアップにはRailsが好まれるというのも眉唾だよな ソースの量なんて最初のうちはすぐに増えるもんだし、事業が軌道に乗るまでは大きな変更も多いはず とりあえず今手っ取り早く動くものを作りたいからという理由でRailsを選ぶような奴がテストなんか書いてるわけないし、 テストがないと変更が困難になるという動的型の性質がネックになるのは意外とすぐなんじゃないかという気がする
C#は「とても」書きやすいかといわれるとふんぬうううううって感じだ 書きやすいようにするモダンな構造はたくさん含まれてて文法未来も明るいが、全体としてはRubyのほうがまだいいと思う 今のところRubyよりいいなと思ってるのはKotlin+IntelliJ Javaで書かなければいけない部分がもっと減れば書きやす四天王に入ると思うのでどんどんKotlin部分増やして欲しい
>書きやす四天王 面白そうだからみんなで書いてみれば? オレの場合書きやすいのはRuby一強で 二位以下はPythonとかLLが団子状態で並ぶけど
いや、洗脳されてる(というより確信犯←本来の意味でも誤用の意味でも)人の意見は 誰も興味ないというか常に無視されるというか 社民党が何か言っててもみんな聞き流してるわけで 大人な人達の言うところの民主主義というか そもそも数に入ってないから無視してよいという暗黙の鬼畜現象
>>899 自分の意見のことですね
よくわかります
同じ事させるなら、「実行速度」がRubyより早い言語が有るのは当たり前。 Rubyは例えばCで書いた巨大ライブラリ・ツールとも言える訳だから。
話を変えるけど、 mswin32版のRuby2.4インスコして、今は懐かしきRDEで何か出来ないかハックしてんだけど普通に動くなコレ 動かない部分は、debug2から経由してrde.dllかrde.soを呼ぶデバッグ機能の辺りで、 バイナリについてきたこれらのファイルをロードできないのが原因だけど、 RDE1.1.1バイナリや1.0.1ソース拾えたんで何とかなりそう
RDEはすごく使いやすかったな 1.9や2.x以降も対応してくれるなら今でも使いたい 文字列コード関係とか問題ないの?
>>904 特に問題ない
というかRubyの多言語化はCSI方式と呼ばれるもので、
ruby内部では種々の文字コードを認識せずバイナリとして扱い、指定した文字コード用のメソッドでバイナリに処理してるだけだから
マジックコメントでUTF-8指定して(2.x以降はデフォルトがUTF-8だから指定しなくても良い)、RDEもUTF8N指定しとけばOK
後、RDEについてるrde_export.rbみてたらちょっとした書き換えで2.4用の入力補完データを自動で出せるようになってる
RDEハック中だから、他にも聞きたいことあったら言ってくれ
問題は2.4用のrde.dllが無いことだからmswin32ruby1.8用のrde.dllをバイナリ改造して msvcrt-ruby18.dllのロードをmsvcr100-ruby240.dllに書き換えて、 メソッドあわせれば楽に出来るんじゃないかと思いついたんだけど躓いた msvcr100-ruby240.dllをPEviewで確認したらrb_str_new2が無いじゃないか こういった内部に詳しい人、誰かいない?
日経Linux 11月号 Windows Subsystem for Linux (WSL) 特集。 ついに、ベータ版から正式版へ変わりました! Docker の記事もある Ubuntu 側では、Dockerデーモンが動かないため、 Windows 側の、VirtualBox に、Vagrant で、CoreOS を入れて、 その中に、Dockerデーモンをインストール Ubuntu側から、Dockerコマンドで使う 付録は、サーバーがゼロから分かる本、100ページ。 サーバーでできること、77 付録DVD は、 Ubuntu 17.04 日本語 Remix (64 ビット版) Ubuntu Server 17.04 (64 & 32 ビット版) CentOS 7.3 LiveGNOME (64 ビット版)
>>906 外部シンボルの有無だけじゃなくstruct RStringとかRArray、RStructなんかは
要素数が少ない時にRObject内へと埋め込むようになってるし、
文字列オブジェクトとかは文字のエンコーディング情報を
抱えるようになってるしでまず無理
ソースコードを対応するrubyに合わせたパッチで当てて再ビルドした方がまだ近道だろうな
マジで? ruby2.4(maswin32)いれたRDEのデバッグオプションを"-r debug2"から"-r debug"に書き換えると変数ウィンドウもデバッグも普通に問題なくうごくけど、 変数ウィンドウのオブジェクト表示タブで、一部オブジェクトの型が表示されず"(1)"表記されるのはそれが理由か それと、rde.dlやrde.soをいれなくても、出来るってことは変数ウィンドウ辺りはRDE本体の機能かな? これら機能が"debug"や"debug2"にどこまで依存してるのかいまいち分らない ぱっとみrde.dlやrde.soだけruby2.4(mswin32)に対応したのをコンパイルすれば解決かと思ってたけど、 とりあえず、 SourceForgeやOSDNから拾ってこれるrde 0.9.9.0のソース(1.0.1はソースじゃなくバイナリだった、ごめん。一番新しいソースは0.9.9.0になる)をもう少し見てみるよ 現時点でもデバッグオプションを"-r debug2"から"-r debug"に書き換えればまともに動くんだからそれほど不都合は無いんだけど
RDE自体書き換えて再ビルドすりゃいいじゃん ソース何で作ってあんのよ ……Delphiか… すばらしい言語とすばらしい仕様とすばらしくない会社に翻弄された不遇の子か… ほかのIDEのアドオンとかに注力したほうがいい…?
RDEもどきはGUI周りはGTKとかQtを使うにしても 基本的にRubyだけで再実装できないものなのかな?
観念してVSCodeを使おう TypeScript製なのでRubyistにとっては敵のケツを舐めることになる屈辱的なエディタだけど、他のを使う理由が見つからないレベルの出来
RDEってさして知らないんだけどemacsじゃあかんの?
irbでコードを直接打ち込むとちゃんと動作するんだけどそれと全く同じコードをメソッドとして定義してそれを実行するとできないのなんでよ
>>918 def binsort(a)
bin = []
(a.max+1).times do |i|
bin.push(a.count(i))
end
a = []
bin.length.times do |k|
bin[k].times do
a.push(k)
end
end
end
aは整数値の配列
この中身をirbで直接実行するとちゃんとソートしてくれるんだけどbinsort(a)で実行すると何もしてくれないのよ
irbでもソートされないんだけど? ちゃんと戻り値使いましょうね def binsort(a) bin = [] (a.max+1).times do |i| bin.push(a.count(i)) end ary = [] bin.length.times do |k| bin[k].times do ary.push(k) end end ary # ←これ end
うちのirbだとさっきのでちゃんとソートされたんだが
殆どのバージョンで試したけどそのようにはなりませんでした 君の実行環境を書いてください
a=Array.new(100) do rand(5) end とかでaを決めてさっきのコードをirbで実行 それでもう一度aを表示するとソートされた配列が表示されるけど、binsort(a)でやってaを表示するとaそのものは変わってないって状況 だったんだけど a=[] のとこを a.slice!(0..-1) にしてやったらa自体を変えられた
日本語として何が言いたいのかさっぱりわからん 同じアルゴリズムなら俺ならこう書く def binsort(a) (0..a.max).inject([]){|s, i| s + [i]*a.count(i)} end
これは多分あれだな 実引数aを表示してると思ってるけど実は仮引数aを表示しているパターン
Ruby書くのにVSCode使ってるわ Ruby陣営にとっては多少アウェイなのかもしれんが 使いやすければどうでもいい
>>916 Emacsでいいよね
MatzもEmacsだし、ある意味公式w
現在のプログラマーにとって 統合開発環境使わないのであれば VSCodeは王道だろう。 秀丸とか使っているならアウェイだろうけど
VSCodeは使用する言語のためにゴリゴリに整えられたemacs的な環境がクソ簡単に作れるのが強いよね エディタの設定にアホみたいに手間かけてドヤ顔してた奴等がただの老害になってしまった さすがに30年近く開発環境作ってるだけのことはあるわ
現在のつづりの途中からファイル内全検索で補完候補を表示したり、クラスやモジュールのメソッドや定数まで定義したもの全て(もちろん、自分で定義したものも含む)から関連した補完候補を表示してくれたり、 ファイルジャンプやエラー時の該当コードへのジャンプジャンプ機能、 変数ウィンドウでリアルタイムにグローバル、ローカル等表示機能、 デバッグ時のブレークポイント・ステップイン・ステップアウトといった基本から、シームレスにコンソール入力できCLIでデバッグしたりと、 RDEを使えるならずっと使い続けたい 逆にRDEで欠けているところって何かある?
>>931 Emacsは自由度は高いんだろうけど
設定にムチャクチャ時間かかるからな
VSCodeはデフォルトで使えるから楽
>>932 どれだけ高度な機能があろうが所詮Rubyでしか使えないだろ
Rubyがメインの開発でも開発作業というのはRubyだけで完結するものではない
VSCodeはシェルスクリプトもHTMLもCSSもJSもXMLもJSONもYAMLも他の言語も何でもそこそこ便利に扱える
>>934 RDEもRuby以外の言語、例えばJSやHTMLとかなんでも出来るよ
指先一つで切り替えられるし
>>935 他の言語のデバッグできるの?
他の言語でコード補完効くの?
>>636 HTMLでデバッグってどういう事?
強調表示と文章構造化機能があり、
Rubyから扱うならRDEの変数ウィンドウだってあるんだから、見ながらできるでしょ
RDEにはコンソールウィンドウだってあるんだから、どんなやり方だって可能だよ
>>933 今は設定もLispはほとんど書かなくてもいいし、パッケージマネージャもあるし、設定は簡単だよ
英語というハードルはあるけど
>>938 絶対的にEmacsは昔より易しくなってるんだろうけど
相対的にVSCodeの方が易しいからそっち使ってる
VSCode使ってるようなチームが今時開発のコミュニケーションにメールはないでしょ githubのプルリクを扱ったりSlackの送受信したりするプラグインはもちろんあるよ
>>939 機能の豊富さやモダンな設計部分は確かに惹かれる点がないわけではない
ただ、VSCodeには絶対移れない理由は、カーソル移動すらホームポジションから指を
離さないといけない部分だ(Mac版はいいんだが)
もちろん「そんなのカスタマイズでどうにでもなるよ」という意見は承知しているが、すべての機能を
再配置するには無理があるし、拡張機能まで考えるとキーバインドはなるべくデフォルトでいきたい
そうなるとカーソル移動にカーソルキー以外のキーが割当たってないのは大いなる不満だな
ちなみにこれは実際にVSCodeを使ってみた感想だ
Emacs風キーバインドとかも試してはみたが、不完全だし、拡張機能を入れると簡単に破綻した
慣れているものがあるのにわざわざ移る必要はないよ、 便利な機能は追加されているけど それの習熟までの時間考えるとマイナスじゃん
>>943 Emacsキーバインドは根本的に間違ったキーバインドなんだよ
vimキーバインドも同様。
つまり間違ったキーバインドを使うから破綻する
>>942 開発が長期間止まってるけど
使えなくはないんじゃないの?
>>945 それならばVSCodeが正しいキーバインドを提供すればいいだけなのに、それはされなかった
Mac版VSCodeに至ってはカーソル移動はEmacsと同じだ
(というかMacのカーソル移動は基本Emacsと同じなんだが)
MacがEmacsと同じ?どうやってコピペするんだよw
Macは通常のショートカットキーはCtrlではなくコマンドキーという別のキーを使うんだよ
>>949 そいでEmacsと同じ方法でコピペしたいんだが
Macで出来ない点についてはどうするんだ?
>>941 できないのか
ユーザとやり取りしない下っ端は楽でいいな
多分だけど、客とのメールまでプログラミングエディタでやりたがる基地外は世の中にあまりいないだけじゃないかな Emacs老害の全盛期と違って、今の開発者はさすがにエディタの他にブラウザだけは常に開いてるもんだし
今時だと連絡手段が社内SNSだったりチャットだったりビデオ通話だったりと多様化してどうせブラウザや他のアプリも触らざるを得ないんだから メールだけをテキストエディタ内でやることにあまり意味を感じない人が増えたんだろうな 個人的には開発エディタに客のメールが届くのは精神衛生上も嫌だが
メールというモデルが現代には合わなくなってきただけなんだけどね。
それは全くの嘘である 嘘を言うのを止めたまえ 嘘つき君
>>947 githubのプルリクを扱ったりSlackの送受信したりするプラグインはもちろんあるよ
>>955 多分だけど、客とのメールまでプログラミングエディタでやりたがる基地外は世の中にあまりいないだけじゃないかな
自分の都合で世の中とは変わるんだなマに向いてない
注意、 荒らしが自演でスレを荒らそうとしているので以下スルーしてください 今後この話題を続ける人は荒らしである事がほぼ間違いないので、 規制等に巻き込まれないようご注意下さい
まずパッと読んで、
「基地外」というあおりを受けて本当に基地外が反応した!
と感じたであろう
普通に読めば支離滅裂で、意味が分からない
他人が書いた難解なコードとかに出会うことがあって
解読しようと思うんだがなかなか理解できなくて
そもそもこのコードはバグっているんじゃないか?
と思うことがある
まずアンカーミスをしているんじゃないかと疑う
>>947 ではなくて
>>941 の可能性が高い
その上、引用する文章を間違えているんじゃないかと疑う
二行目を引用しているが、一行目を引用したかった可能性が高い
単にミスったのか、それとも支離滅裂なアレな人なのか
どちらでも同じことだが
>>960 よりはマシである
自演を繰り返す荒らしのマッチポンプですので、みなさんスルーをお願いします 今後この話題を続ける人は荒らしであることがほぼ間違いありません 巻き込まれないように、ご注意下さい
やべ gem書いてんだけどプルリク第一号が来てたのわからずにひと月放置しちまった 催促とかは来てないけど幻滅されてそう
荒れそうな話題だから今は止めとけ それよりスレ立てのテンプレ、アレでいいのか? 書籍と開発環境と、後何必要?
>>965 素敵、抱いて!
ところで
https://www.ruby-lang.org/ja/ へのリンクって
このスレのテンプラにも入っていなかったんだな
ちょっと気になった
emacsジジイは自慢のメール機能でメーリングリストに何か投稿してやれや
チェリー本の発想が29日だってよ・・・ 品薄なのか人気なのかよくわからんが なぜ後も遅れる・・・(本日発売日)
_, -―- 、 _ ,r’ ` , _.l /⌒ヽ /⌒ヽ ! ( l ‘,.− 、! !,.−、’ l’`) >.}⊂・⊃ ⊂・⊃ {く .(_{ ≡ _ `^´_ ≡,}_) ヽ_’´ `”´ `’ _ノ さだめじゃ ,<`8~「 ̄「~8´>、 / |. 8 ヽ./ 8 | ヽ 〈 |=Po.o.9=| 〉 `ーL…____..」ー'” ├‐rー?ーr‐┤ し’ ゝJ
話を変えるけど、 過去スレをさかのぼってみたら、テンプレがかなり充実してた 初心者スレと統合する前の本スレへのリンクとか色々張ってあったけど、 今のテンプレのほうが面倒くさくなくて俺は好きだな
そいやemacsの2chブラウザってもう使えないのか
せっかく久しぶりの入門書発売でも全く盛り上がらんな
>>975 Rails時代が異常だったんだよ
島国の一部のヲタが愛好する言語に戻っただけ
>>975 Railsブームの頃にRuby始めた奴が
もう入門書レベルを卒業しちゃったからじゃね
へたくそな自演だな
いつもの荒らしか
975デフォルトの名無しさん2017/11/25(土) 20:46:19.88ID:IhD+SBpG
>>976 >>977
せっかく久しぶりの入門書発売でも全く盛り上がらんな
976デフォルトの名無しさん2017/11/25(土) 20:49:19.60ID:oOkyLeSs
>>975 Rails時代が異常だったんだよ
島国の一部のヲタが愛好する言語に戻っただけ
977デフォルトの名無しさん2017/11/25(土) 20:51:46.96ID:X7an3KDk
>>975 Railsブームの頃にRuby始めた奴が
もう入門書レベルを卒業しちゃったからじゃね
どの本も値段が高すぎる。せめて電子書籍は半額以下でいいだろと思う packtなんか年100ドルで読み放題やってたりするのに
じゃあそのpacktにある本を読んでいれば良いのでは?
初心者向けrub本も良いけど、 rubyからOpenglでシェーダーを扱う書籍とか、 rubyで分散コンピューティングの書籍とか、 こう、興味を惹かれる内容の、中級者上級者向け書籍も必要だよ
相葉 (‘◇‘) 松本 ノノ`∀´ル 二宮 ヽ.゚ー゚ノ 櫻井 (`・3・´) 大野 (´・∀・`)
>>へたくそな自演だな とかコピペ張るやつの方も注意したら? 貴ノ花ばかり責めるマスゴミみたいなやつだな
荒らしは放置で! 荒らしと会話するな。 荒らしが喜ぶだけ。ずっと荒らしが居続けるだけ
IDを変えられても中身がバカのままみたいなので、 自演できてない事に気がついていなさそう
>975デフォルトの名無しさん2017/11/25(土) 20:46 >976デフォルトの名無しさん2017/11/25(土) 20:49 >977デフォルトの名無しさん2017/11/25(土) 20:51 ヒントは書き込み時間
>>989 IDを変えて自演して荒らそうとする奴がこのスレにいる、
なんて事前情報があるのにこれでバレないと思う方がおかしいよな?
ここまでのレスでもエディタの話を蒸し返そうとしたり、
ばればれの擁護したり、
なんで荒らしは自分から自演してます宣言を出してんだろ
これで
>>795 が、馬鹿らしくなってこのスレに来なくなれば
Win-Winだね
間違った、
>>975 だったわ
これで
>>975 はやる気が無くなって今後書き込まなくなるかもしれないし
Win-Win
まだ理解してないのか ここまでくると本人の頭の責任じゃなくて親の教育の責任だな
このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 93日 2時間 31分 16秒
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/ ▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
read.cgi ver 07.7.23 2024/12/25 Walang Kapalit ★ | Donguri System Team 5ちゃんねる
lud20250214205949caこのスレへの固定リンク: http://5chb.net/r/tech/1503644351/ ヒント: 5chスレのurlに http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。TOPへ TOPへ
全掲示板一覧 この掲示板へ 人気スレ |
Youtube 動画
>50
>100
>200
>300
>500
>1000枚
新着画像 ↓「Ruby 初心者スレッド Part 61 [無断転載禁止]©2ch.net YouTube動画>1本 ->画像>1枚 」 を見た人も見ています:・MacOSX86初心者スレッド Part6 ・youtube初心者スレ収益化 跳躍編part20 ・youtube初心者スレ収益化 跳躍編part14 ・youtube初心者スレ収益化 跳躍編part15 ・人狼ジャッジメント初心者スレ part1 ・Cubaseシリーズ 初心者質問スレ Part21 ・Hackintosh初心者スレッド ・Blender 初心者質問スレッド Part48 ・【投資一般板】 初心者質問スレッド Part62 ・FX初心者スレ Part98 ・FX初心者スレ Part96 ・FX初心者スレ Part113 ・FX初心者スレ Part105 ・FX初心者スレ Part109 ・FX初心者スレ Part129 ・FX初心者スレ Part104 ・人狼ジャッジメント初心者スレ part2 ・【バトロワ】APEX LEGENDS初心者スレ Part41 ・【LoL】League of Legends 初心者スレ Part285 ・【LoL】League of Legends 初心者スレ Part327 ・【ドラガリ】ドラガリアロスト 初心者スレ part 4 【リセマラ相談】 ・宝塚初心者質問スレッド〜Part71 ・宝塚初心者質問スレッド〜Part78 ・★模型塗装初心者スレッド84 ガンプラからスケールまで★ ・★模型塗装初心者スレッド84 ガンプラからスケールまで★ ・GTA総合 初心者質問スレッドPart30 ・◆◆園芸初心者質問スレッド PART68◆◆ ・League of Legends 初心者スレ Part217 ・【iOS/Android】消滅都市2初心者スレ part34 ・【LoL】League of Legends 初心者スレ Part258 ・【新馬】ウマ娘プリティーダービー初心者スレ Part85 ・【新馬】ウマ娘プリティーダービー初心者スレ Part99 ・【PS4/XB1/Switch】APEX LEGENDS エーペックスレジェンズ初心者スレPart91【転載禁止】 ・jubeat初心者スレ 32nd Tune ・【FF14】初心者の館 Part371 ・[PUBG] PLAYERUNKNOWN'S BATTLEGROUNDS初心者スレ10 ・★模型塗装初心者スレッド94ガンプラからスケールまで★ ・★模型塗装初心者スレッド86 ガンプラからスケールまで★ ・★模型塗装初心者スレッド76 ガンプラからスケールまで★ ・Elona初心者質問スレッド その120 ・ヤフオク初心者質問スレッド #829 ・ヤフオク初心者質問スレッド #830 ・ヤフオク初心者質問スレッド 811問目 ・ヤフオク初心者質問スレッド 822問目 ・ヤフオク初心者質問スレッド 815問目 ・【サブキャラ】自称初心者観察スレッド ・【DQ10】初心者大使を語るスレッド451 ・にゃんこ大戦争初心者中級者スレ☆311 ・にゃんこ大戦争初心者中級者スレ☆171 ・【FF14】初心者の館 Part319 ・【FF14】初心者の館 Part346 ・【FF14】初心者の館 Part325 ・【FF14】初心者の館 Part326 ・【FF14】初心者の館 Part380 ・【FF14】初心者の館 Part348 ・糖尿病初心者質問スレpart38 ・【FF14】初心者の館 Part349 ・【FF14】初心者の館 Part323 ・ロード初心者質問スレ part423 ・初心者イラスト練習日記part11 ・初心者が気軽に何でも撮影してUPするスレ part21 ・【初心者】ダイエット質問・相談スレPart224 ・【超ド】120切りを目指すスレpart17【初心者】 ・囲碁・初心者専用の質問スレッド 第34局 ・ヤクオフ初心者質問スレッド 565 ・サマナーズウォー: Sky Arena☆初心者スレ13
05:07:22 up 58 days, 5:10, 3 users, load average: 5.16, 5.83, 6.44
in 0.076533794403076 sec
@0.076533794403076@0b7 on 031218