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 333 Точки

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

Имам няколко забележки по 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 333 Точки

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

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 4482 Точки

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

На 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 4482 Точки

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

0
velio84 avatar velio84 241 Точки

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

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

1
AleksandurSeferinkin avatar AleksandurSeferinkin 333 Точки

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

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

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

1
velio84 avatar velio84 241 Точки

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

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.