рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдФрд░ рдЙрдирдХрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧред P1ред рдпреБрдЧрд▓

тАЬрдмреБрд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВред рдЕрдЪреНрдЫреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдФрд░ рдЙрдирдХреЗ рд░рд┐рд╢реНрддреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, тАЬрд▓рд┐рдирд╕ рдЯреЙрд░реНрд╡рд╛рд▓реНрдбреНрд╕, рд▓рд┐рдирдХреНрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ред
рд╣рдо рдПрдХ рд╕реНрд╡рдпрдВрд╕рд┐рджреНрдз рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ рдЬреЛ рдмрд╣реБрдд рдмрд╛рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╕рд╣реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИред рдпрд╣ рд╕реНрд╡рдпрдВрд╕рд┐рджреНрдз рд╕рд╛рдмрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд▓рдВрдмрд╛ рд╕рдордп рд╣реИ рдФрд░ рд▓реЗрдЦ рджреВрд╕рд░реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╣реИред рдЖрдЬ рд╣рдо рдЬреЛрдбрд╝реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред

рдПрдХ рдЬреЛрдбрд╝реА рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдХрд┐рд╕реА рднреА рджреЛ рдбреЗрдЯрд╛ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЙрдиреНрд╣реЗрдВ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрджрд┐ рдХреБрдЫ рдбреЗрдЯрд╛ рддрддреНрд╡ рд╣реИрдВ рдФрд░ bрд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдлрд╝реЙрд░реНрдо рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ b, рддреЛ рд╣рдо рдЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдЬреЛрдбрд╝реЗ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдХрднреА рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рддреЛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред

рдпрд╣рд╛рдБ VUE рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

var vm = new Vue({
  el: '#demo',
  data: {
    firstName: 'Foo',
    lastName: 'Bar'
  },
  computed: {
    fullName: function () {
      return this.firstName + ' ' + this.lastName
    }
  }
})

рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рджреГрд╖реНрдЯрд┐ рд╕реЗ, fullNameрдпрд╣ рдПрдХ рдпреБрдЧрд▓ рд╣реИред рдФрд░ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдРрд╕реЗ рдЕрдирдЧрд┐рдирдд рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдЕрдХреНрд╕рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдХреЗ рд╕рд╛рде рдореЙрдбрд▓ рдХрд░рддреЗ рд╣реИрдВред

рдЖрдк рд╕рд╣реА рд░реВрдк рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рддрддреНрд╡ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рд╕рд╣реА рд╣реЛрдВрдЧреЗред рдпрд╣ рд╣рдореЗрдВ рд╕рдордЧреНрд░ рдбреЗрдЯрд╛ рдХреА рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдореЗрдВ рд▓рд╛рддрд╛ рд╣реИ , рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдпреБрдЧрд▓ рд╣реИ ред рд╣рдо рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд╕рдордЧреНрд░ рдбреЗрдЯрд╛ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗ, рдЕрдм рд╣рдо рдЬреЛрдбрд╝реА рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред

рд╕рд┐рджреНрдзрд╛рдВрдд рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЬреЛрдбрд╝реЗ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреБрдг рд╣реИрдВ:

  • , .. - , , . , ( - . , )
  • . . . , , , , , .

    :

    pair = { a, b }
    

    рдпрджрд┐ рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдореЗрдВ рд╣рдо рдЗрд╕ рд╢реИрд▓реА рдореЗрдВ рд╕реАрдзреЗ рдЬреЛрдбрд╝реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ: pair.aрддреЛ рдЬреЛрдбрд╝реА рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рд╣рдо рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ рдЬрд╣рд╛рдВ рдЬреЛрдбрд╝реА рдХреЛ рдХреЙрд▓ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдорд╣рд╛рди рдирд╣реАрдВ рд╣реИ!

    рдПрдХ рдпреБрдЧрд▓ рдПрдХ рдЕрдореВрд░реНрдд (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдирд┐рдореНрди рд╕реНрддрд░) рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдХрд╛рдо рдХрд░рдирд╛ рдЧрд▓рдд рд╣реЛрдЧрд╛ред рдХрд┐рд╕реА рднреА рдПрдмреНрд╕рдЯреНрд░реИрдХреНрд╢рди рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдПрдмреНрд╕рдЯреНрд░реИрдХреНрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдХреЛрдб рдЕрд░рд╛рдЬрдХрддрд╛ рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ (рдпрд╣ рдкрдврд╝рдирд╛ рдХрдард┐рди рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЧрд▓рддреА рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмрджрд▓рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдХреЗ рд╡рд┐рднрд┐рдиреНрди рднрд╛рдЧреЛрдВ рдореЗрдВ рдПрдХ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛ рд╣реЛрдЧрд╛)ред


