ドットインストールで学習2

ドットインストールで学習 のメモが文字数が多すぎて保存しきれなかったので、

こちらに残しておく

 

 

 

◆ 詳解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*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は基本は、クラスを作って、

使う時はそれを呼び出してインスタンス化して、

そのインスタンス(元はクラス)の中のメソッドを実行して処理をする

 

 

 

◆◆◆◆ 学習期間 ◆◆◆◆◆

2020/11/07 - 2020/12/31

累計 15日間

学習時間は80時間くらいかな。

39レッスン

 1レッスンあたり20件の動画があるとすると、

 20 × 39 = 780動画

 780 × 3分 = 2340分(39時間)

 

 

 

*1:$scores