Процесс для передачи от проблемы до кода. Как Вы учились?

Проблема в том, что вы используете 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. 

См. здесь для получения информации о статических функциях.

См. здесь , когда вам следует использовать статические функции.

Также, для информации об экспорте по умолчанию, читайте здесь .

8
задан OscarRyz 18 May 2009 в 19:22
поделиться

13 ответов

Я сделал что-то подобное.

  • Выясните правила/логику.
  • Выясните математику.
  • Затем попытайтесь кодировать его.

После выполнения этого в течение нескольких месяцев это просто усвоено. Вы не понимаете свое выполнение его, пока Вы не наталкиваетесь на сложную проблему, которая требует, чтобы Вы сломали его.

3
ответ дан 5 December 2019 в 05:00
поделиться

олдскульное OO путь:

  • запишите описание проблемы и ее решения
  • окружите существительные, это объекты кандидата
  • потяните поля вокруг глаголов, это сообщения кандидата
  • сгруппируйте глаголы с существительными, которые сделали бы действие; перечислите любые другие существительные, которые потребовались бы, чтобы помогать
  • посмотрите, можно ли вновь заявить о решении с помощью формы noun.verb (другие существительные)
  • кодируйте его

[этот метод предшествует картам CRC, но его так долго (более чем 20 лет), что я не помню, где я изучил это]

5
ответ дан 5 December 2019 в 05:00
поделиться

Я иду через подход, на котором делают пробную поездку.

1. Я записываю (на редакторе бумаги или простого текста) список тестов или спецификации, которая удовлетворила бы потребности проблемы.

- 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

2. Ищите объекты, что я думаю, было бы самым легким реализовать и записать тест для него. Например, единственные объекты выглядят легкими

Демонстрационное использование 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));
}

Реализация все еще проходит тест так движение к следующему тесту.

3. Будьте всегда в поисках дублирования и удалите его. Вы сделаны, когда вся тестовая передача и Вы больше не можете думать ни о каком тесте.

Это не гарантирует создание самого эффективного алгоритма, но, пока Вы знаете, что протестировать на, и все это передает, это гарантирует, что Вы получаете правильные ответы.

11
ответ дан 5 December 2019 в 05:00
поделиться

при изучении программирования я не думаю, что TDD полезен. TDD хорош позже, когда у Вас есть некоторое понятие того, о чем программирование, но для начинающих, имея среду, где Вы пишете код и видите, результатами в самом быстром повороте во время является самая важная вещь.

Я пошел бы от проблемного оператора для кодирования немедленно. Взломайте его вокруг. Помогите студенту видеть различные способы составить программное обеспечение / структурирование алгоритмов. Учите студента передумать и переделать код. Попытайтесь учить немного эстетике кода.

После того как они могут бездельничать, код.... затем представляет идею формальной реструктуризации с точки зрения рефакторинга. Затем представьте идею TDD как способ сделать процесс более устойчивым. Но только после того как они чувствуют себя комфортно в управлении кодом, чтобы сделать то, что они хотят. Способность указать тесты затем несколько легче на том этапе. Причина состоит в том, что TDD о Дизайне. При изучении Вы действительно не заботитесь так о дизайне, но о том, что можно сделать, что делают игрушки необходимо играть с, как делают они работают, как делают Вы комбинируете их вместе. После того как у Вас есть смысл этого, затем Вы хотите думать о дизайне, и именно тогда TDD действительно умирает.

Оттуда я начал бы представлять микро шаблоны, ведущие в шаблоны разработки

4
ответ дан 5 December 2019 в 05:00
поделиться

Я запускаю наверху и прокладываю себе путь вниз. В основном я запущу путем записи процедуры высокого уровня, изображу схематически детали в ней и затем начну заполнять детали.

Скажите, что у меня была эта проблема (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))))