рдЬреЛрдбрд╝реЗ рдХреЛ рдмрд╣реБрдд рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ, рдЗрд╕ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЕрд╡рд╕рд░ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдордирдорд╛рдиреЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬреЛрдбрд╝реА рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

//       
//      
const pair = (first, second) => (elementType) => {
  switch(elementType) {
    case 'first':
     return first;
   case 'second':
     return second;
  }
};
//    ,      ,
//    
const getFirstElement = (pair) => (pair('first'));
const getSecondElement = (pair) => (pair('second'));

рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЗрд╕ рддрд░реАрдХреЗ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрди рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХрд╛ рддрд░реАрдХрд╛ рдерд╛, рдЬрд┐рдиреНрд╣реЗрдВ рдХрднреА C / C ++ рд╕реЗ рдкрд╣рд▓реЗ OOP рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред

рдХреНрдпрд╛ рд╣рдореЗрдВ рдбрд┐рдЬрд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ switch ? рдмреЗрд╢рдХ, рдЬрд░реВрд░реА рдирд╣реАрдВред рдпреЗ рддрдХрдиреАрдХреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рд╡рд░рдг рд╣реИрдВ, рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ!

рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпреБрдЧрд▓ рдХреЛ рдкрд░рд╕реНрдкрд░ рдорд┐рд▓рд╛рдирд╛ рд╣реИ

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдореИрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

//     
//  ,       
const pair = (first, second) => (
  new Map([
    ['first', first],
    ['second', second],
  ])
);
//    
const getFirst = (pair) => (pair.get('first'));
const getSecond = (pair) => (pair.get('second'));

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрд╕рд╛рдиреА рд╕реЗ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рджреВрд╕рд░реЗ! рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ред рдпрд╣ рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдн рд╣реИред рд╣рдо рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЕрдореВрд░реНрддрддрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдЕрдореВрд░реНрдд рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдкрддрд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рд╣рдо рдЗрди рдЕрдореВрд░реНрддрддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЙрди рдХреЛрдбреЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдЗрди рд╕рд╛рд░ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдкреИрд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИ рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдмреЛрдирд╕ рдмрдврд╝рд╛рддрд╛ рд╣реИред

рд╡реИрд╕реЗ, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо js рдореЗрдВ Mapov рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

//       
//   
const pair = (first, second) => (
  Object.freeze({
    'first': first,
    'second': second,
  })
);
//    ,       
const getFirst = (pair) => (pair.first);
const getSecond = (pair) => (pair.second);

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рджреЛрдиреЛрдВ рдкрд┐рдЫрд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЛ рдПрдХ рддрд┐рд╣рд╛рдИ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ ( рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреБрдЫ рдЕрдВрддрд░ рд╣реИред рдорд╛рдирдЪрд┐рддреНрд░ рд╕реАрдзреЗ рдЧреБрдгреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдлреЗрдВрдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ "рдЬрдореЗ рд╣реБрдП рдСрдмреНрдЬреЗрдХреНрдЯ" рдлреЗрдВрдХрддреЗ рд╣реИрдВ TypeError: Cannot assign to read only propertyред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ) рдорд╣рддреНрд╡рдкреВрд░реНрдгред )ред

рд╣рдореЗрдВ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?


