Poznajemy czym jest symbol na przykładzie skryptów w node.js, które pisaliśmy w lekcjach poprzednich. Do dzieła!

Kod z poprzedniej lekcji:

var fs = require('fs'); 
const path = require("path");   

var fpath = path.join(__dirname, 'files', 'lorem.txt');

function isFile(fname){
    if(!fs.existsSync(fpath))
        return false;
    try {
        const stats = fs.statSync(fname);
        return stats.isFile();
      } catch (err) {
        console.error(err);
      }
}

function isDir(fname){
    if(!fs.existsSync(fpath))
        return false;
    try {
        const stats = fs.statSync(fname);
        return stats.isDirectory();
      } catch (err) {
        console.error(err);
      }
}

console.log(isFile(fpath));
//true

console.log(isDir(fpath));
//false

Symbole są łatwiejsze, niż to się wydaje. Oto przykład:

function isFile(fname){
    const funcName = 'isFile';
    if(!fs.existsSync(fpath))
        return false;
    try {
        const stats = fs.statSync(fname);
        return stats[funcName]();
      } catch (err) {
        console.error(err);
      }
}

W isDir tak samo:

function isDir(fname){
    const funcName = 'isDirectory';
    if(!fs.existsSync(fpath))
        return false;
    try {
        const stats = fs.statSync(fname);
        return stats[funcName]();
      } catch (err) {
        console.error(err);
      }
}

Możemy zatem takie coś napisać:

var fs = require('fs'); 
const path = require("path");   

var fpath = path.join(__dirname, 'files', 'lorem.txt');

function isA(fname, funcName){

    if(!fs.existsSync(fpath))
        return false;
    try {
        const stats = fs.statSync(fname);
        return stats[funcName]();
      } catch (err) {
        console.error(err);
      }
}

console.log(isA(fpath, 'isFile'));
//true
console.log(isA(fpath, 'isDirectory'));
//false

Funkcja wywoływana jest dynamicznie…