Теперь, в Схеме, нет никакой суммы квадратов, квадрата сумм или списка - к функциям. Таким образом, следующий шаг должен был бы создать каждый из тех. В создании каждой из тех функций я могу найти, что должен абстрагировать больше. Я пытаюсь сохранить вещи простыми так, чтобы каждая функция только действительно сделала одну вещь. Когда я создаю некоторую часть функциональности, которая является тестируемой, я пишу модульный тест на нее. Когда я начинаю замечать логическую группировку для некоторых данных и функции, которые действуют на них, я могу продвинуть их в объект.

3
ответ дан 5 December 2019 в 05:00
поделиться

Я наслаждался TDD каждый, так как он был представлен мне. Помогает мне распланировать свой код, и он просто помещает меня непринужденно имеющий весь мой тестовый возврат с "успехом" каждый раз, когда я изменяю свой код, сообщая мне, что я иду домой вовремя сегодня!

3
ответ дан 5 December 2019 в 05:00
поделиться

Принятие желаемого за действительное является, вероятно, самым важным инструментом для решения сложных проблем. Когда в сомнении, предположите, что функция существует для решения проблемы (создайте тупик, сначала). Вы возвратитесь к нему позже для расширения его.

2
ответ дан 5 December 2019 в 05:00
поделиться

Хорошая книга для новичков, ищущих процесс: Разработка через тестирование: Примером

2
ответ дан 5 December 2019 в 05:00
поделиться

У моего папы был набор шаблонов блок-схемы, которые он раньше заставлял меня использовать, когда он сначала учил меня программированию. по сей день я тяну квадраты и ромбы для пристраивания логического процесса того, как проанализировать проблему.

2
ответ дан 5 December 2019 в 05:00
поделиться

Следует иметь в виду, если Вы получаете 5% от затем еще 5% прочь, Вы не получаете 10% от. Скорее Вы платите 95% 95%, которые составляют 90,25% или 9,75% прочь. Так, Вы не должны добавлять процент.

-3
ответ дан 5 December 2019 в 05:00
поделиться

Да.. хорошо TDD не сделал существовал (или не было настолько популярно), когда я начал. Был бы TDD способом пойти для передачи от описания проблемы до кода?... Разве это не немного совершенствуется? Я имею в виду, когда "будущий" разработчик едва понимает, каков язык программирования, разве это не было бы контрпродуктивно?

Что относительно hamcrest делание перехода от алгоритма для кодирования.

1
ответ дан 5 December 2019 в 05:00
поделиться

Я думаю, что существует приблизительно дюжина различной эвристики, о которой я знаю когда дело доходит до программирования и таким образом, я склонен проходить список время от времени с тем, что я пытаюсь сделать. В запуске важно знать то, что является желаемым конечным результатом, и затем попытайтесь работать назад для нахождения его.

Я помню класс Алгоритмов, покрывающий некоторые из этих путей как:

  • Уменьшите его до известной проблемы или тривиальной проблемы
  • Разделите и завоюйте (MergeSort, являющийся классическим примером здесь)
  • Используйте Структуры данных, которые имеют правильные функции (HeapSort, являющийся примером здесь)
  • Рекурсия (Знающий тривиальные решения и способность уменьшить до тех)
  • Динамическое программирование

При организации решения, а также тестировании его на нечетные ситуации, например, если бы кто-то думает, L должен быть числом, то, что я обычно использовал бы для проверения идеи в псевдо коде прежде, чем описать его.

Шаблоны разработки могут быть удобным набором инструментов для использования для конкретных случаев как то, где Адаптер необходим или вещи организации в решение для стратегии или состояние.

2
ответ дан 5 December 2019 в 05:00
поделиться

Я думаю, что есть способ лучше укажите свою проблему.

Вместо того, чтобы определять ее как «систему», определите, что ожидается в терминах пользовательских входов и выходов.

«В окне пользователь должен выбрать элемент из списка и поле должен показать ему, сколько это стоит ».

Затем вы можете дать ему некоторые факторы, определяющие затраты, в том числе образцы предметов и их стоимость в конечном итоге.

(это также в значительной степени TDD- нравится идея)

1
ответ дан 5 December 2019 в 05:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: