Ruby関連のことを調べてみた2022年03月25日

Ruby関連のことを調べてみた2022年03月25日

RubyとPHPの比較(メソッド、引数、戻り値)

# この記事の概要
Rubyで学習を始めてPHPに言語チェンジをする人が一定数いるみたいなので
そういった人達が参考にするための記事です。

これらの記事の続きです。

https://qiita.com/Hashimoto-Noriaki/items/82beae9d3d6dac11e11c
https://qiita.com/Hashimoto-Noriaki/items/449c00327e99574e430a

# メソッド
“`メソッド(関数)“`とは***何の処理をしているかをわかりやすくまとめた、かたまりのこと***です。
***Ruby***なら“`def“`、***PHP***なら“`function“`で定義します。
それぞれコードを見ていきます。

⚫︎“`Ruby“`
“`rb
def language(lang)
puts “#{lang}を勉強したい”
puts “#{lang}が話せます。”
end

#メソッドの呼び出し
language(“英語”)
language(“中国語”)

#英語を勉強したい
#英語が話せます。

元記事を表示

Rubyの正規表現の特殊変数

# 正規表現

Rubyでは正規表現を生成する方法が大体二つある、即ち正規表現リテラルとRegexpクラスのクラスメソッドとなります。

## 正規表現を生成する

“`
irb(main):001:0> a = /abcdefg/i
=> /abcdefg/i
irb(main):002:0> a.class
=> Regexp
irb(main):003:0> a = Regexp.new(“abcdefg”)
=> /abcdefg/
irb(main):004:0> a = Regexp.new(“abcdefg”, Regexp::IGNORECASE)
=> /abcdefg/i
“`

## Regexpのオプション

### Regexp::IGNORECASE

大文字小文字の違いを無視する
“`
irb(main):021:0> str = “This is Regexp”
=> “This is Regexp”
irb(main):022:0> t1 = Regexp.new(“this is regexp”, Regexp::IGNORECASE)
=>

元記事を表示

