{"id":2807,"date":"2017-03-09T13:07:01","date_gmt":"2017-03-09T12:07:01","guid":{"rendered":"http:\/\/roboblog.fatal-fury.de\/?p=2807"},"modified":"2017-03-11T11:08:14","modified_gmt":"2017-03-11T10:08:14","slug":"c17-guns-stdoptional","status":"publish","type":"post","link":"http:\/\/roboblog.fatal-fury.de\/?p=2807","title":{"rendered":"C++17 Guns - std::optional"},"content":{"rendered":"<p>Ich glaube, ich sehe einen Verwendungszweck f\u00fcr std::optional.<br \/>\nEin hydraulischer Schacht kann mehrere Punkte besitzen. Z.B. f\u00fcr Schachtdeckel (DMP) und Schachtmittelpunkt (SMP). Nun sind Datens\u00e4tze nie vollst\u00e4ndig, und ich muss mit beiden Punkth\u00f6hen weiter rechnen, wenn sie denn existieren. Das l\u00e4sst sich nat\u00fcrlich leicht \u00fcber ein boolean hasDMP realisieren. Und einer Schleife die \u00fcber alle Punkte l\u00e4uft. Nat\u00fcrlich will niemand im Code 100x die selbe Schleife schreiben. Es w\u00fcrde auch dem \"WAS und nicht WIE\" Prinzip widersprechen. Also wird die Schleife in eine Funktion ausgelagert. Die Schleife gibt den Punkt zur\u00fcck und ein boolen, ob der Punkt auch existiert.<\/p>\n<pre><code>\r\nauto [DMP, hasDMP] = schacht.DMPpunkt();\r\nauto [SMP, hasSMP] = schacht.SMPpunkt();\r\nif(hasDMP and hasSMP) {\r\n    distanceTo(DMP, SMP);\r\n}\r\n<\/code><\/pre>\n<p>Ist ganz nett, und durch das \"auto\" auch relativ kurzer Code. Aber es geht mit std::optional wohl noch k\u00fcrzer. M\u00f6glicherweise so:<\/p>\n<pre><code>\r\nauto DMP = schacht.DMPpunkt();\r\nauto SMP = schacht.SMPpunkt();\r\nif(DMP and SMP) {\r\n    distanceTo(DMP, SMP);\r\n}\r\n<\/code><\/pre>\n<p>Ist hier die Semantik zu abstrakt? Ist intuitiv klar was if(DMP) bedeutet? Der Typ der DMP und SMP Variabel ist schon variabel. Das ist schon brainfuck f\u00fcr viele C++ Programmierer aber lustigerweise Schokolade f\u00fcr die Python Programmierer. Aber jetzt ist sogar die Existenz der Variabel variabel. <\/p>\n<p>Und wie sieht es mit der Performance aus? Kann std::optional so implementiert werden, dass kein new() aufgerufen wird?<\/p>\n<p>Nachteil: H\u00f6here Laufzeit, da zwei mal die Schleife gestartet wird. Vorschlag: tupel Schacht::punkte(Args...) Hm?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich glaube, ich sehe einen Verwendungszweck f\u00fcr std::optional. Ein hydraulischer Schacht kann mehrere Punkte besitzen. Z.B. f\u00fcr Schachtdeckel (DMP) und Schachtmittelpunkt (SMP). Nun sind Datens\u00e4tze nie vollst\u00e4ndig, und ich muss mit beiden Punkth\u00f6hen weiter rechnen, wenn sie denn existieren. Das l\u00e4sst sich nat\u00fcrlich leicht \u00fcber ein boolean hasDMP realisieren. Und einer Schleife die \u00fcber alle [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[17],"class_list":["post-2807","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-cpp"],"_links":{"self":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/2807","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2807"}],"version-history":[{"count":4,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/2807\/revisions"}],"predecessor-version":[{"id":2834,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/2807\/revisions\/2834"}],"wp:attachment":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2807"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2807"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2807"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}