рдпрджрд┐ рд╣рдо рдПрдХ рдкрдХреНрд╖реА рдХреА рдирдЬрд╝рд░ рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдХрд╛рдо рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд╣ рдЙрд╕реА рдореЗрдВ рд▓рдЧрд╛ рд╣реБрдЖ рд╣реИред рдЬреЛ рдХреБрдЫ рдбреЗрдЯрд╛ рд╕реЗрдЯреЛрдВ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдг рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдЯреЛрд░реЗрдЬ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛ рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдЕрд░рд╛рдЬрдХ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╕рдордЭрдирд╛ рд╣рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рдЪреБрдирддрд╛ рд╣реИред

рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг

рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ : тАЬрднрд┐рдиреНрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдЕрдВрд╢реЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдиред 1/2 рдХреЗ рд░реВрдк рдореЗрдВред рдмреБрдирд┐рдпрд╛рджреА рд╕рдВрдЪрд╛рд▓рди (рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдШрдЯрд╛рд╡, рдЧреБрдгрд╛, рднрд╛рдЧ) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред тАЭ

рдЖрдЗрдП рд╕рдорд╕реНрдпрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рд╕рдордЭреЗрдВ! рд╣рдореЗрдВ рдХреБрдЫ рдЧрдгрд┐рддреАрдп рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдЕрдореВрд░реНрддрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореВрд▓ рд╕реНрд░реЛрдд рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ ред рдмреЗрд╢рдХ, рдЕрдЧрд░ рдЕрдиреБрднрд╡реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЗрд╕ рдкрд╛рда рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЧрдгрд┐рдд рдореЗрдВ рдЕрдВрд╢реЛрдВ рдкрд░ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдХреЛрдб рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдХреА рддреБрд░рдВрдд рдХрд▓реНрдкрдирд╛ рдХреА рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рд╣рдо рдорд╛рди рд▓реЗрдВрдЧреЗред рд╣рдо рдмреЗрд╣рд┐рдЪрдХ рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рднрд┐рдиреНрди рдХрд╛рд░реНрдп рдФрд░ рддрд░реНрдХ рдХреЗ рдкреВрд░реЗ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕рд╛рдордЧреНрд░реА рд╣рдореЗрдВ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдЕрдВрд╢ рд╕рд╛рдорд╛рдиреНрдп (1/4) рдФрд░ рджрд╢рдорд▓рд╡ (0.1) рд╣реИрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╕рдорд╕реНрдпрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ, рд╣рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╕реНрддреБрддрд┐ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рднрд┐рдиреНрдирддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╣рдо рдпрд╣ рднреА рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╕рд╛рдзрд╛рд░рдг рдЕрдВрд╢ рджреЛ рдХрд╛ рддрд╛рд░реНрдХрд┐рдХ рдорд┐рд▓рди рд╣реИрд╕рдВрдЦреНрдпрд╛ (рдЕрдВрд╢ рдФрд░ рд╣рд░), рдпрд╣ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЬреЛрдбрд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдХреНрдХрд╛ рд╕рдВрдХреЗрдд рд╣реИред

рдХреЛрдб рдореЗрдВ, рд╣рдо рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

//        ,
//  ,    
//          ,
//     
const makeRational = (num, denom) => (
  new Map([
    ['num', num],
    ['denom', denom],
  ])
);

//  ,    
//   ,      ,    
//    
const getNumer = (rat) => (rat.get('num'));
const getDenom = (rat) => (rat.get('denom'));

рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдРрд╕реА рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдВрд╢реЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП 8/4, 6/9ред рдХрд╛рд░реНрдп рдХреА рд╕реНрдерд┐рддрд┐ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рддреА рд╣реИред рдПрдХ рдЕрдВрд╢ рдХреЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рд╕реЗ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рд╕рд╛рдорд╛рдиреНрдп рднрд╛рдЬрдХ (GCD) рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рдо GCD рджреЛ рдирдВрдмрд░реЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:

//Gcd     
const getGcd = (a, b) => ((a % b) ? getGcd(b, a % b) : Math.abs(b));

рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд╛рда рдЖрдкрдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ ред

