Есть ли способ пометить метод как ожидающий реализации в Pharo?

#smalltalk #pharo

#smalltalk #pharo

Вопрос:

Просто интересно, можете ли вы пометить метод как ожидающий реализации в pharo, как вы можете сделать в java с помощью «todo»

Мне действительно сложно отслеживать, что завершено в pharo без чего-то подобного

Ответ №1:

Методы, реализация которых все еще находится на рассмотрении, должны отправлять notYetImplemented сообщение следующим образом:

 methodImNotSureHowToImplement
  ^self notYetImplemented
  

если невыполненное сообщение все равно будет отправлено, это будет сигнализировать об NotYetImplemented исключении, которое будет знать селектор-нарушитель, #methodImNotSureHowToImplement в моем примере.

Обратите также внимание, что это упростит поиск всех методов, которые необходимо реализовать в качестве отправителей #notYetImplemented .

Реализация #notYetImplemented проста, благодаря существованию NotYetImplemented .

 notYetImplemented
  "Announce that this message is not yet implemented"
   NotYetImplemented signalFor: thisContext sender selector
  

Обратите также внимание, что NotYetImplemented это один из подклассов SelectorException , который моделирует несколько ситуаций подобного рода:

 SelectorException
  NotYetImplemented
  PrimitiveFailed
  ShouldBeImplemented
  ShouldNotImplement
  SubclassResponsibility
  

Ответ №2:

Я нашел решение для этого самостоятельно через 2 дня после того, как спросил об этом, почти случайно, просто используя опцию контекстного меню jump to test method над методом без какого-либо теста. Pharo автоматически сгенерировал пустой тест с этим:

 self flag: #toImplement.
self assert: false`
  

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

Вторая строка приводит к сбою теста и отображается желтым цветом, что довольно полезно, потому что, если она пуста, она пройдет и будет показана зеленым цветом, что, вероятно, заставляет поверить, что это уже сделано, когда это не так. Аналогичного эффекта можно достичь, просто используя self notYetImplemented

Я бы, вероятно, начал делать что-то подобное со своими неполными методами:

 MyIncompleteMethod

  self flag: #toImplement.  
  self notYetImplemented.`
  

Комментарии:

1. И в Pharo 8 мы интегрируем новый инструмент для просмотра флагов 😉

Ответ №3:

вы также можете использовать pragmas для пометки таких методов

Ответ №4:

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