娘用に契約したドットインストールで、自分も学習を始めた。
まずは、Bootstrapから。
終わった学習をメモしていく。
◆ Bootstrap 4入門
Bootstrap 4入門 (全22回) - プログラミングならドットインストール
2020/11/07 - 2020/11/08
#01 - #22
簡単にけっこうなものが実装できた。感動。
◆ React入門
React入門 (全19回) - プログラミングならドットインストール
2020/11/09 - 2020/11/09
#01 - #19
けっこう複雑なんですけど。
これくらいガッツリ作るんであれば、これまでの技術でもあまり手間が変わらないと思うんだが。Reactの何が斬新なんだろうか。もう少し深堀りしてみたいと思う。
Kindleで何冊か本を読んでみたが、Reactは求めてるものと違う気がしてきた。
サーバ側でやるような複雑な処理をブラウザ側で出来る、つまりページの一部を更新する時に使える技術っぽい。
Ajaxだと煩雑になるような処理を実装するためのもの ⇒ Reactって感じみたい。
Facebookみたいなページを作りたい時に良いんだろう。
Reduxっていうものもあるみたい。大きめの規模の開発をする時に状態を管理するためにReduxが使えるらしい。
あとReact bootstrap。これは、Reactの構文内で出力をBootstrapのデザインで出力したい時に使うっぽい。
React bootstrapを使ってポートフォリオを作成. 【所要時間】 | by Tatsuya Asami | Medium
◆ chart.js
Chart.js入門 (全10回) - プログラミングならドットインストール
2020/11/10 - 2020/11/10
#01 - #10
すごい!感動。こんなに簡単にグラフが出来るなんて。やはり定期的に新しい技術、ツールを勉強する時間を作ることは大事と再認識。
◆ Go言語
はじめてのGo言語 (全10回) - プログラミングならドットインストール
2020/11/10 - 2020/11/10
#01 - #10
まぁこのレッスンをやった感じとしては、普通のプログラミング言語。速度が速いという噂だから、規模が大きくなってくると違いを実感してくるんだろうか。
あと、ドットインストールで実動作を学習してから、kindle unlimitedの対象本を読むと、体系的に理解が深まるから良いな。
良さそうな点 ⇒ 並列処理、GoだけでiOSとAndroidとWebに対応。動作確認とアプリストアでの公開まで出来るらしい。
◆ Java
はじめてのJava (全10回) - プログラミングならドットインストール
2020/11/12 - 2020/11/12
#01 - #10
Goと同じもの(ループとif文で学ぶ)を作る授業だった。
基本は同じだな。Javaの概要を知らなかったので学べて良かった。
Kindleでも何冊か読んでみたいと思う。
大津 真って人の本はわかりやすい。
◆ Python
はじめてのPython (全9回) - プログラミングならドットインストール
2020/11/12 - 2020/11/12
#01 - #09
これもGoやJavaのレッスンと同じで数当てゲームを作って学ぶレッスンだった。
言語ってほぼ同じだな。英語とドイツ語ほどの違いもなく、標準語と名古屋弁ほどの違いかもしれない。
◆ Ruby
はじめてのRuby (全9回) - プログラミングならドットインストール
2020/11/13 - 2020/11/13
#01 - #09
PHPに近いな。簡単な記述の方がいいな。
はじめての◯◯は、すべて数当てゲームなんだな。20分で終わった。
◆ マテリアルアイコン
マテリアルアイコン入門 (全6回) - プログラミングならドットインストール
2020/11/13 - 2020/11/13
#01 - #06
良かった。Bootstrapみたいなものだな。
というかBootstrapにもアイコンがあるんだな。
スマホ対応!Bootstrapで使えるアイコンまとめ | TechAcademyマガジン
◆ Google Charts
Google Charts入門 (全9回) - プログラミングならドットインストール
2020/11/13 - 2020/11/13
#01 - #09
chart.jsとほぼ同じだな。chart.jsの方が使いやすかった。
Google Maps API入門 (全17回) - プログラミングならドットインストール
2020/11/16 - 2020/11/17
#01 - #11
使わなさそうなので、途中で辞めておいた。いまは支払方法の登録が必要みたい。
一定回数のAPI使用までは無料。
◆ JavaScriptで学ぶFirebase入門 (全17回)
◆ Google Chrome拡張機能入門 (全20回)
この辺は動画を飛ばしで見ただけ。当面は使わなそう。
◆ Chrome Developer Tools入門
Chrome Developer Tools入門 (全10回) - プログラミングならドットインストール
2020/11/17 - 2020/11/17
#01 - #10
これは良かった。少し古いけど。知らないツールもあり勉強になった。
◆ Google Fonts入門
Google Fonts入門 (全5回) - プログラミングならドットインストール
2020/11/17 - 2020/11/17
#01 - #05
まずまず良かった。こんなものがあったとは知らなかった。
◆ Google Apps Script入門
Google Apps Script入門 (全20回) - プログラミングならドットインストール
2020/11/17 - 2020/11/18
#01 - #20
まぁまぁかな。エクセル+@という感じだな。
ただ知らなかったので知れて良かった。
◆ Docker
Docker入門 (全11回) - プログラミングならドットインストール
2020/11/18 - 2020/11/18
#01 - #11
Dockerが何かということが分かった。サーバー内に諸々作った構成をそのままイメージに固めて、他でサーバを作った時にそのイメージをpullしてくればすぐに環境を再現できるっていうものらしい。
もろにAWSのAMIだな。AMIだったら2クリックくらいで出来るんだが。AWSを使わずに、一からサーバ環境を作っているような会社にとっては有効なんだろうな。
【AWS利用者向けの初めてのDocker】EC2とDockerコンテナのライフサイクルを比較 | Developers.IO
◆ UNIXコマンド
UNIXコマンド入門 (全28回) - プログラミングならドットインストール
2020/11/18 - 2020/11/18
#01 - #28
UNIXコマンドの基礎。知らなかったことを知れて良かった。
pwd は print working directory の略。
-r 再帰的 reverse
シンボリックリンク ln -s
下階層のフォルダ作成 mkdir -p
history !3
cd !$
コマンド履歴の検索 Ctrl r
/etc/passwd
/etc/group
パーミッションの x は executeの略
echo $PATH
export PATH=/home/***:$PATH
mkdir test && cd test
ブレース展開 mkdir app{1..5}
find test -name 'app1*' -type d
◆ git
git入門 (全22回) - プログラミングならドットインストール
2020/11/18 - 2020-11/19
#01 - #22
VagrantとVirtual Box でWindows内にLinux環境を作った。Windowsに直接Gitを入れても、レッスン内容と合致しないので使いにくい。
git log --oneline
git log -p
addの後 git diff --cached
直前コミットを修正 git commit --amend
直前のコミットに戻る git reset --hard HEAD
指定のコミットに戻る git reset --hard ichiinaID
戻ったコミットを取り消し git reset --hard ORIG_HEAD
引っ張ってくる git merge sakinodirekutori
git tag v1.0 / git tag / git tag v0.9 ichiinaID / git tag -d v1.0
短縮・エイリアス git config --global alias.br branch
git config -l
共有リポジトリ git init --bare
リモートのリポジトリ作成 git remote add origin ~/ourweb.git
git commit -am "comment"
conflictが起きた時は git pullしてからvimで変更してpush
◆ sed
sed入門 (全10回) - プログラミングならドットインストール
2020/11/19 - 2020/11/19
#01 - #10
仮の領域に編集したテキストを保持する感じ。grepしたものをsedして、最終的に欲しい情報だけをテキストに出力とか出来る。
sed -e '1i\----' -e '$a\----' -e '/^$/d' names.txt
sed 'y/to/OT/' names.txt
sed 's/apple/Apple/g' items.txt
sed 's/apple/Ringo/ig' items.txt
sed 's/[0-5]/【&】/' items.txt
sed コマンド | コマンドの使い方(Linux) | hydroculのメモ
ここまでで計10日
1日5時間くらいかな。
◆ vim
vim入門 (全18回) - プログラミングならドットインストール
2020/11/19 - 2020/11/20
#01 - #18
知らないことが多くあり良かった。
gg先頭に戻る
G 最終行に行く
Ctrl F 一画面下
Ctrl B 一画面上
w単語単位で進む
b単語単位で戻る
行頭 ^
行末 $
f検索文字;
% 閉じる箇所までジャンプ
v 文字選択
V 行選択
Ctrl v 矩形選択
矩形選択後 Shift iで全挿入
Shift v + Shift g全選択
x 一文字削除
3yy 三行コピー
Ctrl n 上方向に検索
*# カーソル位置の単語を検索
:s/title/Title/g 行置換
:%s/a/A/gc 全置換
u アンドゥ
Ctrl r リドゥ
:sp 画面分割
:close 分割終了
:tabe filename タブで開く
gt タブ移動
:tabclose タブを閉じる
vim -p filename1 filename2 タブでvimを開く
= インデントを揃える
cit まとまりを削除
:set number 行番号を表示
:set ingnorecase 検索時の大文字小文字を区別しない
:set noignorecase 元に戻す
◆ 正規表現
エディタで学ぶ正規表現入門 (全18回) - プログラミングならドットインストール
2020/11/20 - 2020/11/20
#01 - #18
これも勉強になってよかった。
\w 文字
\s スペースタブ改行
\D 数字以外
\d{5,} 数字を5回以上繰り返し
-? ハイフンが0個か1個
-+ ハイフンが1個以上
-* ハイフンが0個以上
^\d 行頭が数字
\d$ 末尾が数字
\bあいう\b 区切られた単語だけ
[bch] 任意のbch一文字
[^c] 対象c以外の一文字
[^cb] 左記2つ(cまたはb)以外
()で囲った検索対象を$1・$2で置換
(\d),\s\1 連続する2の数字を検索する後方参照バックスラッシュ1
◆ awk
AWK入門 (全16回) - プログラミングならドットインストール
2020/11/20 - 2020-11-21
#01 - #16
色々と知れて良かった。
awk '{ print $4 }' scores.dat 4番目のデータ取得
awk '{print NR":"$0}' scores.dat ナンバーオブレコード行番号を付ける
フィールドセパレータをスペースから変える時 BEGIN{ FS = "-" }
レコードセパレータを変える時 BEGIN{ RS = ":" }
アウトプットフィールドセパレータ・レコードセパレータ BEGIN{ OFS = "@" ORS = "|" }
4レコード以前の4番目出力 awk 'NR < 4{print $4}' filename.txt
桁数を指定して文字を差し込む awk 'NR > 96{ printf "Name: %-10s sum:%10d Avg:%010.2f\n", $3, ($4+$5+$6+$7), *1;
配列にキーが存在するか確認 array_key_exists('taguchi', $scores) === true) {
配列に値が存在するか確認 in_array(80, $scores) === true) {
配列内に指定した値があるか検索してキー取得 array_search(70, $scores)
配列の値でソート asort($scores); arsort($scores);
配列のキーでソート ksort($scores); krsort($scores);
多次元配列のソート
$scores = array_column($data, 'score');
$names = array_column($data, 'name');
array_multisort(
$scores, SORT_DESC, SORT_NUMERIC,
$names, SORT_DESC, SORT_STRING,
$data
);
fopenを使わずにfileに書き込み
file_put_contents('names.txt', $contents); file_get_contents('names.txt');
配列でfileから取得 file('names.txt', FILE_IGNORE_NEW_LINES);
1日後のUNIX TIME strtotime('2020-05-07 +1 day')
◆ jQuery入門
【サポート終了】 jQuery入門 (全20回) - プログラミングならドットインストール
2020/12/29 - 2020/12/29
#01 - #20
$(document).ready(function() { は $(function() { に省略できる
直下の子要素のみ指定 $("#main > .item").css('color', 'red');
下の子要素すべて $("#main .item").css('color', 'red');
itemの隣にあるitemのみ $(".item + .item").css('color', 'red');
フィルタ
一致するものの2番目のみ $("#sub > li:eq(2)").css('color', 'red');
より大きい $("#sub > li:gt(1)").css('color', 'red');
奇数のみ $("#sub > li:odd").css('color', 'red');
値に含むもの $("#sub > li:contains('4')").css('color', 'red');
DOM要素の指定
対象の子要素を指定 $("#sub").children().css('color', 'red');
対象の次の要素を指定 $("#sub > li:eq(2)").prev().css('color', 'red');
同列の兄弟要素 $("#sub > li:eq(2)").siblings().css('color', 'red');
属性のセレクタ
googleと一致 $('a[href="http://google.com"]').css('background', 'red');
を含む *=
先頭から始まる ^=
末尾が対象のもの $=
値の取得 console.log($('p').css('color'));
既存クラスをタグに付与 $('p').addClass('myStyle');
属性の取得 console.log($('a').attr('href'));
属性の変更 $('a').attr('href', 'http://google.co.jp');
dataの取得
<a href="http://google.com" data-xxxxx="google">google</a>
console.log($('a').data('xxxxx'));
テキストの変更 $('p').text('just changed');
HTMLに変更 $('p').html('<a href="">click me!</a>');
要素の中を消す $('p').empty();
要素自体を消す $('p').remove();
要素の追加 var li = $('<li>').text('just added'); $('ul > li:eq(1)').before(li);
末尾に追加 $('ul').append(li);
コールバック関数 処理後に実行
$('#box').fadeOut(800, function() {
alert("gone!");
});
クリックでアラート
$('#box').click(function() {
alert("hi!");
});
$('#box')
マウスオーバーで色変更
.mouseover(function() {
$(this).css('background', 'green');
})
マウスアウトで色変更
.mouseout(function() {
$(this).css('background', 'red');
})
マウスを動かすとX座標を表示
.mousemove(function(e) {
$(this).text(e.pageX);
});
$('#name')
マウスが要素に当たると
.focus(function() {
$(this).css('background', 'red');
})
マウスが要素から外れると
.blur(function() {
$(this).css('background', 'white');
});
値が変わると
$('#members').change(function() {
alert('changed!');
});
読み込み後に追加した要素に対して操作
$('button').click(function() {
var p = $('<p>').text('vanish!').addClass('vanish');
$(this).before(p);
});
$('body').on('click', '.vanish', function() {
$(this).remove();
});
もっと読み込むボタン
<button>もっと読む</button>
<div id="result"></div>
$(function() {
$('button').click(function() {
$('#result').load('more.html');
});
});
ajaxは非同期
処理が終わる前に次の処理をする
コールバック関数で処理を追加すれば、読み込んだ対象に対して処理が可能
$(function() {
$('button').click(function() {
$('#result').load('more.html', function() {
$('#message').css('color', 'red');
});
});
});
jqueryでget取得
<input type="text" name="name" id="name">
<input type="button" id="greet" value="Greet!">
<div id="result"></div>
$('#greet').click(function() {
$.get('greet.php', {
name: $('#name').val()
}, function(data) {
$('#result').html(data.message + '(' + data.length + ')');
});
});
greet.php
$rs = array(
"message" => htmlspecialchars("hi! " . $_GET['name'], ENT_QUOTES, "utf-8"),
"length" => strlen($_GET['name'])
);
header('Content-Type: application/json; charset=utf-8');
echo json_encode($rs);
◆ Node.js
Node.js入門 (全16回) - プログラミングならドットインストール
2020/12/29 - 2020/12/30
#01 - #16
スレッドモデル 処理ごとに新規でスレッドを立ち上げるモデル
イベントループ キューにリクエストを溜めて行き、イベントループでずっと高速に処理継続
node.jsはイベントループ式
処理をブロックするやり方はNG、whileとか
一つの処理が止まると全部止まる
コールバック関数を使いノンブロッキングで作成する
npm ノードパッケージマネージャ
server.jsで処理を行い、hello.ejsでHTMLを表示
エスケープする場合 <%= title %>
エスケープしない場合 <%- content %>
node.js ってつまりは、サーバー側で使えるJavascriptってことか。
◆ TypeScript入門
TypeScript入門 (全19回) - プログラミングならドットインストール
2020/12/30 - 2020/12/30
#01 - #19
Javascriptの拡張版
ts拡張子のタイプスクリプトファイルをコンパイルすることで、jsファイルが出来る。
それをnode.jsで実行する。
public name: string;
constructor(name: string) {
this.name = name;
}
上記の省略が以下
constructor(public name: string) {
}
アクセス修飾子
private => Class内でのみ使用可能
protected => 継承している(extendsしている)クラスでも使用可能
interfaceで宣言して、classにimplementsで埋め込む
interface内のプロパティをclass内で利用必須とできる
◆ Java 8入門
Java 8入門 (全43回) - プログラミングならドットインストール
2020/12/30 - 2020/12/31
#01- #43
型の宣言
String msg = "Hello World Again!";
文字列はダブルクォーテーション Hello World
文字はシングルクォーテーション a
コンパイル javac MyApp.java
出来るファイル MyApp.class
実行コマンド java MyApp
キャストする = データ型を変換すること
staticメソッド:インスタンスを生成しなくても呼び出せるメソッド
static変数:インスタンス化の影響を受けない変数
配列番号のこと => 添え字、インデックスと呼ぶ
配列の宣言から代入まで一気にやる方法 int sales = {100, 200, 300};
基本データ型(プリミティブ型) int , float , char 領域に対して具体的な値が入る
参照型 String , Array , Class 宣言した時点で領域には番地だけが入る
String型のみ基本データ型のように動く(番地の領域に、番地を入れた場合に、新たな領域を確保)
メソッド
public static void sayHi(String name) {
public static String sayHi(String name) {
sayHi("Steve"); ← 引数
引数の数や型が違えば、同じ名前のメソッドを作ることが出来る → メソッドのオーバーロードと呼ぶ
Classの中にメソッド
クラスに属する変数をフィールドと呼ぶ
newすることをインスタンス化するという
コンストラクタ => クラスがインスタンス化される時に必ず呼ばれるメソッド
継承元のクラス => 親クラス、スーパークラス
継承したクラス => 子クラス、サブクラス
パッケージ化
アクセス修飾子(public , private , protected)で制限できるようになる
冒頭で宣言が必要
package com.dotinstall.myapp;
import com.dotinstall.myapp.model.User;
インポートで他のパッケージのクラスを読み込める
getter ゲッター getする用のメソッド
setter セッター setする用のメソッド
staticを付けたフィールドやメソッドは、クラスに属しているという意味でクラス変数や、クラスメソッドと呼ぶ。
クラスが使われる際に必ず行われるconstructorのようなもの => staticイニシャライザ
static {
User.count = 0;
System.out.println("Static initializer");
}
インスタンスイニシャライザ => インスタンス化される前に実行される
{
System.out.println("Instance initializer");
}
public User(String name) {
this.name = name;
User.count++;
System.out.println("Constructor");
}
final修飾子 変更できない宣言
変数は定数にできる
メソッドはオーバーライドできなくなる
// 抽象クラス -> 具象クラス
abstract class User {
public abstract void sayHi(); // 抽象メソッド
}
class JapaneseUser extends User {
@Override
public void sayHi() {
System.out.println("こんにちは!");
}
}
インターフェース
interface Printable {
// 定数
double VERSION = 1.2;
// 抽象メソッド
void print();
// defaultメソッド
public default void getInfo() {
System.out.println("I/F ver. " + Printable.VERSION);
}
}
あらかじめ、デフォルト設定のようなものを指定しておく
使う時はimplements
class User implements Printable {
@Override
public void print() {
System.out.println("Now printing user profile...");
}
}
列挙型
定数として利用できる
enum Result {
SUCCESS, // 0
ERROR, // 1
}
public class MyApp {
public static void main(String args) {
Result res;
res = Result.ERROR;
例外処理
class MyException extends Exception {
public MyException(String s) {
super(s);
}
}
public class MyApp {
public static void div(int a, int b) {
try {
if (b < 0) {
throw new MyException("not minus!");
}
System.out.println(a / b);
} catch (ArithmeticException e) {
System.err.println(e.getMessage());
} catch (MyException e) {
System.err.println(e.getMessage());
} finally {
System.out.println(" -- end -- ");
}
}
public static void main(String[] args) {
div(3, 0);
div(5, -2);
}
}
ラッパークラス
必要性の意味がわからない
int じゃなくて、Integerを使う意味
格納している領域の場所を指し示していること理由っぽいけど、よくわからない
型を無視、どんな型でもいけるようにする
class MyData<T> {
public void getThree(T x) {
スレッドで並行処理が可能
Thread t = new Thread(r);
// ラムダ式
// (引数) -> {処理}
乱数
import java.util.Random;
Random r = new Random(); クラスからインスタンス化
System.out.println(r.nextDouble()); メソッドを呼び出し
System.out.println(r.nextInt(100));
Javaは基本は、クラスを作って、
使う時はそれを呼び出してインスタンス化して、
そのインスタンス(元はクラス)の中のメソッドを実行して処理をする
*1:$4+$5+$6+$7)/4)}' scores.dat
int値を出力 awk 'BEGIN { print int(3.8) }' scores.dat
文字の切り抜き awk 'BEGIN { print substr("hello", 3, 2) }' scores.dat
◆ Vue.js
Vue.js入門 (全17回) - プログラミングならドットインストール
2020/11/24 - 2020/11/24
#01 - #05
大体、どんなものか分かった。Javascriptがベースだけど、それを簡単に使えるようにしたものだな。
似てるものが多いな。この辺はより統合されて、より簡単なコードで、より便利になる気がするから、そうなってから詳しく学べば良い気もする。
◆ シェルスクリプト
シェルスクリプト入門 (全17回) - プログラミングならドットインストール
2020/11/24 - 2020/11/24
#01 - #06
これもどんなものか分かった。大体同じだな。
◆ tmux
tmux入門 (全10回) - プログラミングならドットインストール
2020/11/24 - 2020/11/24
#01 - #10
sudo yum -y install tmux インストール
tmux new -s ProjectA -d セッションを作る
Ctrl b ->d デタッチ
tmux a -t ProjectA アタッチ
Ctrl b -> $ リネーム
tmux ls セッション一覧を見る
tmux kill-session -t ProjectB セッションの切断
tmux kill-server セッションを全削除
Ctrl b -> , リネーム
Ctrl b -> w ウィンドウの切り替え
Ctrl b -> & セッション終了
Ctrl b -> " 画面の縦分割
Ctrl b -> % 画面の横分割
Ctrl b -> { 画面の入れ替え
Ctrl b -> x ペインを閉じる
Ctrl b -> ! ペインをウィンドウとして立ち上げ
Ctrl b -> [ バッファにコピーモード、スペースで開始、エンターまでコピー
◆ 詳解PHP オブジェクト編
詳解PHP オブジェクト編 (全26回) - プログラミングならドットインストール
2020/11/25 - 2020/11/26
#01 - #26
とても良かった。いままで何となく使ってたオブジェクトを体系的に理解できた。
Class、プロパティ、メソッド、インスタンス、construct、アクセス修飾子(public、private)、staticキーワード、extends、finalキーワード、抽象クラス(abstract)、インターフェース、トレイト、spl_autoload_register、namespace、例外処理
また忘れたら改めて見てみよう
◆ 詳解PHP データベース編
詳解PHP データベース編 (全19回) - プログラミングならドットインストール
2020/11/28 - 2020/11/28
#01 - #19
まぁまぁ。知っていることが多かったが、改めて確認できて良かった。
ここからは手を動かさずに動画を見るだけにしておく。
知っていることが多いので時間短縮の為。
◆ MySQL入門 基礎編
MySQL入門 基礎編 (全27回) - プログラミングならドットインストール
2020/11/28 - 2020/12/01
#01 - #27
知らないものがちょくちょくあった。日時系の関数とか。
あと、SELECT FROM WHEREなどSQL規定の単語は大文字。
自身が作成したカラム等の文字は小文字で書くのが通例らしい。
LIKEに対して%で0文字以上の任意の文字、_が任意の1文字。
SELECT文でNULLも抽出する場合、OR collumname IS NULL;
LIMIT 2, 3; 2件目から3件抽出。
◆ MySQL入門 応用編
MySQL入門 応用編 (全37回) - プログラミングならドットインストール
2020/12/01 - 2020/12/02 -> 一時中断 -> 2020/12/21 - 2020/12/21
#01 - #37
GROUP BY した結果から抽出したい場合は、GROUP BY の後にHAVINGを使用。
IFやCASE WHEN THENで条件を付けれる。
CREATE TABLE ---- AS SELECT --- でテーブルをコピーできる。
CREATE VIEW viewname ビューの作成、元と連動する仮想的なテーブルみたいなもの。
SELECT文ふたつを UNION ALL で繋ぐことが出来る。
SELECTのカラム部分でSELECT文を使う(サブクエリ)。
大元のクエリと関連して実行するサブクエリを相関サブクエリ(where t1.column = t2.column)。
サブクエリはWHERE句やテーブル名にも使える。
サブクエリの代わりにウィンドウ関数を使うと短く記述できる。
抽出カラム名の部分に OVER (PARTITION BY カラム名) でウィンドウ関数。
ウィンドウ関数は、WINDOW xxx AS (PARTITION BY カラム名)とすることで、別名xxxも使用可能。
SQLのカラムに付ける関数に、ROW_NUMBER()、RANK()、DENSE_RANK() 等がある。
外部キー制約
FOREIGN KEY (post_id) REFERENCES posts(id)
ON DELETE CASCADE
ON UPDATE CASCADE
SELECT文とSELECT文をくっつけるのはUNION ALL
SHOW INDEX FROM posts\G 末尾を\Gにすると改行して出力される
◆ 詳解PHP 基礎文法編
詳解PHP 基礎文法編 (全34回) - プログラミングならドットインストール
2020/12/22 - 2020/12/22
#01 - #34
continue ループをスキップ
break ループから抜ける
関数に設定した引数を仮引数、実際に呼び出す時を実引数とよぶ
関数の引数デフォルトは = で指定できる function showAd($message = 'Ad')
ローカルスコープ 関数内で使う変数
グローバルスコープ 関数外で使う変数
関数(function)を変数($x)に入れられる。無名関数、クロージャ。
返り値がない場合は void
関数の型指定は ?int とすることで、null か intとすることが出来る
配列の中身みるとき // var_dump($scores); // print_r($scores);
配列のキー指定
$scores = [
'first' => 90,
'second' => 40,
'third' => 100,
];
配列のキーと値を出力
foreach ($scores as $key => $score) {
echo $key . ' - ' . $score . PHP_EOL;
}
配列に配列を追加
$moreScores = [
55,
72,
'perfect',
[90, 42, 88],
];
$scores = [
90,
40,
...$moreScores,
100,
];
print_r($scores);
echo $scores[5][2] . PHP_EOL;
可変長引数 引数の数を可変にできる
function sum(...$numbers)
{
// return $a + $b + $c;
$total = 0;
foreach ($numbers as $number) {
$total += $number;
}
return $total;
}
echo sum(1, 3, 5) . PHP_EOL;
echo sum(4, 2, 5, 1) . PHP_EOL;
変数内の配列を分割する
list( $x , $y);
◆ 詳解PHP ビルトイン関数編
詳解PHP ビルトイン関数編 (全32回) - プログラミングならドットインストール
2020/12/22 - 2020/12/29
#01 - #32
配列から重複を取り除く array_unique([1, 1, 4, 4, 2]);
マッチした検索結果をすべて取得 preg_match_all($pattern, $input, $matches);
配列の先頭に要素を追加 array_unshift($scores, 10, 20);
配列の末尾に要素を追加 array_push($scores, 60, 70);
配列の一部を切り出し $partial = array_slice($scores, 2, 3);
配列の一部を削除 array_splice($scores, 2, 3);
配列に要素を追加・削除 array_splice($scores, 2, 0, [100, 101]);
配列のソート sort($scores);
配列のシャッフル shuffle($scores);
配列のキーをランダムに取り出す $picked = array_rand($scores, 2); echo $scores[$picked[0]] . PHP_EOL; echo $scores[$picked[1]] . PHP_EOL;
配列に対して一括で変更
$prices = [100, 200, 300];
$newPrices = array_map(
// function ($n) { return $n * 1.1; },
fn($n) => $n * 1.1,
$prices
);
配列からキーの取得 $keys = array_keys($scores);
配列から値の取得 $values = array_values(($scores