Професионална програма
Loading...
+ Нов въпрос
veselinsavov avatar veselinsavov 219 Точки

[Homework] Advanced JS - Simulating OOP in JavaScript

 Здравейте Колеги, 

Видях, че някои колеги се задтрудняват с домашините от този курс. Надявам се домашното ми да е полезно на някой и да не преписвате много :d. Също ще е добре, ако има препоръки и всякакви критики към домашното :)

Problem_01_BugFix

Problem_02_BugFixLevel2

Problem_03_ArrayFlattening

Problem_04_UsefulStringMethods

Problem_05_Vector

 

Тагове:
9
JavaScript Advanced 09/03/2015 16:29:28
macry avatar macry 10 Точки

Браво колега, много ми харесва как си го направил с тернарните оператори!

0
a_rusenov avatar a_rusenov 1103 Точки

return stringCut === substring;

Още по-елеганто: ? true : false не трябват, понеже stringCut === substring сам по себе си е булев израз и се evaluate-ва до true или false.

2
09/03/2015 16:25:29
infreezer avatar infreezer 15 Точки

А така, благодаря.

0
AleksandurSeferinkin avatar AleksandurSeferinkin 335 Точки

Здравей, колега! Моите решения можете да ги видите тук.

Имам няколко забележки по 4-та задача. В условието ни беше казано да се постараем да оптимизираме кодът максимално, а ти си се постарал да го де-оптимизираш максимално. :D

В javascript има една простотия - length пропъртито на масивите не е статично и извикването му е бавна операция - факт. Винаги е желателно да извикваме това пропърти само веднъж или да го запазим в променлива.

Във всички програмни езици извикването на функция е бавна операция. В случая isString и isNumber са много малки проверки и е напълно излишно да ги изкарваш в отделни функции.

Специално за функциите startsWith и endsWith - Логиката ти е с 2 цикъла, а може да се напише само с един. Също така тези цикли циклят докрай, а може да се направи така че при първото разминаване да прекъсват и да се връща "false".

3
VenelinGrozev avatar VenelinGrozev 130 Точки

Здрасти,

Каква е идеята да ползваш __defineG(S)etter__()? Доколкото четох вече са deprecated и на тяхно място се ползва следният синтаксис

get fullName() {

    return this.firstName + ' ' + this.lastName;

}

1
AleksandurSeferinkin avatar AleksandurSeferinkin 335 Точки

Пил съм повече бира и не съм обърнал внимание на съобщенията най-отгоре. Мерси за забележката! :)

EDIT: фикснах го

1
09/03/2015 17:51:39
veselinsavov avatar veselinsavov 219 Точки

Благодаря колега, по- късно ще ги оправя  :)

1
dim4o avatar dim4o 288 Точки

Трета задача Array Flattening може да се реши лесно и без рекурсия:

Array.prototype.flatten = function flattenArray(array) {
    var result = '[' + JSON.stringify(this).replace(/\[/g, '').replace(/\]/g, '') + ']';
    result = JSON.parse(result);
    return result;
};

Иначе относно тернарните оператори - мисля, че са по-бавни от if-else и заемат повече памет.

ПП: Май по-скоро се оказа, че разликата е незначителна и много зависи от езика.

3
09/03/2015 22:22:24
veselinsavov avatar veselinsavov 219 Точки

dim4o, готино решение за конкретния случай, но ако има стринг "[pesho]" това решение не ти върши работа. Иначе за операторите не знам кой по- бърз, но според мен if..else.. е по- четимо :)

1
dim4o avatar dim4o 288 Точки

Да, прав си. Ще се пробвам да го направя да работи с "[pesho]" с допълнителен регекс, а ако стане преклено сложно ще го направя и аз с рекурсия. Благодаря за забележката. Винаги има полза от споделянето на опит.

2
velio84 avatar velio84 241 Точки

Добре, че има колеги които са по-напред с JavaScript и споделят решения :)

На мен поне за тоя курс, разглеждането на решения на задачи на други хора ми е основния метод за учене - ако трябваше да разчитам на лекциите и примерите давани там, досега да съм се метнал от терасата laughing

 

3
11/03/2015 11:36:59
Filkolev avatar Filkolev 4485 Точки

Ето и моите решения: Линк.

На 2-ра доста се мотах докато зацепя къде бъркам с пропъртитата; един поглед към решението на AleksandurSeferinkin и я оправих :)

2
a.polyanska avatar a.polyanska 107 Точки

Вярно ли се ориентирам, че част от дадените примерни аутпути на Useful String Methods са грешни? Става дума за изходите при padLeft, padRight и последната комбинация.

0
VenelinGrozev avatar VenelinGrozev 130 Точки

Вярно е, да.

Няма как при команда console.log("*".repeat(5).padLeft(10, "-").padRight(15, "+")); оутпута да е

"-----*****+++++" .

1
Filkolev avatar Filkolev 4485 Точки

Аз не видях грешки в примерите. Идеята е както в C# работи падването - ако кажеш 15 символа, то ще ти падне стринга с колкото символи е необходимо, за да стане общата му дължина 15.

0
velio84 avatar velio84 241 Точки

Аз доколкто разбирам условието, идеята не е да се направи нов стринг с дължина count, а count пъти стринга да се измеси наляво/надясно със знака във втория аргумент (или интервал по default)

В момента и аз тая задача пиша... :)

1
AleksandurSeferinkin avatar AleksandurSeferinkin 335 Точки

Колега, няма смисъл да проверяваш boolean израз, за да изкараш резултата от него.

  1. if (!(stringToCompare == stringValue)) {
  2.         stringStartsWith = false;
  3. }

Не е ли по-добре да напишеш просто "stringStartsWith = (stringToCompare == stringValue);" ?

1
velio84 avatar velio84 241 Точки

Благодаря за забележката - по-добре е и ще го преправя :)

1