Что такое свободный интерфейс? - PullRequest
14 голосов
/ 18 января 2010

Я недавно сталкивался с этим выражением - но чтение в Википедии мне мало что прояснило - до сих пор не понимаю:

  1. Какой смысл в этом
  2. Как это используется на практике (т. Е. Как это приносит пользу программисту в их повседневной работе / строительных системах)?

[Изменить] Пример статьи C ++ из Википедии является слишком длинным и объединяет обсуждение свободного интерфейса с примером простого приложения Glut. Может ли кто-нибудь предоставить пример SUCCINCT C ++ класса, который иллюстрирует свободный интерфейс (как такое влияние отличается от обычного интерфейса C ++, например)?

Ответы [ 4 ]

10 голосов
/ 18 января 2010

Это приносит пользу кодеру, уменьшая количество, которое он должен напечатать (и прочитать).

Чтобы использовать пример C ++ в Википедии:

До:

int main(int argc, char **argv) {
     GlutApp app(argc, argv);
     app.setDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_ALPHA|GLUT_DEPTH); // Set framebuffer params
     app.setWindowSize(500, 500); // Set window params
     app.setWindowPosition(200, 200);
     app.setTitle("My OpenGL/GLUT App");
     app.create();
}

После того, как:

 int main(int argc, char **argv) {
     FluentGlutApp app(argc, argv)
         .withDoubleBuffer().withRGBA().withAlpha().withDepth()
         .at(200, 200).across(500, 500)
         .named("My OpenGL/GLUT App");
     app.create();
 }
8 голосов
/ 18 января 2010

Существуют разные толкования термина «свободный интерфейс».Распространенным способом его создания в C ++ является цепочка методов, которая обычно используется, например, в библиотеке iostream:

Object.MethodA().MethodB();
cout << "a = " << a;

Идиома именованных параметров - еще один хороший пример свободного интерфейса:

Window w = CreateWindow()
               .Width(400)
               .Height(300)
               .OnTop();

Преимущества?Код, который лучше читается и более гибок, хотя, конечно, зависит от реализации.

2 голосов
/ 18 января 2010

Одно большое отличие и преимущество свободного интерфейса в том, что вам не нужна переменная экземпляра для изменения некоторых свойств, когда вы хотите создать объект и использовать его в качестве аргумента:

без

Object object;
object.setcolor("red"); 
object.setstyle("solid");
object.setname("test");
world.CreateNode(object);

с беглым интерфейсом:

world.CreateNode(Object()
                                           .setcolor("red")
                                           .setstyle("solid")
                                           .setname("test")
                             );
0 голосов
/ 11 апреля 2019

CallStream aka "Почему точка?" :)

Ничего плохого в небольшом (очень простом) JavaScript для описания новых и важных концепций. Прекрасно выполнимо и в C ++ .cept

Ключевая концепция: используя идиому функционального программирования, опишите интерфейс. Без использования: аргумент сообщения в виде строки, подлежащей анализу, концепт.

Я думаю, что это в основном связано с шаблоном "Фасад", но да, это связано с "шаблоном Строителя". И, похоже, он тоже пережил «Монады».

Кстати: все приведенные выше адвокаты представили очень хорошие примеры использования.

...