Perangkat Lunak Penulisan: Pengantar

Artikel ini adalah bagian dari seri Menulis Perangkat Lunak tentang pemrograman fungsional dan berbagai teknik untuk menulis program JavaScript ES6 +, dimulai dengan dasar-dasarnya. Tetap terhubung, banyak hal baru yang akan datang!





Komposisi: "Suatu tindakan yang terdiri dari membuat keseluruhan dari bagian atau elemen."





Dalam pelajaran pemrograman pertama saya di sekolah menengah, saya diberi tahu bahwa pengembangan perangkat lunak adalah "memecah masalah kompleks menjadi bagian-bagiannya, dan kemudian menggabungkan solusi sederhana menjadi solusi kompleks untuk memecahkan masalah asli."





Yang terpenting dalam hidup saya, saya menyesali bahwa saya tidak memahami sepenuhnya pentingnya pelajaran ini sejak awal. Inti dari pengembangan perangkat lunak menjadi jelas bagi saya terlambat.





Saya telah melakukan ratusan wawancara dengan programmer, dan ini memberi saya pemahaman bahwa saya tidak sendiri. Sangat sedikit programmer yang benar-benar memahami esensi dari proses pengembangan perangkat lunak. Mereka tidak mengetahui alat paling penting yang kami miliki, atau mereka tidak tahu cara menggunakannya dengan benar. Tentunya setiap orang kesulitan menjawab satu atau kedua pertanyaan tentang hal terpenting dalam pembangunan:





  • Apakah komposisi fungsional (komposisi fungsi) itu?





  • Apa itu komposisi objek (komposisi objek)?





, , . - . , , , . . . , - , .





. - , . 2013 Toyota  " "  , .. "-" 10000 .





, , , , DDoS ,   .





.





, , . (, , ), , , .





, , .





. :  f



  g



,  (f ∘ g)(x) = f(g(x))



.  



 - . , "  f



  g



  f



  g



  x



". ,  f



  ,  g



 ,  f



   g



.





, , :





const g = n => n + 1;
const f = n => n * 2;
const doStuff = x => {
  const afterG = g(x);
  const afterF = f(afterG);
  return afterF;
};
doStuff(20); // 42
      
      



,  promise



, :





const g = n => n + 1;
const f = n => n * 2;
Promise.resolve(20)
  .then(g)
  .then(f)
  .then(value => console.log(value)); // 42
      
      



, , (map



filter



, etc),  lodash



,  observables



  RxJS



, . - . - . -  this



  .





- .  doStuff()



  :





const g = n => n + 1;
const f = n => n * 2;
const doStuffBetter = x => f(g(x));
doStuffBetter(20); // 42
      
      



, "after g"  trace()



:





const trace = label => value => {
  console.log(`${ label }: ${ value }`);
  return value;
};
      
      



:





const doStuff = x => {
  const afterG = g(x);
  trace('after g')(afterG);
  const afterF = f(afterG);
  trace('after f')(afterF);
  return afterF;
};
doStuff(20); // =>
/*
"after g: 21"
"after f: 42"
*/
      
      



Lodash Ramda , . :





import pipe from 'lodash/fp/flow';
const doStuffBetter = pipe(
  g,
  trace('after g'),
  f,
  trace('after f')
);
doStuffBetter(20); // =>
/*
"after g: 21"
"after f: 42"
*/
      
      



,  pipe



  :





// pipe(...fns: [...Function]) => x => y
const pipe = (...fns) => x => fns.reduce((y, f) => f(y), x);
      
      



, , . . , , . , , . .





pipe()



  , , .  pipe()



 (  compose()



) . () . , , , , . ,  function



  =>



  ( doStuffBetter).





, , .





:





  • . , . , , . 4 7 . 7, . , 3- , . . , , , , , , .





  • -. , " -". , . , . . , , . - , - . , , .





  • . . , . , , , .





" " - , " - . "





" - , . […] ." - Wikipedia





:





const firstName = 'Claude';
const lastName = 'Debussy';
      
      



:





const fullName = {
  firstName,
  lastName
};
      
      



 Array



Set



Map



WeakMap



TypedArray



  . , - .





, " " , "" (Composite), , . , "" . , .





" " : " ", ,   (, , "", "", ""),  ( , , "", , , -   )   ( , , "", , , DOM-  ).





, . " " " ", " " , , .





, , ,  " : " (1989):





, "" .





 " " (1975). , Amazon Ebay, .





. , . " " , , , . - :





  • : ,





  • : - , . , ,





  • : , ,





  • : , , . , .





  • : " - , , . , , " - , " ".





JavaScript ( ). , . (), . , , - .





:





class Foo {
  constructor () {
    this.a = 'a'
  }
}
class Bar extends Foo {
  constructor (options) {
    super(options);
    this.b = 'b'
  }
}
const myBar = new Bar(); // {a: 'a', b: 'b'}
      
      



:





const a = {
  a: 'a'
};
const b = {
  b: 'b'
};
const c = {...a, ...b}; // {a: 'a', b: 'b'}
      
      



. , , :













  1. , .





, , () - () , . , , , .. . Java , Haskell - , .. , , . .





, JavaScipt , .





, , , , . - . JavaScript , , .





, .





, , .





, , , , . .





Sekaranglah waktunya untuk penyederhanaan, dan cara terbaik untuk melakukannya adalah dengan memahami esensinya. Masalahnya, bagaimanapun, adalah hampir tidak ada seorang pun di industri ini yang memahami dasar-dasarnya. Kami, industri, telah mengecewakan Anda sebagai pengembang. Ini adalah tanggung jawab kami sebagai industri untuk mendidik programmer dengan lebih baik. Kita harus memperbaiki diri kita sendiri. Kami perlu lebih bertanggung jawab. Segala sesuatu di sekitar saat ini bergantung pada perangkat lunak, dari ekonomi hingga peralatan medis. Secara harfiah tidak ada tempat dalam kehidupan manusia yang tidak terpengaruh oleh kualitas perangkat lunak. Kami perlu tahu apa yang kami lakukan.





Sekarang saatnya belajar bagaimana mengembangkan perangkat lunak.








All Articles