Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:jimp2:2017:labs:klasy1 [2017/07/17 10:08] 127.0.0.1 edycja zewnętrzna |
pl:dydaktyka:jimp2:2017:labs:klasy1 [2018/03/21 15:24] mwp modyfikacja ćwiczenia z Name |
| |
<code cpp> | <code cpp> |
std::experimental::optional<std::string> MaybeString(bool create) { | #include <string> |
| #include <experimental/optional> |
| |
| using ::std::experimental::optional; |
| using ::std::experimental::make_optional; |
| using ::std::string; |
| using ::std::cout; |
| using ::std::endl; |
| |
| optional<string> MaybeString(bool create) { |
if (create) { | if (create) { |
return std::experimental::make_optional("CREATED"); | return make_optional("CREATED"); |
} else { | } else { |
return {}; | return {}; |
* Importy: <code cpp>#include <string> | * Importy: <code cpp>#include <string> |
#include <cstdint></code> | #include <cstdint></code> |
- [2 plusy] Napisz klasę wartości Name, pozwalającą przechowywać pełne imię (imiona) i nazwisko osoby. Udostępniającą następujące akcesory (nie każda osoba musi mieć drugie imię a tym bardziej trzecie, konstruktor powinien być w stanie sparsować pełną nazwę w postaci pojedynczego łańcucha znaków, jak i podanie osobno pierwszego imienia i nazwiska): | - [2 plusy] Napisz klasę wartości Name, pozwalającą przechowywać pełne imię (imiona) i nazwisko osoby. Udostępniającą następujące akcesory (nie każda osoba musi mieć drugie imię a tym bardziej trzecie, konstruktor powinien być w stanie sparsować pełną nazwę w postaci pojedynczego łańcucha znaków): |
* FirstName (Thomas) | * FirstName (Thomas) |
* SecondName (Jorge) | * SecondName (Jorge) |
* IsBeforeBySurname - metody porównują słownikowo czy nazwisko jest przed podanym jako argument | * IsBeforeBySurname - metody porównują słownikowo czy nazwisko jest przed podanym jako argument |
* IsBeforeByFirstName | * IsBeforeByFirstName |
| * Kod: <code cpp>#include <string> |
| #include <experimental/optional> |
| |
| namespace model { |
| |
| using ::std::string; |
| using ::std::stringstream; |
| using ::std::experimental::optional; |
| |
| class Name { |
| public: |
| explicit Name(const string &first_names_surname); |
| |
| string FirstName() const; |
| optional<string> SecondName() const; |
| optional<string> ThirdName() const; |
| string Surname() const; |
| string ToFullInitials() const; |
| string ToFirstNamesInitials() const; |
| string ToSurnameNames() const; |
| string ToNamesSurname() const; |
| bool IsBeforeBySurname(const Name &other) const; |
| bool IsBeforeByFirstName(const Name &other) const; |
| |
| private: |
| string first_name_; |
| string second_name_; |
| |
| string third_name_; |
| string last_name_; |
| }; |
| } |
| </code> |
- **[3 punkty + 1 punkt za zaliczenie testu Injection] Szablony to bardzo popularny sposób tworzenia dynamicznych stron Internetowych w różnych frameworkach takich jak Spring, Django, czy Rails itp... Istnieje wiele bibliotek wspierających renderowanie stron www na podstawie szablonów np. [[https://github.com/no1msd/mstch|mustache]]. Napisz silnik wspierający tworzenie tekstów na podstawie szablonu. Projekt ma się składać z pojedynczej klasy View, która jest w stanie przyjąć w konstruktorze szablon, a następnie wyrenderować go. Przy tej implementacji w szablonie można umieścić specjalne pola pomiędzy podwójnymi nawiasami klamrowymi z nazwą, które zostaną podmienione w trakcie rednerowania. Np. w wyniku wykonania kodu nastąpi podmienienie tekstu %%{{%%name%%}}%% na Xavier: **<code cpp>View view{"Hello {{name}}!"}; | - **[3 punkty + 1 punkt za zaliczenie testu Injection] Szablony to bardzo popularny sposób tworzenia dynamicznych stron Internetowych w różnych frameworkach takich jak Spring, Django, czy Rails itp... Istnieje wiele bibliotek wspierających renderowanie stron www na podstawie szablonów np. [[https://github.com/no1msd/mstch|mustache]]. Napisz silnik wspierający tworzenie tekstów na podstawie szablonu. Projekt ma się składać z pojedynczej klasy View, która jest w stanie przyjąć w konstruktorze szablon, a następnie wyrenderować go. Przy tej implementacji w szablonie można umieścić specjalne pola pomiędzy podwójnymi nawiasami klamrowymi z nazwą, które zostaną podmienione w trakcie rednerowania. Np. w wyniku wykonania kodu nastąpi podmienienie tekstu %%{{%%name%%}}%% na Xavier: **<code cpp>View view{"Hello {{name}}!"}; |
cout << view.Render(map {{"name","Xavier"}});</code> | cout << view.Render(map {{"name","Xavier"}});</code> |