-
コードリーディングアドベンチャー:素晴らしいプリントジェム
素晴らしいプリントは、出力をirbでフォーマットする素晴らしい宝石です。 &pry 読みやすくするため。 例… これは、awesome_printでハッシュを表示するものです。 次のようになります: しかし、これはどのように機能しますか? 「真実は、コードという1つの場所でしか見つけることができません。」 ―ロバートC.マーチン ソースコードを見て調べてみましょう! 素晴らしい印刷 プロジェクト構造(ファイルとフォルダー)の概要を簡単に説明してコード読み取りセッションを開始した後、質問をして、今後の調査に集中するのが好きです。 最初に思いついた質問はです : aw
-
より良いコードを書くのに役立つ7つのあまり知られていないRubyメソッド
適切なRubyメソッドを使用すると、多くの作業を節約できることをご存知ですか? 使い慣れたメソッドが多ければ多いほど、動作するコードをより速く作成できます &このコードは、パフォーマンスと品質の両方で優れています。 そのため、本日は、これまでに見たことのない7つの興味深い方法を紹介したいと思います。 コンテンツ 1 Integer#digitsメソッド(Ruby 2.4) 2タップ方式 3 Array#values_at 4 Hash#transform_values(Ruby 2.4) 5 Kernel#itself(Ruby 2.2) 6 Array#count 7
-
Array#zipメソッド
違いを見つけることができるように、2つの配列を要素ごとに比較したいとします。 または、すべてのインデックスで最大の数値を見つけたい場合や、キーのリストと値のリストをマージしてハッシュを作成したい場合もあります… …これを行うための「難しい方法」は、次のようになります。 例 : a = [1,2,3,4,5] b = [1,2,3,6,8] c = a.map.with_index { |_, idx| [a[idx], b[idx]] } # [[1, 1], [2, 2], [3, 3], [4, 6], [5, 8]] それで仕事は終わりますが、きれいではありませんよね?
-
Ruby転置法を使用して行を列に変換する
今日は、Ruby転置法を使用してRubyでグリッドを処理する方法を学習します。 多次元配列の形をした完璧なグリッド、たとえば3×3の正方形があると想像してみてください。 そして、行を取得して列に変換する 。 なぜあなたはそれをしたいのですか? 1つの用途は、古典的なゲームであるtic-tac-toeです。 ボードをグリッドとして保存します。次に、勝利の動きを見つけるには、行を確認する必要があります 、列 &対角線 。 問題は、グリッドを配列として格納している場合、行に直接アクセスすることしかできないことです。 コラムズザハードウェイ 「直接アクセス」とは、配列を(eachで)調べ
-
Ruby2.5でのパフォーマンスの向上
新しいRubyバージョンは改善を続けており、Ruby2.5も例外ではありません。 ルビー2.5 これらの最適化を紹介します: 大きな文字列を作成すると、文字列の補間が約72%高速になります 引数を1つだけ指定すると、String#prependが約42%高速になります Enumerable#sort_by、Enumerable#min_by、およびEnumerable#max_byは約50%高速になります いくつかのベンチマークを見てみましょう! 文字列補間のパフォーマンス この最適化のコミットメッセージのサンプルコードを使用しました: require benchmark/ips
-
RubyとSinatraを使用して独自のリンク短縮アプリを構築する
Rubyスキルに取り組み、実践するための小さなプロジェクトを探しているなら、あなたは正しい場所にいます。 今日はあなたと一緒に「リンク短縮」アプリケーションを作りたいと思います。 リンク短縮サービスとは何ですか? きっと前に見たことがあると思います… これらの「短いリンク」は次のようなものです: https://t.co/eKBRm2tTUF このURLにアクセスすると、元のURLにリダイレクトされます。 しかし、それはどのように機能しますか? アイデアは、このコードeKBRm2tTUFをマップすることです。 この例では、データベースの元のURLに移動します。 これは単純
-
Atomエディター:Ruby開発者のためのトリック、プラグイン、ショートカット!
Ruby開発にAtomを使用している場合は、プラグイン(packages)があることをおそらくご存知でしょう。 in Atom)これにより、エディターの生産性を向上させることができます。 しかし、Atomのパッケージリポジトリには何千ものパッケージがあります! どれを使用する必要がありますか? それに加えて、より速く作業するために使用できる便利なキーボードショートカットは何ですか? Atomユーザーの場合は、この記事を気に入るはずです。これがまさにここで取り上げていることだからです! ベストアトムパッケージ Atomパッケージは、エディターに新しい機能を追加します。エディターのイン
-
Rubyでプレフィックスツリーを実装して使用する方法を学ぶ
プレフィックスツリー(トライとも呼ばれます)は、単語リストを整理し、特定のプレフィックスで始まる単語をすばやく見つけるのに役立つデータ構造です。 たとえば、「cat」や「cape」など、「ca」で始まるすべての単語を辞書で見つけることができます。 この写真を見てください: これはプレフィックスツリーです。 ルートからフォローできます( * )マークされたノード( e など) およびt )単語を見つける。 この記事では、Rubyで独自のプレフィックスツリーを実装する方法と、それを使用して問題を解決する方法を学習します。 プレフィックスツリーの実装 これをRubyに実装するため
-
Rubyはあなたからエラーを隠しています!
Rubyは意図的にいくつかのエラーと例外をあなたから隠します。 これが役立つ場合もあります。 Kernel#loopを使用するときのように ブロックを使用するメソッド、 loop StopIterationが停止すると停止します 例外が発生します。 ただし、これによってデバッグセッションが非常に難しくなる場合もあります。 いくつかの例を見てみましょう! 非表示の例外:同等のモジュール+メソッド 最初の例には、 Compareableが含まれます モジュールと メソッド。 ここに例があります : class MyObject attr_accessor :value
-
ニルについて知っておくべきことすべて
なし… 本当に何ですか? ええと、nil 「空」または「デフォルト」値を表すために使用される特別なRubyオブジェクトです。これは「偽の」値でもあり、falseのように動作することを意味します 条件文で使用する場合。 今 : nilは1つだけです object_idを持つオブジェクト 4の (または8 64ビットRubyの場合)、これがnilの理由の一部です。 特別です。 nil.object_id # 4 もっと詳しく見てみましょう! ゼロ値はどこから来るのですか? 多くのメソッドはnilを返すことができます 結果として。 これは、値を要求したが、その値が利用できない場合に
-
Ruby文字列メソッド(究極のガイド)
文字列は文字のシーケンスです。 文字列はオブジェクトであるため、文字列を使用して処理を行うために使用できるメソッドが多数あります。 この記事では、最も便利なRuby文字列メソッドについて説明します。 例を挙げて! コンテンツ 1文字列の長さを取得する方法 2文字列が空かどうかを確認する方法 3文字列補間とは何ですか? 4部分文字列を抽出する方法 5文字列に別の文字列が含まれているかどうかを確認する方法 6Ruby文字列をパディングする方法 7大文字と小文字を区別しない文字列の比較 8文字列をトリミングして空白を削除する方法 9弦のプレフィックスとサフィックス 10文字列を文字の配列に
-
Rubyでの関数型プログラミング(完全ガイド)
関数型プログラミングについて聞いたばかりで、いくつか質問があるかもしれません。 いいね… 関数型プログラミングとは正確には何ですか? オブジェクト指向プログラミングと比較してどうですか? Rubyで関数型プログラミングを使用する必要がありますか? これらの質問に答えて、これがどのように機能するかをよりよく理解できるようにします。 関数型プログラミングとは これは単なる流行や派手な言葉ではなく、長い間存在していた実際のプログラミングパラダイムですが、最近人気を取り戻しています。 そして、このパラダイムの背後にある基本的な考え方は、あなたが思っているよりも理解しやすいです。 関数型
-
Rubyシンボルとは何ですか?どのように機能しますか?
記号は次のようになります: :testing シンボルと変数を混同する人もいますが、変数とは何の関係もありません… …記号は文字列によく似ています 。 では、Rubyの記号と文字列の違いは何ですか? 文字列は、データを操作するために使用されます 。 記号は識別子です 。 それが主な違いです: 記号は単なる文字列ではなく、目的も異なります。 記号を使用する場合 シンボルの最も一般的な使用法の1つは、メソッドとインスタンスの変数名を表すことです。 。 例 : attr_reader :title :title attr_readerの後は、@titleを表す記号です。
-
Ruby C拡張機能の書き方(ステップバイステップ)
C拡張機能を作成すると、CからRubyを操作できます。 Cの速度で最適化したい特定の重要な方法がある場合、またはCライブラリとRubyの間にインターフェイスを作成したい場合は、これが必要になることがあります。 別の方法は、FFIモジュールを使用することです。 今 : C拡張機能の書き方を見つけましょう! 最初のC拡張機能 extconf.rbという名前のファイルを作成します これらの内容で: require mkmf create_header create_makefile foobar 次に、ruby extconf.rbを実行します これにより、いくつかのファイルが作成
-
Ruby開発者のための時間計算量への決定的なガイド
時間計算量は、コンピュータサイエンスから学ぶことができる最も興味深い概念のひとつであり、それを理解するのに学位は必要ありません! 特定のアルゴリズムやプログラムが遅い理由を確認するのに役立つので興味深いです &それをより速くするためにあなたは何ができますか。 これを独自のコードに適用できます。 これはすべての派手なアルゴリズムを超えて これは、この記事の後半で説明するように、コンピュータサイエンスの本にあります。 しかし、最初に、何が遅いのか、何が速いのかについて話す必要があります。 遅いvs速い 150ミリ秒(ミリ秒)で100万個の数値を並べ替えるのは遅いですか、それとも速いですか
-
TCmallocを使用したRubyのメモリ割り当てのプロファイリング
Rubyではメモリ割り当てはどのように機能しますか? Rubyはページと呼ばれるチャンクでメモリを取得し、新しいオブジェクトはここに保存されます。 次に… これらのページがいっぱいになると、より多くのメモリが必要になります。 Rubyは、mallocを使用してオペレーティングシステムからより多くのメモリを要求します 機能。 このmalloc 関数はオペレーティングシステム自体の一部ですが、使用できる代替の実装があります。 それらの実装の1つは、Googleのtcmallocです。 TCmallocはGoogleパフォーマンスツールスイートの一部です。 これらのツールを使用し
-
Rubyでメモリリークを作成する方法
メモリリークを見つける方法についての記事がいくつかあります。 しかし、作成するのはどうですか? Rubyでのメモリリークがどのように見えるかを知っているので、これは興味深い演習になると思います。 いくつかの例を見てみましょう。 単純なリーク 配列に新しいオブジェクトを追加するだけで、メモリリークが発生する可能性があります。 このように : a = [] b = {} loop { sleep(1) 10_000.times { a << abc } puts GC.stat(b)[:heap_live_slots] } これにより、毎秒10kの文字列が作成され
-
Rubyのデコレータデザインパターン
デコレータのデザインパターンは何ですか? そして、Rubyプロジェクトでこのパターンをどのように使用できますか? デコレータデザインパターンは、新機能を追加することでオブジェクトを強化するのに役立ちます クラスを変更せずにそれに。 例を見てみましょう! ロギングとパフォーマンス この例では、rest-clientのようなgemを使用してHTTPリクエストを作成しています。 次のようになります: require restclient data = RestClient.get(www.rubyguides.com) 今 : 一部のリクエストにログを追加したいが、RestCli
-
Rubyでストラテジーデザインパターンを使用する方法
戦略デザインパターンについて話しましょう! このデザインパターンは、メソッド内のメインアルゴリズムを変更するのに役立ちます。 これを行うには、このアルゴリズムをクラスにハードコーディングするのではなく、このアルゴリズムを実装するクラスを渡します。 そして私がアルゴリズムと言うとき 私は派手なコンピュータサイエンスアルゴリズムを意味するのではなく、結果を得るための一連の手順に従うコードを意味します。 戦略パターンを使用する場合 このパターンは正確にどのような問題を解決していますか? 開放/閉鎖原則の問題。 この原則は次のように述べています: 「ソフトウェアエンティティ(クラス、モ
-
基本的なOOP原則を使用してRubyコードを劇的に改善する方法
最も重要なオブジェクト指向の原則の2つは、凝集度と結合度です。 結束 クラス内のすべてのメソッド間の関係についてです。それらは同じインスタンス変数とパラメータのセットを使用しており、すべてが同じ目標に向かって協力しています ?それとも、すべての方法が互いに分離していると感じますか? カップリング クラスが他のクラスにどの程度依存しているか、システムの他の部分にどの程度「結びついている」か、そしてこのクラスを単独で使用できるかどうかです。 これらの概念は両方とも、特定のレンズのセットを通してコードベースのすべてのクラスを確認するのに役立ちます。これらのレンズは、クラスのデザインがどれ