タグ

Rubyとstyleに関するkiyo_hikoのブックマーク (14)

  • プログラミング初心者は変数名やメソッド名を略さない方がいいよ、という話 - give IT a try

    今回のエントリでは先日、僕が勤めているソニックガーデンで話題になったプログラミング関連の小ネタを書きます。 それは何かというと、「プログラミング初心者は変数名やメソッド名を略さない方がいい」という話です。 長い変数名やメソッド名はつい略したくなります。 実際、僕も長い名前を略すときはよくあります。 ですが、略称を使うのは長年の経験から「この略称は一般的だから誤解を招くことはきっと少ないだろう」とか「前後の文脈から、変数の中身は誰が見ても明らかだろう」という想像が付いた場合だけです。 一方、プログラミング初心者の人は経験が浅いため、「一般的かどうか」とか、「誤解が発生しないかどうか」といった判断ができません。 そのため、他の人が見たときに「え、何この変数名?」と思ってしまうような略称を付けてしまう恐れがあります。 たとえば、先日のコードレビューで、初心者の人がrev_noという名前の変数を定

    プログラミング初心者は変数名やメソッド名を略さない方がいいよ、という話 - give IT a try
    kiyo_hiko
    kiyo_hiko 2020/10/20
    reverse_nums派。あとスコープ短いと変数も短くする。例題が数行メソッドならns = [1,2,3,4,5]; sn = ns.reverse; sn.map(&:to_s).とし、メソッドのコメントを厚く書く。あと略称の暗黙知は信用しない。幾つかの英語サイトを見て決める
  • Rubyの文字列連結に「#+」ではなく式展開「#{}」を使うべき理由|TechRacho by BPS株式会社

    こんにちは、hachi8833です。 Slackでmorimorihogeさんが投げてくれたアドバイスのメモを残します。上のスクショはGitLabのmerge requestにmorimorihogeさんがコメントしたものです。 Rubyでの文字列連結メソッド#+と#{}は同じではない! Rubyの文字列連結メソッド#+と#{}は、通常それぞれ次のように使われます。 str2 = "おいしい" str1 = str2 + "店" #=> 「#+」は変数同士や変数と文字列リテラルを連結する str1 = "#{str2}店" #=> 「#{}」は" "の中で変数内の文字列を取り出す(式展開) #上のどちらも出力は「おいしい店」になる 後者の式展開(interpolation)は変数展開や文字列補間などと呼ばれることもあり、RubyPythonなどのモダンな言語で文字列内に変数の値を置くとき

    Rubyの文字列連結に「#+」ではなく式展開「#{}」を使うべき理由|TechRacho by BPS株式会社
    kiyo_hiko
    kiyo_hiko 2017/01/25
    +メソッドよりも式展開を積極的に使っていきたいわけ
  • ソースコードの減らし方 - 基本的な考え方と10個の方法 - クラウドワークス エンジニアブログ

    ステップ数で評価が決まる現場では全く役に立たないテクニックではありますが、ソースコードの減らし方について紹介したいと思います。 開発Div. エンジニアのayasudaです。 2014年の夏にジョインし、会社名と同じサービス、クラウドワークス の開発に携わっています。 ご覧の通り、消したソースコードの方が多いので、ステップ数換算だとマイナスの働きしかしてませんね! 記事では、特に Ruby on Rails の運用されているプロダクトコードにおける、ソースコードの減らし方について紹介していこうと思います。 基的な考え方 ソースコードを減らすときの大原則は「ボーイスカウト・ルール - プログラマが知るべき97のこと」です。 普段、ソースコードを触るときに、一つでも良いので簡単な改善を入れる。これを積み重ねるのが大事です。 一度に一気に直そうとするのはあまり良くありません。大抵の場合、デグ

    ソースコードの減らし方 - 基本的な考え方と10個の方法 - クラウドワークス エンジニアブログ
    kiyo_hiko
    kiyo_hiko 2016/03/11
    "おすすめなのは、「将来削除する旨を記したコメント」と、参照されたらログを吐いておくという手法です。"
  • LoveRubyNet Wiki: RubyCodingStyle

    2005-05-14 15:48:46 +0900 (1238d); rev 16 青木が使っている Ruby のコーディングスタイルです。 インデント インデントは 2。 インデントがでかすぎると end が離れて美しくない。 {....} のインデントだけを 4 にしてみた時期もあったが、 やっぱり全部 2 にしたほうが単純だし統一感がある。 またタブは一切信用せずに全部スペースにする。 ※ 有名な Ruby hacker の前田修吾氏はかつてインデントを「3」にしていた。 この理由について青木は if true while true unless false return 1 end end end のように end がピッタリそろうのが素敵かなあ、 と評したのだが、実際の理由は全然違ったようだ。 → [ruby-list:18603] ※※ 素敵という言葉は江戸時代にできたそうだ。

    kiyo_hiko
    kiyo_hiko 2016/02/09
    "ちなみに loop より while true が好きだ。 なんでかって言うと、たぶんスコープが変わらないからだな。" "alias はメソッド呼び出しではなくて構文である。 だからこそ引数の間にカンマがないのだ。"
  • Structクラスを継承してはいけない(戒め - Bye Bye Moore

    以前書いたStructで構造体なデータを扱う - Bye Bye Mooreという記事で class Point < Struct.new(:x, :y) def +(other_object) Point.new(x + other_object.x, y + other_object.y) end end とか書いていました。 が、公式リファレンスには 無名クラスのサブ クラスを作成する方法でカスタマイズする場合は無名クラスが使用されなくなっ てしまうことがあるためです。 との記述があり上記の方法は推奨されません。 どうしても拡張する必要がある場合 Point = Struct.new(:x,:y) do def +(other_object) Point.new(x + other_object.x, y + other_object.y) end end としてあげるのがよいです。

    Structクラスを継承してはいけない(戒め - Bye Bye Moore
    kiyo_hiko
    kiyo_hiko 2016/01/28
    Clazz < Struct.new(:attribute); def method() ... end; end ではなく Clazz = Struct.new(:attribute) do; def method() ... end; end な感じがいいという話
  • Rubyで定数を扱う場合はfreezeするべき - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Rubyで定数を扱う場合はfreezeするべき - Qiita
  • String#match (Ruby 3.3 リファレンスマニュアル)

    match(regexp, pos = 0) -> MatchData | nil[permalink][rdoc][edit] match(regexp, pos = 0) {|m| ... } -> object regexp.match(self, pos) と同じです。 regexp が文字列の場合は、正規表現にコンパイルします。詳しくは Regexp#match を参照してください。 例: regexp のみの場合 'hello'.match('(.)\1') # => #<MatchData "ll" 1:"l"> 'hello'.match('(.)\1')[0] # => "ll" 'hello'.match(/(.)\1/)[0] # => "ll" 'hello'.match('xx') # => nil 例: regexp, pos を指定した場合 'hoge hig

    kiyo_hiko
    kiyo_hiko 2015/12/24
    "if matched = receiver.match(/pattern/); var = matched[0]...; end" マッチするとMatchDataというクラスのインスタンスが入ってboolの文脈でtrueに評価される。しないとnil。MatchDataからは添字で複数の一致文字列を取り出す。
  • Ruby Method to Block (Lambda)

    In Ruby on Rails development, I have been known to use symbol to proc. Recently, I needed to re-use a method as a block. Here’s a contrived example of what I was doing: Group.all.sort {|a,b| a.name <=> b.name} However, I wanted to re-use this sort and ended-up refactoring it to: def group_sort(a, b) a.name <=> b.name end Group.all.sort {|a,b| group_sort(a, b)} Although this allowed me to re-use my

    Ruby Method to Block (Lambda)
    kiyo_hiko
    kiyo_hiko 2015/12/01
    "group_sort = lambda{|a,b| a.name <=> b.name} Group.all.sort &group_sort"
  • Rails で、Controller に定義されている action を一度に取得する方法はありますか? - QA@IT

    平素よりQA@ITをご利用いただき、誠にありがとうございます。 QA@ITは「質問や回答を『共有』し『編集』していくことでベストなQAを蓄積できる、ITエンジニアのための問題解決コミュニティー」として約7年間運営をしてきました。これまでサービスを続けることができたのは、QA@ITのコンセプトに共感をいただき、適切な質問や回答をお寄せいただいた皆さまのご支援があったからこそと考えております。重ねて御礼申し上げます。 しかしながら、エンジニアの情報入手方法の多様化やQAサービス市場の状況、@ITの今後のメディア運営方針などを検討した結果、2020年2月28日(金)15:00をもちましてQA@ITのサービスを終了することにしました。 これまでご利用をいただきました皆さまには残念なお知らせとなり、誠に心苦しく思っております。何とぞ、ご理解をいただけますと幸いです。 QA@ITの7年間で皆さまの知識

    Rails で、Controller に定義されている action を一度に取得する方法はありますか? - QA@IT
  • Rails の ActiveRecord モデルテストの書き方ガイドライン - passingloopの日記

    このエントリでは,Ruby on Rails (以下 Rails)の ActiveRecord モデルテストについて,1) どこの何をテストすればよいか,2) どのようにテストを書けばよいか,のガイドラインを示します.このガイドラインは Rails 公式のものではなく,id:passingloop が使っている私的なものです.疑問・質問・批判・間違いの指摘はページ下部のコメント欄までお願いします. はじめに Rails は TDD/BDD サポートが充実した Web アプリケーション開発フレームワークです.Rails で使える Test::Unit や RSpec などといったテスティングフレームワークの使い方に関する解説も豊富にあります.しかし,「どこをどうテストすればよいのか」についての解説は,「使い方」の解説と比較して少ないように思います.もっとも,テスト一般についてどう書くかはアプ

    Rails の ActiveRecord モデルテストの書き方ガイドライン - passingloopの日記
  • Rubyアソシエーション: コーディング規約

    Rubyの正式なコーディング規約はありません。しかし、複数人のプロジェクトやチームで同時にコーディングする場合や、継続的なメンテナンスが必要とされるシステム開発においては、コーディングスタイルを統一しておくことで可読性を高め保守性を向上することができます。参考となるコーディング規約を紹介します。 Rubyコーディング規約(日語) Ruby のコーディングスタイル(日語) The Unofficial Ruby Usage Guide (Ruby Style Guidelineのところ)(英語) Christian Neukirchen's Ruby Style Guide(英語) Elements of Ruby Style(英語

  • RubyとRailsのベストプラクティス - - Railsドキュメント

    カッコはK&Rスタイル 概要 ブロックを制御する構造の末尾に、開きカッコを配置 ブロック内の内容を次の行から初めて、インデントを付ける 最後に制御構造と同じインデントレベルで新しい行に閉じカッコを配置 例 my @names = { 'test1', 'test2', } 参考サイト Amazon.co.jp: Perlベストプラクティス: Damian Conway, クイープ: 制御文の引数をと後続の開きの間にスペース 概要 メソッド呼び出しと勘違いしないため 例 for $result (@results ) { print 'test' } 参考サイト Amazon.co.jp: Perlベストプラクティス: Damian Conway, クイープ: メソッドまたは変数の名前と後続の開きカッコはくっつける 概要 メソッド呼び出しを制御文と勘違いしたり、配列要素の先頭部分を独

  • 破壊的メソッド名には!をつけなければならない…なんて、誰が言ったの? - Qiita

    そんなものは迷信に過ぎない。 はじめに ここ数週間で何度か「破壊的メソッドなのに!がついてない」「!がついてないのに副作用がある」といった言説を何度か目にする機会があった。 「破壊的」と「非破壊的」 a.hoge(b)のようにメソッド呼び出しをしたとき、aの状態に影響を及ぼすメソッドを、Rubyでは一般的に「破壊的」と呼びます。メソッド呼び出しで前の状態を壊して、別の状態にしてしまふからです。 言葉で説明してもぴんとこないかもしれないので、「ふたつの配列をくっつけたい」といふ要望に対して、破壊的なパターンと、破壊的ではないパターンのコードを紹介します。 破壊ではないパターン # ふたつの配列を用意する a = [0, 2, 4, 6, 8] b = [1, 3, 5, 7, 9] c = a + b # aとbを連結してcに代入 p a #=> [0, 2, 4, 6, 8] p b #=

    破壊的メソッド名には!をつけなければならない…なんて、誰が言ったの? - Qiita
  • 1