рдЕрдВрд╢ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдЕрдВрд╢ рдФрд░ рднрд╛рдЬрдХ рдХреЛ GCD рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

const normalize = (n1, n2) => {
  const commonDivisor = getGcd(n1, n2);
  return [n1 / commonDivisor, n2 / commonDivisor];
};

рдЕрдВрд╢ рдмрдирд╛рддреЗ рд╕рдордп рдбреЗрдЯрд╛ рдХреЛ рд╣рдореЗрд╢рд╛ рд╕рд╛рдорд╛рдиреНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдХреЗрд╢рдирд▓ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ред

const makeRational = (num, denom) => {
  const [normalizeNum, normalizeDenom] = normalize(num, denom);
  return new Map([
    ['num', normalizeNum],
    ['denom', normalizeDenom],
  ]);
};

рдЕрдЧрд▓рд╛, рд╣рдо рд╕рдВрдЪрд╛рд▓рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред

1)

рдЬреЛрдбрд╝ рджреЛ рд╕рд╛рдзрд╛рд░рдг рдЕрдВрд╢реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЖрдо рднрд╛рдЬрдХ рдореЗрдВ рд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдлрд┐рд░ рдиреНрдпреВрдореЗрд░рд┐рдЯрд░реНрд╕ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рднрд╛рдЬрдХ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЫреЛрдбрд╝ рджреЗрдВред

//..       ,
//       ,
//         
const add = (rat1, rat2) => (
  makeRational(
    getNumer(rat1) * getDenom(rat2) + getNumer(rat2) * getDenom(rat1),
    getDenom(rat1) * getDenom(rat2),
  ));

2) рдШрдЯрд╛рд╡

рднрд┐рдиреНрдиреЛрдВ рдХреЗ рдЕрдВрддрд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рднреА рдПрдХ рдЖрдо рднрд╛рдЬрдХ рдореЗрдВ рдХрдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рдЕрдВрд╢реЛрдВ рдХреЛ рдШрдЯрд╛рддреЗ рд╣реИрдВ, рднрд╛рдЬрдХ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

//    
//     
const sub = (rat1, rat2) => (
  makeRational(
    getNumer(rat1) * getDenom(rat2) - getNumer(rat2) * getDenom(rat1),
    getDenom(rat1) * getDenom(rat2),
  ));

3) рдЧреБрдгрди

рджреЛ рд╕рд╛рдзрд╛рд░рдг рдЕрдВрд╢реЛрдВ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдирдХреЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдФрд░ рднрд╛рдЬрдХ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

const multi = (rat1, rat2) => (
  makeRational(
    getNumer(rat1) * getNumer(rat2),
    getDenom(rat1) * getDenom(rat2),
  ));


4)

рд╡рд┐рднрд╛рдЬрди рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЕрдВрд╢ рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЕрдВрд╢ рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рднрд┐рдиреНрди рд╡реНрдпреБрддреНрдХреНрд░рдо рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡реНрдпреБрддреНрдХреНрд░рдо рдХреЛ рдПрдХ рдЕрдВрд╢ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрдВрд╢ рдореВрд▓ рдХреЗ рд╣рд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рднрд╛рдЬрдХ рдореВрд▓ рдХрд╛ рдЕрдВрд╢ рд╣реЛрддрд╛ рд╣реИред

const div = (rat1, rat2) => (
  makeRational(
    getNumer(rat1) * getDenom(rat2),
    getDenom(rat1) * getNumer(rat2),
  ));

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрд╢рди рдореЗрдВ рд╣рдо рдПрдХ рдирдИ рдЗрдХрд╛рдИ рдмрдирд╛рддреЗ рд╣реИрдВред рдпрд╣ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдирд┐рдпрдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЧрдгрд┐рдд рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдореВрд▓ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВ, рдФрд░ рдирдпрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ 1 + 2 = 3:ред

рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрд┐ рд╣рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди makeRationalрдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ , рд▓реЗрдХрд┐рди рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдиреЗрдВрдЧреЗ рдФрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ рдХрд┐ рд╣рдордиреЗ рдПрдмреНрд╕рдЯреНрд░реИрдХреНрд╢рди рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛, рдФрд░ рд╕реАрдзреЗ рдирд╣реАрдВред

