Проблема в том, что вы используете Math.sum(x,y)
в качестве статической функции вместо ссылки на объект.
Вы можете изменить свою функцию на:
static sum(a, b){
return a + b;
}
Ссылки на объекты требуют, чтобы вы передавали переменные конструктору или динамически присваивали их через функцию.
let x, y;
class Math {
//The constructor has optional parameters which default to 0.
constructor(first=0, second=0){
this.x = first;
this.y = second;
}
//Makes a sum with the variables passed through the constructor.
sum(){
return x+y;
}
//sets the x value
changeX(num){ x = num; }
//returns the x value
getX(){ return x; }
//This function saves it to the object beforehand so you may retrieve it later.
sumSaved(first, second){
this.x = first;
this.y = second;
return x + y;
}
//Assigned through the constructor.
let foo = new Math(first:1,second:2);
foo.sum(); //returns 3 because 1+2=3
foo.changeX(2);
foo.sum(); //returns 4 because 2+2=4
//Assigned through a function.
let bar = new Math();
bar.sumSaved(4,6); //returns 10 and overwrites variables.
bar.getX(); //returns 4, because you saved it earlier.
См. здесь для получения информации о статических функциях.
См. здесь , когда вам следует использовать статические функции.
Также, для информации об экспорте по умолчанию, читайте здесь .
Я сделал что-то подобное.
После выполнения этого в течение нескольких месяцев это просто усвоено. Вы не понимаете свое выполнение его, пока Вы не наталкиваетесь на сложную проблему, которая требует, чтобы Вы сломали его.
олдскульное OO путь:
[этот метод предшествует картам CRC, но его так долго (более чем 20 лет), что я не помню, где я изучил это]
Я иду через подход, на котором делают пробную поездку.
- simple calculations (no discounts and concessions) with:
- single item
- two items
- maximum number of items that doesn't have a discount
- calculate for discounts based on number of items
- buying 10 items gives you a 5% discount
- buying 15 items gives you a 7% discount
- etc.
- calculate based on hourly rates
- calculate morning rates
- calculate afternoon rates
- calculate evening rates
- calculate midnight rates
- calculate based on buyer's age
- children
- adults
- seniors
- calculate based on combinations
- buying 10 items in the afternoon
Демонстрационное использование Nunit и C#.
[Test] public void SingleItems()
{
Assert.AreEqual(5, GetPrice(5, 1));
}
Реализация, что использование:
public decimal GetPrice(decimal amount, int quantity)
{
return amount * quantity; // easy!
}
Затем движение к этим двум объектам.
[Test]
public void TwoItemsItems()
{
Assert.AreEqual(10, GetPrice(5, 2));
}
Реализация все еще проходит тест так движение к следующему тесту.
Это не гарантирует создание самого эффективного алгоритма, но, пока Вы знаете, что протестировать на, и все это передает, это гарантирует, что Вы получаете правильные ответы.
при изучении программирования я не думаю, что TDD полезен. TDD хорош позже, когда у Вас есть некоторое понятие того, о чем программирование, но для начинающих, имея среду, где Вы пишете код и видите, результатами в самом быстром повороте во время является самая важная вещь.
Я пошел бы от проблемного оператора для кодирования немедленно. Взломайте его вокруг. Помогите студенту видеть различные способы составить программное обеспечение / структурирование алгоритмов. Учите студента передумать и переделать код. Попытайтесь учить немного эстетике кода.
После того как они могут бездельничать, код.... затем представляет идею формальной реструктуризации с точки зрения рефакторинга. Затем представьте идею TDD как способ сделать процесс более устойчивым. Но только после того как они чувствуют себя комфортно в управлении кодом, чтобы сделать то, что они хотят. Способность указать тесты затем несколько легче на том этапе. Причина состоит в том, что TDD о Дизайне. При изучении Вы действительно не заботитесь так о дизайне, но о том, что можно сделать, что делают игрушки необходимо играть с, как делают они работают, как делают Вы комбинируете их вместе. После того как у Вас есть смысл этого, затем Вы хотите думать о дизайне, и именно тогда TDD действительно умирает.
Оттуда я начал бы представлять микро шаблоны, ведущие в шаблоны разработки
Я запускаю наверху и прокладываю себе путь вниз. В основном я запущу путем записи процедуры высокого уровня, изображу схематически детали в ней и затем начну заполнять детали.
Скажите, что у меня была эта проблема (yoinked от Эйлера проекта)
Сумма квадратов первых десяти натуральных чисел, 1^2 + 2^2 +... + 10^2 = 385
Квадрат суммы первых десяти натуральных чисел, (1 + 2 +... + 10) ^2 = 55^2 = 3025
Следовательно различие между суммой квадратов первых десяти натуральных чисел и квадратом суммы 3025 385 = 2640.
Найдите различие между суммой квадратов первых ста натуральных чисел и квадратом суммы.
Таким образом, я запускаю как это:
(display (- (sum-of-squares (list-to 10))
(square-of-sums (list-to 10))))
Теперь, в Схеме, нет никакой суммы квадратов, квадрата сумм или списка - к функциям. Таким образом, следующий шаг должен был бы создать каждый из тех. В создании каждой из тех функций я могу найти, что должен абстрагировать больше. Я пытаюсь сохранить вещи простыми так, чтобы каждая функция только действительно сделала одну вещь. Когда я создаю некоторую часть функциональности, которая является тестируемой, я пишу модульный тест на нее. Когда я начинаю замечать логическую группировку для некоторых данных и функции, которые действуют на них, я могу продвинуть их в объект.
Я наслаждался TDD каждый, так как он был представлен мне. Помогает мне распланировать свой код, и он просто помещает меня непринужденно имеющий весь мой тестовый возврат с "успехом" каждый раз, когда я изменяю свой код, сообщая мне, что я иду домой вовремя сегодня!
Принятие желаемого за действительное является, вероятно, самым важным инструментом для решения сложных проблем. Когда в сомнении, предположите, что функция существует для решения проблемы (создайте тупик, сначала). Вы возвратитесь к нему позже для расширения его.
Хорошая книга для новичков, ищущих процесс: Разработка через тестирование: Примером
У моего папы был набор шаблонов блок-схемы, которые он раньше заставлял меня использовать, когда он сначала учил меня программированию. по сей день я тяну квадраты и ромбы для пристраивания логического процесса того, как проанализировать проблему.
Следует иметь в виду, если Вы получаете 5% от затем еще 5% прочь, Вы не получаете 10% от. Скорее Вы платите 95% 95%, которые составляют 90,25% или 9,75% прочь. Так, Вы не должны добавлять процент.
Да.. хорошо TDD не сделал существовал (или не было настолько популярно), когда я начал. Был бы TDD способом пойти для передачи от описания проблемы до кода?... Разве это не немного совершенствуется? Я имею в виду, когда "будущий" разработчик едва понимает, каков язык программирования, разве это не было бы контрпродуктивно?
Что относительно hamcrest делание перехода от алгоритма для кодирования.
Я думаю, что существует приблизительно дюжина различной эвристики, о которой я знаю когда дело доходит до программирования и таким образом, я склонен проходить список время от времени с тем, что я пытаюсь сделать. В запуске важно знать то, что является желаемым конечным результатом, и затем попытайтесь работать назад для нахождения его.
Я помню класс Алгоритмов, покрывающий некоторые из этих путей как:
При организации решения, а также тестировании его на нечетные ситуации, например, если бы кто-то думает, L должен быть числом, то, что я обычно использовал бы для проверения идеи в псевдо коде прежде, чем описать его.
Шаблоны разработки могут быть удобным набором инструментов для использования для конкретных случаев как то, где Адаптер необходим или вещи организации в решение для стратегии или состояние.
Я думаю, что есть способ лучше укажите свою проблему.
Вместо того, чтобы определять ее как «систему», определите, что ожидается в терминах пользовательских входов и выходов.
«В окне пользователь должен выбрать элемент из списка и поле должен показать ему, сколько это стоит ».
Затем вы можете дать ему некоторые факторы, определяющие затраты, в том числе образцы предметов и их стоимость в конечном итоге.
(это также в значительной степени TDD- нравится идея)