{"id":7146,"date":"2019-01-22T11:10:33","date_gmt":"2019-01-22T10:10:33","guid":{"rendered":"https:\/\/pi3g.com\/?p=7146"},"modified":"2019-01-22T11:10:33","modified_gmt":"2019-01-22T10:10:33","slug":"using-modules-in-crystal","status":"publish","type":"post","link":"https:\/\/pi3g.com\/de\/using-modules-in-crystal\/","title":{"rendered":"Verwendung von Modulen in crystal"},"content":{"rendered":"<p>Wenn Ihre Anwendung w\u00e4chst, m\u00f6chten Sie Ihren Code nicht mehr in eine gro\u00dfe .cr-Datei, sondern in kleinere Dateien aufteilen.<\/p>\n<p>Sie k\u00f6nnen require aus Ihrer Haupt-.cr-Datei verwenden, um Code aus anderen Dateien hinzuzuf\u00fcgen:<\/p>\n<blockquote>\n<p>require \".\/tools\/*\"<\/p>\n<\/blockquote>\n<p>Diese Anweisung f\u00fcgt Code aus dem Verzeichnis tools hinzu, relativ zu Ihrer Haupt-.cr-Datei.<\/p>\n<p>Dies hilft, Ihre Anwendung \"physisch\" zu trennen, aber es kann auch w\u00fcnschenswert sein, sie logisch zu trennen - vielleicht kann ein Teil des Codes in anderen Projekten wiederverwendet werden, und vielleicht wollen Sie auch Namensraumkollisionen vermeiden.<\/p>\n<h2>Was ist eine Namensraumkollision?<\/h2>\n<p>Wenn ein Methoden- oder Klassenname oder ein Konstantenname zweimal in verschiedenen Quelldateien im globalen Namensraum verwendet wird, kommt es zu einer Kollision.<\/p>\n<p>Woher soll der Compiler wissen, welche der beiden definierten Methoden\/Klassen man eigentlich will?<\/p>\n<p>Um Namespace-Kollisionen zu vermeiden, teilen Sie Ihren Code in Module auf.<\/p>\n<p>zum Beispiel: <\/p>\n<blockquote>\n<p>Modul Fehlersuche<\/p>\n<p>&nbsp;&nbsp; Klasse SampleClass<\/p>\n<p>&nbsp;&nbsp; Ende<\/p>\n<p>&nbsp;&nbsp; SAMPLE_CONSTANT = \"irgendein Wert\"<\/p>\n<p>&nbsp;&nbsp; macro samplemacro(einige_variable)<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp; #somit Makro-Code<\/p>\n<p>&nbsp;&nbsp; Ende<\/p>\n<p>1TP3Ihr Code geht hier<\/p>\n<p>Ende<\/p>\n<\/blockquote>\n<h2>Zugriff auf Code in Modulen<\/h2>\n<p>Jetzt k\u00f6nnen Sie auf den Code wie folgt zugreifen (nachdem Sie die Datei, in der das Modul definiert ist, angefordert haben):<\/p>\n<blockquote>\n<p>sampleinstance = Debug::SampleClass.new()<\/p>\n<p>p Debug::SAMPLE_CONSTANT<\/p>\n<p>Debug.Beispielmakro<\/p>\n<\/blockquote>\n<p>Beachten Sie, dass ein Makro mit einer \".\"-Syntax und nicht mit einer \":\"-Syntax aufgerufen wird. Sie k\u00f6nnen es als eine Methode des Moduls betrachten.<\/p>\n<h2>Einschlie\u00dflich Module<\/h2>\n<p>Wenn Sie jedoch die zus\u00e4tzliche Notation als l\u00e4stig empfinden, k\u00f6nnen Sie das Modul mit seinem Methodennamen wie folgt einbinden:<\/p>\n<blockquote>\n<p>Debug einschlie\u00dfen<\/p>\n<\/blockquote>\n<p>dann k\u00f6nnen Sie auf die Methoden, Klassen, Konstanten und Makros ohne zus\u00e4tzliche Notation zugreifen - als ob der Code buchst\u00e4blich per Copy &amp; Paste in Ihre andere Quelldatei eingef\u00fcgt wurde:<\/p>\n<blockquote>\n<p>sampleinstance = SampleClass.new()<\/p>\n<p>p SAMPLE_CONSTANT<\/p>\n<p>Muster-Makro<\/p>\n<\/blockquote>","protected":false},"excerpt":{"rendered":"<p>Wenn Ihre Anwendung w\u00e4chst, m\u00f6chten Sie Ihren Code von einer gro\u00dfen .cr-Datei in kleinere Dateien aufteilen. Sie k\u00f6nnen require aus Ihrer Haupt-.cr-Datei verwenden, um Code aus anderen Dateien hinzuzuf\u00fcgen: require \".\/tools\/*\" Diese Anweisung f\u00fcgt Code aus dem Tools-Verzeichnis hinzu, relativ zu Ihrer Haupt-.cr-Datei. Dies wird...<\/p>","protected":false},"author":830,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[416],"tags":[501,500,409,498,496,497,499],"class_list":["post-7146","post","type-post","status-publish","format-standard","hentry","category-crystal-language","tag-classes","tag-constants","tag-crystal","tag-includes","tag-modules","tag-namespaces","tag-requires"],"_links":{"self":[{"href":"https:\/\/pi3g.com\/de\/wp-json\/wp\/v2\/posts\/7146","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pi3g.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pi3g.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pi3g.com\/de\/wp-json\/wp\/v2\/users\/830"}],"replies":[{"embeddable":true,"href":"https:\/\/pi3g.com\/de\/wp-json\/wp\/v2\/comments?post=7146"}],"version-history":[{"count":1,"href":"https:\/\/pi3g.com\/de\/wp-json\/wp\/v2\/posts\/7146\/revisions"}],"predecessor-version":[{"id":7147,"href":"https:\/\/pi3g.com\/de\/wp-json\/wp\/v2\/posts\/7146\/revisions\/7147"}],"wp:attachment":[{"href":"https:\/\/pi3g.com\/de\/wp-json\/wp\/v2\/media?parent=7146"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pi3g.com\/de\/wp-json\/wp\/v2\/categories?post=7146"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pi3g.com\/de\/wp-json\/wp\/v2\/tags?post=7146"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}