ruby基礎のメモ(3)
hash
pythonでいうならdictionary。
h={'one'=>1,'two'=>2,'three'=>3} puts h puts h['three']
出力は以下。
{"one"=>1, "two"=>2, "three"=>3}
3
num={a:1,b:2,c:3,d:4,e:5} num.each { | k, v | puts "key is #{k} ,and value is #{v}"}
出力は以下。
key is a ,and value is 1
key is b ,and value is 2
key is c ,and value is 3
key is d ,and value is 4
key is e ,and value is 5
num={a:1,b:2,c:3,d:4,e:5} num.each { | k, v | num.delete(k) if v>=3} puts num
出力は以下。
{:a=>1, :b=>2}
num={a:1,b:2,c:3,d:4,e:5} num2=num.select{ |k, v | v.odd?} puts num2
出力は以下。
{:a=>1, :c=>3, :e=>5}
class
class User def initialize(name) @name = name end def get_name @name end end user = User.new("jose") puts user.get_name
joseが返ってくる。
クラスのインスタンスをを生成するには.new()メソッドを使う。
initialize メソッドがある場合は、new メソッドを使うと必ず呼ばれる。
クラスのイニシャルは大文字。
class Book attr_accessor :title, :price def initialize(title, price) @title = title; @price = price end end book = Book.new("Programming Ruby", 1980) puts book.title puts book.price
Programming Ruby
1980
と出力される。
attr_accessorメソッドは、クラスやモジュールにインスタンス変数を読み書きするためのアクセサメソッドを定義する。
class Book attr_accessor :title, :price def initialize(title, price) @title = title; @price = price end end book = Book.new("Programming Ruby", 1980) book.price = 2000 puts book.price
2000
と出力される(1980から2000にアップデートされている)。
ruby基礎のメモ(2)
先日の続き。
リスト
a=[1,2,3,4,5] a.include?(10)
これだと、Falseが返ってくる。aに10が含まれている場合はTrue。
なので、当然、
a=[1,2,3,4,5] a.include?(1)
とすれば、Trueが返ってくる。
a=[1,2,3,4,5] a.reverse! puts a
reverse!メソッドは配列の要素の順番を反転させる。レシーバ自身を変更するメソッドで、戻り値はレシーバ自身。
返ってくるのは、
[5, 4, 3, 2, 1]
となる。
a=[1,2,3,4,5] a.reverse puts a
返ってくるのは
[1, 2, 3, 4, 5]
となる。「!」がない場合、レシーバ自身は変更なし。
リファレンスも参照
https://docs.ruby-lang.org/ja/search/version:2.4.0/class:Array/query:reverse/
b=(0..15).to_a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
と、0から15までのArrayができる。to_a = to array。
b<<25
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 25]
のように、末尾に25が追加される。
その他、リストへの追加や削除はリファレンスを参照。
https://docs.ruby-lang.org/ja/search/version:2.4.0/class:Array/query:push/
c=[1,2,3,4,5,3,2] puts c c.uniq! puts c
返ってくるのは以下のとおり。uniqで重複を省ける。
[1, 2, 3, 4, 5, 3, 2]
[1, 2, 3, 4, 5]
name = ["suzuki","tanaka","okada","yamada"] name.each do |i| puts "hello,#{i.capitalize}-san!" end
返ってくるのは以下。
hello,Suzuki-san!
hello,Tanaka-san!
hello,Okaada-san!
hello,Yamada-san!
name = ["suzuki","tanaka","okada","yamada"] name.each { |i| puts "hello,#{i.capitalize}-san!"}
同じ結果が返ってくる(1 lineで書くことができる)。
y=(0..20).to_a y.select{|i| i.odd?}
返ってくるのは以下。selectで、false を返した要素を自身から削除。
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
a=["My","NAME","IS","TARO"] a.join(":")
出力は以下。
"My:NAME:IS:TARO"
ruby基礎のメモ(1)
それなりに時間をとって勉強し直すことにしたので、知っていること・わかっていると思うことでも書き起こし。
ダブルクォーテーションとシングルクォーテーション
name = "suzuki" puts("#{name}") puts('#{name}')
出力すると以下になる。singleだと、そのままの文字列を返す。
suzuki #{name}
printとputs
print 'hello (print)' # 改行なし出力 puts 'hello(put)' # 改行あり出力
出力すると以下になる。コメントの通り、改行が入るか、そうでないか。
hello (print)hello(put)
数値処理関連
22.odd?
22.even?
それぞれ、False,Trueで返ってくる。直感的。
x = "10" y = 10 # 変数xを数値に変換し、5を足して出力 puts x.to_i + 5 # 変数yを文字列に変換し、文字列と連結したものを出力 puts y.to_s + "人"
出力は以下になる。s=string,i=int。
15 10人
5.times{print'321:'}
出力は以下になる。{}の中を5回繰り返す、ということ。
321:321:321:321:321:
メソッド
def multiply(n,m) n.to_f * m.to_f end puts multiply(5,4)
def hogehoge のあとにPythonのような「:」はいらない。return hoge もなくてOK。endは必要。
出力は「20.0」になる。
IF
prompt = gets.chomp if prompt=="1" puts("1 selected") elsif prompt=="2" puts("2 selected") else puts("invald") end
promptに入力された条件によって分岐。
phpを(ようやく)初めて学習した(2)
if文の書き方
<?php $role="admin"; $pos="president"; if ($role=="admin" && $pos=="president") { echo "you are admin & president"; }else { echo "you are NOT admin"; } ?>
アンドの条件は「&&」として二つ重ねる。
(上記出力は、you are admin & president)
<?php $role="admin"; $pos="stuff"; if ($role=="admin" || $pos=="president") { echo "you are admin & president"; }else { echo "you are NOT admin"; } ?>
orの場合は「||」を二つ重ねる。
(上記出力も、you are admin & president)
for文の書き方
<?php for ($i=0; $i <10 ; $i++) { echo $i.","; } ?>
出力は
0,1,2,3,4,5,6,7,8,9,
となる。
インクリメントは「++」
<?php for ($i=20; $i >0 ; $i--) { echo $i.","; } ?>
デクリメントは「--」。出力結果は以下になる。
20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,
<?php for ($i=10; $i >=0 ; $i--) { if ($i==0) { echo $i; }else { echo $i.","; } } ?>
forとifを組み合わせる。出力は以下になる。
10,9,8,7,6,5,4,3,2,1,0
<?php $group = array("tanaka","suzuki","toyota","matsuda"); for ($i=0; $i <sizeof($group) ; $i++) { echo $group[$i].";"; } ?>
arrayとforを組み合わせる。長さを動的にするにはsizeofを使えばよい。出力は以下になる。
tanaka;suzuki;toyota;matsuda;
<?php $group = array("tanaka","suzuki","toyota","matsuda"); foreach ($group as $key => $value) { echo $key.";".$value.","; } ?>
foreachの使い方。出力は以下。
0;tanaka,1;suzuki,2;toyota,3;matsuda,
while文の書き方
<?php $a = 0; while ($a <= 10) { echo $a.","; $a++; } ?>
出力結果は以下の通り。
0,1,2,3,4,5,6,7,8,9,10,
phpを(ようやく)初めて学習した(1)
これまでwordpressをいじったことはあっても、基礎を知らないまま、ググってわかる程度のカスタマイズをしてきたけども、色々と苦しくなってきたので最初から学ぼうと思う。
<?php $name="suzuki"; echo $name; ?>
$で変数の宣言。echo = print。
上記の例だと、suzukiが表示されることになる。
<?php $num = 10; $calc=$num + 5; echo $calc; ?>
出力は「15」。計算もできる。
<?php $num = 10; $calc=$num + 5; echo "$calc"; ?>
これも同じ結果。「"」はあってもなくてもいいの?
よくわからんけど、あとで調べる。
<?php $bool1=true; $bool2=false; echo "$bool1"; echo "$bool2"; ?>
「1」だけが出力される。
true=1、だが、falseはnullで、何も出力されない。
<?php <?php $myarray = array("suzuki","tanaka","abe","inoue"); print_r ($myarray); ?>
Array ( [0] => suzuki [1] => tanaka [2] => abe [3] => inoue )
と返ってくる。print_r = print readable。
アレイの中を個別にとってくるには、以下のようにすればよい。
<?php $myarray = array("suzuki","tanaka","abe","inoue"); echo "$myarray[2]"; ?>
abeが出力される。
連想配列 arrayX["key"]="value
間を飛ばしても問題ない。文字列が混ざってもよい。
<?php $array2[0]="taro"; $array2[1]="jiro"; $array2[3]="saburo"; $array2[6]="shiro"; $array2["myson"]="takashi"; print_r($array2); ?>
Array ( [0] => taro [1] => jiro [3] => saburo [6] => shiro [myson] => takashi )
と出力される。
<?php $array3=array("apple" => "リンゴ", "orange" => "ミカン", "grape" => "ブドウ"); echo sizeof($array3); ?>
上記で出力される結果は3。
array関数でarrayをセット。
sizeof(hoge)は、イコールlenと同じ働きをする。
<?php $array3=array("apple" => "リンゴ", "orange" => "ミカン", "grape" => "ブドウ"); echo sizeof($array3); echo "<br>"; print_r($array3); echo "<br><br>"; unset($array3["orange"]); echo sizeof($array3); echo "<br>"; print_r($array3); ?>
3
Array ( [apple] => リンゴ [orange] => ミカン [grape] => ブドウ )
2
Array ( [apple] => リンゴ [grape] => ブドウ )
と出力される。unsetで値をクリアできる。
SQL初心者向けな練習サイト
SQLをよくよく考えてみると、経験はあるものの、体系的に学習した覚えがない。
必要な物事は全て実務でやって覚えてきた。
そんなわけで、SQLの初心者に向けて使えそうなサイトを見つけて、復習がてら遊んでみた。
今回試したのは以下のサイト
www.codecademy.com
ユーザー登録は必要、英語も必要(だけど難しい英語は何一つとしてない)。sqliteを使用。
SELECT * FROM table_name;
table_nameテーブルから全てのフィールドを選択
SELECT column1, column2, ... FROM table_name;
先ほどとは逆に、指定したテーブルのフィールドを選択
CREATE TABLE table_name ( column1 datatype, column2 datatype, column3 datatype, .... );
データベースに新しいテーブルを作る。
columnXはカラム名のこと。IDとか、nameとかが、実務上では入ってくると思う。
datatypeは、integerとか。詳しくは「(DB名) datatype」とかでググってみる。
INSERT INTO celebs (id, name, age) VALUES (1, 'Justin Bieber', 21);
insert文。
INSERT INTO (table_name) (hoge1,hoge2,hoge3) values(fuga1,fuga2,fuga3)
みたいな感じで、hogeはカラム名、fugaはinsertされるパラメータ。
UPDATE celebs SET age = 22 WHERE id = 1;
UPDATEでcelebsってテーブルを指定する。
SETで編集するカラム名を指定して、更新後の値をイコールのあとに入力する。
WHEREで更新するrowを指定する。上記の例だとカラム名がIDで、ID=1のレコードが22に更新されることになる。
ALTER TABLE celebs ADD COLUMN twitter_handle TEXT;
ALTER TABLEでテーブルを指定する。
ADD COLUMN X Y でXには追加するカラム名、Yにはデータタイプを指定する。
DELETE FROM celebs WHERE twitter_handle IS NULL;
DELETE FROM テーブル名、
WHERE以下で、twitter_handleってカラムがIS NULLのレコードを指定して、削除。
一通り(10問)終えると、クイズがある。スキップも可能。
どうやら、無料では10問解き終えたら終わりな様子。有料(プロ)ではもっと多くの問題があるけども。
簡単でした。もうちょっと歯ごたえあるものを探そう。