【個人開発】ガン飛ばしてちょいワル気分になれるサービスを開発しました(-“-#)

# はじめに
早速ですが大人になるにつれ怒りの感情を表に出さなくなったと思う方はいませんか?
今回はそんな世の大人達の為にガン飛ばして遊べる~~物騒なクソ~~コンテンツアプリを作成しました!
– 普段優しそうというイメージを持たれてるけど、たまには悪ぶりたい人
– 舐められたくない人
– いざという時のために相手を威嚇する練習をしたい人
– 今むしゃくしゃしている人
– 東京リベンジャーズが好き!

そんな方々に是非使ってみて欲しいサービスです◎

本記事では主な機能や技術面の紹介をさせて頂きます。
面白い!と思って頂けたらエンジニア冥利に尽きます…!

# サービス概要
[![Image from Gyazo](https://i.gyazo.com/900b2d9980232c075a0feb785600a0bf.png)](https://gyazo.com/900b2d9980232c075a0feb785600a0bf)
カメラに向かってガン飛ばすだけ!
「たまにはちょっと悪ぶりたい〜(-“-#)」
そんな少しやんちゃな想いを叶えるサービスです◎

https://ww

元記事を表示

【LeetCode】28. Implement strStr()を解いてみた

## はじめに
コーディングテスト対策としてLeetCodeの28. Implement strStr()を解いていく。

## 問題文を和訳
– haystack 内で needle が最初に出現するインデックスを返します。
– needle が haystack 一部でない場合は -1 を返します。
– 明確化:
– needle が空の文字列の場合、何を返す必要がありますか?
– needle が空の文字列の場合は 0 を返します。
– これは、C の strstr() および Java の indexOf() と一致しています。
– Input: haystack = “hello”, needle = “ll”
– Output: 2

## 回答
“`28_ImplementstrStr().rb
def str_str(haystack, needle)
if needle.length == 0
return 0
end
for i in 0…haystack.length – needle.length + 1 do
for

元記事を表示

【LeetCode】27. Remove Elementを解いてみた

## はじめに
コーディングテスト対策としてLeetCodeの7. Reverse Integerを解いていく。

## 問題文を和訳
– 配列 nums と値 val を指定すると、
– その値のすべてのインスタンスをその場で削除し、新しい長さを返します。
– 別の配列に余分なスペースを割り当てないでください。
– これは、O(1) の余分なメモリを使用して入力配列をその場で変更することによって行う必要があります。
– 要素の順序は変更できます。 新しい長さを超えて何を残すかは問題ではありません。
– 明確化:
– 戻り値が整数であるのに、答えが配列である理由が混乱していますか?
– 入力配列は参照によって渡されることに注意してください。
– つまり、入力配列への変更は呼び出し側にも認識されます。
– 内部的には、次のように考えることができます。
– nums は参照によって渡されます。 (つまり、コピーを作成せずに)
– int len = removeElement(nums, val);
– 関数内の nums への変更は、呼び出し元によって認識されます。
– 関数に

元記事を表示

Ruby脳のためのRustの文字列メソッド

| Ruby | Rust |

元記事を表示

RubyとPHPの比較(条件分岐、配列、ハッシュ)

# この記事の概要
Rubyで学習を始めてPHPに言語チェンジをする人が一定数いるみたいなので
そういった人達が参考にするための記事です。

こちらの記事の続きです。
https://qiita.com/Hashimoto-Noriaki/items/82beae9d3d6dac11e11c

# 比較
演算子などを使った比較の方法をみていきます。

### PHPで値を調べる

“`var_dump“`を使うと値の解析ができます。
“`php
var_dump(10);
var_dump(“10”);

//int(10)
//string(2) “10” と出力
“`
initは“`数値“`のことで、stringは“`文字列“`のことです。
stringの後の(2)は***文字数***のことです。

### 条件式
数値などを比較をする時には使う***条件式***をRubyとPHPで比較しながら見ていきます。
“`==“`は比較したものが等しいかをチェックします。

⚫︎“`Ruby“`

“`rb
puts 100 == 100
puts 100 ==

元記事を表示

Ruby の rexml で XML をパースするの2

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# 概要
https://qiita.com/superrino130/items/91d3357ce808008eb96d

前回の記事で簡単そうだったのですが、実際は難しい操作でした。
各種のxmlに対応させるclassのため、`xpath`が不定でタグをスキャンして、その階層に合わせてパースする必要がありました。
# どうすRuby
“`xml:sample

元記事を表示

Ruby, Sinatra, HerokuでLINE Botを動かしてみた

RubyでLINE Botを動かすための方法です
## 環境, ライブラリ
– Windows10
– Visual Studio Code
– Ruby(3.1.0)
– Sinatra
– Heroku
– LINE Message API

## ファイル構成
– Gemfile
– Gemfile.lock
– Procfile
– app.rb
– config.ru

## 前提
Ruby、Gitのインストールが完了していることが前提です。

## [手順1] ボット用のチャネルを作成する
LINE Developersコンソールでボット用のチャネルを作成します。

#### 1. LINE Developersコンソールにログインする
[**LINE Developersサイト**](https://developers.line.biz/ja/) の右上の[**ログイン**]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2549439/4d813a47

元記事を表示

本日の基礎練習問題(22/3/24)

# 問題
メソッドに3つの整数a b cを与えます。
・「aとbの差が1」または「aとcの差が1」であり、かつ「bとcとの数値の差が2以上」の場合はTrue
・それ以外はFalse
と出力するメソッドを作りましょう。

出力例:
close_far(1, 2, 10) → True
close_far(1, 2, 3) → False
close_far(4, 1, 3) → True

ヒント
返り値を絶対値(この場合は正の整数)に変換する際はabsメソッドを使いましょう。

# 私の回答
“`
def number_far(a,b,c)
x = (a-b).abs
y = (a-c).abs
z = (b-c).abs

if x == 1 && z >= 2
puts “True”
elsif y == 1 && z >= 2
puts “True”
else
puts “False”
end
end
“`

# 解説
まずa,b,cの整数の差をabsメソッドを使用しx,y,zに代入。
その後「aとbの差が1」または「aとc

元記事を表示

【Ruby】requireとloadの違いについて

requireとloadの違いについてまとめておく。

## requireの場合

“` test.rb
module Lib
$num += 1
end
“`
“`test1.rb
$num = 0
1..10.times do |n|
require ‘./test.rb’
end
puts $num
“`
“`
1
“`
上記では“require“を使用してtest.rbをロードしている。
requireの場合は、ファイルのロードは1度のみ行われるため、1が表示される。

## loadの場合
“` test.rb
module Lib
$num += 1
end
“`
“`test1.rb
$num = 0
1..10.times do |n|
load ‘./test.rb’
end
puts $num
“`
“`
10
“`
“load“を使用してtest.rbの読み込みを行なっている。
“load“は無条件にファイルをロードすることができるため、10回処理が行われて“10“となる。

## requireとloa

元記事を表示

カレンダーミニアプリを作ってみた

RailsのGemであるSimple Calendarを利用して、ミニアプリを作ってみた。

## アプリの新規作成
まずはアプリの新規作成から。
ターミナルで以下を実行する。

“`:ターミナル
rails _6.0.0_ new minicalendar -d mysql
“`

次にencodingの設定を変更。

“`yaml:config/database/yaml
default: &default
adapter: mysql2
encoding: utf8 #ここを変更する
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
“`

.gitignoreファイルの一番下の行に、.Ds_Storeと追記。

“`:gitignore
/public/packs
/public/packs-test
/node_modules
/yarn-error.log
yarn-debug.log*
.yarn-integrity
.Ds_Store #ここに追記
“`

元記事を表示

【LeetCode】26. Remove Duplicates from Sorted Arrayを解いてみた

## はじめに
コーディングテスト対策としてLeetCodeの7. Reverse Integerを解いていく。

## 問題文を和訳
– これは、O(1) の余分なメモリを使用して入力配列をin-placeで変更することによって行う必要があります。
– 明確化:
– 戻り値が整数であるのに、答えが配列である理由が混乱していますか?
– 入力配列は参照によって渡されることに注意してください。
– つまり、入力配列への変更は呼び出し側にも認識されます。
– 内部的には、次のように考えることができます。
– numsは参照によって渡されます。(つまり、コピーを作成せずに)
– int len = removeDuplicates(nums);
– 関数内のnumsへの変更は、呼び出し元に認識されます。
– 関数から返された長さを使用して、最初のlen要素を出力します。
“`
for(int i = 0; i

元記事を表示

【LeetCode】21. Merge Two Sorted Listsを解いてみた

## はじめに
コーディングテスト対策としてLeetCodeの21. Merge Two Sorted Listsを解いていく。

## 問題文を和訳
– 並べ替えられた 2 つの連結リストをマージし、
– 並べ替えられた連結リストとして返します。
– リストは、最初の 2 つのリストのノードをつなぎ合わせて作成する必要があります。
– Input: l1 = [1,2,4], l2 = [1,3,4]
– Output: [1,1,2,3,4,4]

## 回答
“`21_MergeTwoSortedLists.rb
def merge_two_lists(list1, list2)
list3 = ListNode.new(0)
result = list3
while list1 != nil && list2 != nil
if list1.val <= list2.val list3.next = list1 list1 = list1.next else list3.next = list2 l

元記事を表示

復習 Ruby on Rails

1

元記事を表示

Rubyではシフト演算 `1 << k` より配列参照 `lookup[k]` のほうが速い

AtCoderの問題をRubyで復習していて、どうしても時間制限超過(TLE)してしまうものがあった。

他の方の解答を見たりして試しているうちに、どうも**シフト演算の実行回数が多いとTLEしやすい**ということがわかった[^bit-op]。計算したいのは `1 << k` という単純なもの(を最大3000万回ほど)なので、これを事前に計算しておき配列参照 `lookup[k]` に置き換えたところ無事に通過した。 そんなに速度差があるのか気になったので、ベンチマークしてみた。 [^bit-op]: 他の演算なども遅い可能性はあるが、削減しやすいのはシフト演算だけだった。 ## ベンチマーク AtCoderのコードテストを利用。その結果、配列参照のほうが**約1.3倍**速く、3000万回計算すると0.3秒ほど短くなった。 ```ruby:shift-vs-lookup.rb puts RUBY_DESCRIPTION puts require 'benchmark' n = 30 lookup = Array.new(n) { |i| 1 << i } m = 30_

元記事を表示

【Ruby】みんな理解出来てる?テンプレートメソッドパターンのこと。

# テンプレートメソッドパターンとは?
テンプレートメソッドパターンは[GoF](https://gimo.jp/glossary/details/gang_of_four.html)のデザインパターンの一種です。

このパターンは、基底クラスに不変の部分を記述し、変わる部分はサブクラスに定義するメソッドにカプセル化するというモノです。
`変わるものと変わらないものを分離する`という設計の考えに基づいています。

つまり次の2つのオブジェクトによって構成されます。

“`ruby
– 骨格となる「抽象的な基底クラス」
– 実際の処理を行う「サブクラス」
“`

## メリット
– 基底クラス側に、「不変の基本的なアルゴリズム」を配置可能になる。
– 「高レベルの処理を制御すること」に集中できる。
– サブクラス側に、「変化するロジック」を置ける
– 「詳細を埋めること」に集中できる
– 似通った部分を共通化して「サブクラスに対してスーパクラスで実装されている抽象メソッドを実装する」という責任を与えることが可能になる。

## 実装例

### 基底クラス

“`r

元記事を表示

【Ruby】構造体クラスを使いこなしたい。

# 概要
みなさん。「構造体クラス」使ってますか?
たくさん利用してる人もいれば、聞いた事もない人がいるかと思います。
便利なRubyのクラスなのでぜひ頭の隅にでも置いておいてください!

## Sturctとは
Rubyにおける構造体クラス(Struct)は簡易的なクラスのようなものです。
明示的にアクセスメソッドを定義しなくても、構造体クラス外でメンバの参照・更新は可能です。

以下のような場面で使えます。
– まとまったデータを扱いたいが、クラス定義式を使ってクラスを作るまでもない場合。
– クラス内で特定のデータのまとまりを表現する場合。

### 定義方法

以下のように定義することで構造体クラスを使えるようになります。

“`ruby
# Struct.new(‘構造体クラス名’, メンバ)
Struct.new(“User”, :name, :age)

# 第一引数を省略する事も可能
User = Struct.new(:name, :age)

# クラスのように定義する事も可能(非推奨)
class User < Struct.new(:name, :age) e

元記事を表示

【Rails】なぜ”private” “protected” “public”に分けるのか

# 概要
あるメソッドを実装するときに「アクセス権をどうするか?」という問題に必ず直面すると思います。
それぞれの特徴を知っておくことで、効率良く設計・開発が可能です。
ちなみにこれは`カプセル化`と言い、、オブジェクト同士の紐付き(関係性)を薄くし独立性を高め、再利用や交換といった保守性を高める効率の考え方です。

## 特徴
### publicメソッド

“`
– クラスの主な責任や目的を明らかにする
– 外部から実行されることが想定される
– 思いつくままに変更されたりはしない
– 他者が依存したとしても安全
– テストで完全に文書化されている
“`

### privateメソッド

“`
– 実装の詳細に関わる部分
– 外部から実行されることは想定されていない
– 変更されやすい
– 他者が依存するのは危険
– 基本的にはテストはしない(個人的な意見です。諸説あり。)
“`

### protectedメソッド

“`
– 外部からは隠蔽されている
– 仲間(自クラスかサブクラスのレシーバー、親子関係にあるクラスのみ)からは実行可能
“`

## 判断のポ

元記事を表示

RailsアプリにChoices.jsを使ったセレクトボックスを作る

## 概要
Choices.jsを使ってセレクトボックスを作成しました

## はじめに
現在、[フィヨルドブートキャンプ](https://bootcamp.fjord.jp/)でチーム開発をしています。
[Choices.js](https://github.com/Choices-js/Choices)というライブラリを使って、セレクトボックスを作成しましたが、情報が少なかったのでQiitaに記事として残しておきます。
初学者向けの内容となっています。

## Choices.jsについて
軽量な選択ボックス/テキスト入力プラグインです。リッチなセレクトボックスが作れます→[DEMO](https://choices-js.github.io/Choices/)
Select2およびSelectizeに似ていますが、jQueryの依存関係はありません。
2年ほどリリースが止まっていたようですが、2021年の12月より再びメンテナンスされているようです。

## インストール
– npm
“`
npm install choices.js
“`
– yarn
“`
yarn

元記事を表示

OTHERカテゴリの最新記事