TIL019_210411


🍊 感傷的



📙 ホット品脱コード時間3時間
👍🏼 元気回復に努める
👎🏼 精神管理の失敗

🚀 n/a.ターゲット

  • UdemyでJavascriptレッスン(332/682)
  • に参加
  • 提出30日連続達成(5/30、4.11完了)
  • ドリームエンコーディングJavaScript基礎課のアウトライン(6/23)
  • 📣 DREAMコードJavaScript基礎課:5-6


    注記リンク:DREAMエンコーディング

    5. function


    javascript function


    JAvascriptにはクラスが追加されていますが、javaのように純粋なobjcet向けのlaguageではありません
    原型に基づいた偽のオブジェクト向け言語です
    したがってJavaScriptもプログラム言語(プロセス言語)の一つである.
    functionはsub-programとも呼ばれます
    functionはinput(parameter)を受け入れて出力に戻る
  • fundamental building block in the program
  • subprogram can be used multiple times
  • performs a task or calculates a value
  • function declaration


    function name(param1, param2) { body...return; }
    one function === one thing
    naming: doSomething, command, verb
    e.g. createCardAndPoint -> createCard, createPoint
    function is object in JS
    JavaScript関数では、タイプが不明です
    ->数字も文字出力に変換
    ->typescriptを使用してこれらの問題を解決する
    // in javascript
    "use strict";
    function log(message) {
    	console.log(message);
        return 0;
    }
    
    // in typescript - 협업을 쉽게 하고 api 형태로 제공할 때 유용
    function log(message: string): number {
    	console.log(message);
        return 0;
    }

    parameters


    primitive parameter: passed by value
    関数に渡される各パラメータのprimitive typeには、メモリに保存されているため、値が渡されます.
    object parameters : passed by reference
    objecttypeはreferenceがメモリに格納されているためreferenceが渡される
    default parmaters (added in ES6)
    function showMessage(message, from='unknown') {
    	console.log(`${message}, ${from}`);
    }
    rest parameters (added in ES6)
    ... -> restパラメータ、配列形式で渡す
    function printAll(...args) {
    	for (let i = 0; i <args.length; i++) {
        	console.log(args[i]);
    	}
        
        for (const arg of args) {
        	console.log(arg);
    	} //이런 식으로 간단하게 출력할 수 있다
        
        args.forEach(arg) => console.log(arg));
    }
    printAll('dream','coding','ellie');
    関数はobjectの一種です
    関数宣言後の関数名->関数をオブジェクトに変換するため、関数(オブジェクト)のプロパティ値を決定できます.

    local scope


    block scope, global scope
    closer,語彙環境は以下の概念から派生したものである.
    「外では中が見えず、中からしか外が見えない」(着色したガラス窓)
    ブロック内で変数を宣言する場合は、ゾーン変数->内でのみアクセスできます.
    ブロック外ではブロック内に近づくことはできませんが、ブロック内ではブロック外の変数に近づくことができます.

    return


    returnタイプの関数return undefinedがありません.に等しい
    early return, early exit
    ブロックで論理を記述する可読性は劣る(e.g.if,else)
    したがって、条件が一致しない場合、returnを使用して関数をすばやく終了できます.
    必要なすべての論理を実行できるようにコードを記述します.
    //bad
    function upgradeUser(user) {
    	if (user.point > 10) {
        	//long upgrade logic
    	}
    }
    
    //good
    function upgradeUser(user) {
    	if (user.point <= 10) {
        	return;
    	}
        //long upgrade logic
    }

    function expression


    first-class function
    function are treated like any other variable
    can be assigned as a value to variable
    can be passed as an argument to other functions
    can be returned by another function
    function expression
    a function declaration can be called earlier than it tis defined. (hoisted)
    a function expression is created when the execution reaches it.
    anonymous function vs named function
    const print = function () {
    	console.log('print');
    };
    const print = function print() {
    	console.log('print');
    };
    
    print();
    const printAgain = print;
    printAgain();
    const sumAgain = sum;
    console.log(sumAgain(1,3));
    関数を宣言しながら変数にすぐに割り当てることができます.
    named function is better debugging in debugger's stack traces
    再帰:関数内で関数が自分で呼び出されます->プログラムが死亡します(フィボナッチまたは重複する平均値を計算する場合のみ)->続行します.callスタックは満たされます.
    callback function using function expression
    function randomeQuiz(answer, printYes, printNo) {
    	if (answer === 'love you') {
        	printYes();
    	} else {
        	printNo();
    	}
    }

    arrow function


    always anonymous
    const simplePrint = () => console.log('simplePrint');
    const add = (a,b) => a+ b;
    // 블럭 넣어서 처리할 수도 있다 (return 써야 함)
    const add = (a,b) => {
    	return a+ b;
    };    

    IIFE


    immediately invoked function expression
    //함수 호출 기존 방식 
    function hello() {
    	console.log('IIFE');
    }
    hello();
    //IIFE 방식 - 선언과 동시에 호출할 수 있다
    (function hello() {
    	console.log('IIFE');
    })();

    Quiz


    function calculate(command, a, b)
    command: add, substract, divide, multiply, remainder
    calculate(add,2,3)

    6.クラスオブジェクト向け言語


    class vs object
    object-oriendted
    class person{
    	name; //property - 속성(field)
        speak(); //function - 행동(method)
    }    
    property
    ある値が別の値に関連付けられている場合
    文字列.lengthのlengthはpropertyと呼ばれます.