рдпрд╣ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВред

const ratToString = (rat) => `${getNumer(rat)}/${getDenom(rat)}`;

рдореИрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рд╕реВрдЪреА рд╕рдВрд▓рдЧреНрди рдХрд░реВрдВрдЧрд╛:

describe('normalize', () => {
  test('should work', () => {
    expect(normalize(21, 6)).toEqual([7, 2]);
    expect(normalize(2, 3)).toEqual([2, 3]);
  });
});


describe('rational', () => {
  test('getters', () => {
    const rat1 = makeRational(3, 9);
    expect(getNumer(rat1)).toBe(1);
    expect(getDenom(rat1)).toBe(3);

    const rat3 = makeRational(-4, 16);
    expect(getNumer(rat3)).toBe(-1);
    expect(getDenom(rat3)).toBe(4);
  });

  test('add&sub', () => {
    const rat1 = makeRational(3, 9);
    const rat2 = makeRational(10, 3);
    expect(add(rat1, rat2)).toEqual(makeRational(11, 3));
    expect(sub(rat1, rat2)).toEqual(makeRational(-3, 1));

    const rat4 = makeRational(12, 5);
    const rat3 = makeRational(-4, 16);
    expect(add(rat3, rat4)).toEqual(makeRational(43, 20));
    expect(sub(rat3, rat4)).toEqual(makeRational(-53, 20));

    const rat5 = makeRational(1, 15);
    const rat6 = makeRational(4, 25);
    expect(add(rat5, rat6)).toEqual(makeRational(17, 75));
    expect(sub(rat5, rat6)).toEqual(makeRational(-7, 75));
  });

  test('multi&div', () => {
    const rat1 = makeRational(1, 2);
    const rat2 = makeRational(2, 3);
    expect(multi(rat1, rat2)).toEqual(makeRational(2, 6));

    const rat3 = makeRational(1, 3);
    const rat4 = makeRational(1, 2);
    expect(div(rat3, rat4)).toEqual(makeRational(2, 3));
  });

  test('ratToString', () => {
    const rat1 = makeRational(3, 9);
    const rat3 = makeRational(-4, 16);
    expect(ratToString(rat1)).toBe('1/3');
    expect(ratToString(rat3)).toBe('-1/4');
  });
});

рдирд┐рд╖реНрдХрд░реНрд╖


рдкрд╛рда рдХрд╛рдлреА рдмрдбрд╝рд╛ рдирд┐рдХрд▓рд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ:

  1. рдЬрдм рднреА рд╣рдореЗрдВ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдЕрд╕рдВрдмрдВрдзрд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╣рдо рднрд╛рдк рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
  2. рджрдВрдкрддрд┐ рдХреЛ рдЗрдореНрдпреВрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
  3. рдпреБрдЧрд▓ рдХреЛ рдЕрдкрдиреЗ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛

рдореИрдВ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдорд╛рдлреА рдорд╛рдБрдЧрддрд╛ рд╣реВрдБ рдЕрдЧрд░ рд▓реЗрдЦ рдХрд┐рд╕реА рдХреЛ рдЕрддрд┐рднрд╛рд░рд┐рдд рд▓рдЧрддрд╛ рдерд╛ред рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рддрд░реНрдХ рдХрд╛ рддрд░реНрдХ рдФрд░ рдЗрд╕ рдпрд╛ рдЙрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдмреЗрд╣рдж рд╕реНрдкрд╖реНрдЯ рд╣реИред

рдпрджрд┐ рд▓реЗрдЦ рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рд░реВрдЪрд┐ рдХрд╛ рд╣реИред рдлрд┐рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рджрд┐рд╢рд╛ рдЬрд╛рд░реА рд░рд╣реЗрдЧреАред рдЕрдЧрд▓рд╛ рд╡рд┐рд╖рдп рд╕рдВрдмрдВрдзрд┐рдд рд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛ рд╣реИред

All Articles