{"id":2924,"date":"2023-10-31T01:55:22","date_gmt":"2023-10-31T00:55:22","guid":{"rendered":"https:\/\/www.art-events.de\/weblog\/?p=2924"},"modified":"2023-10-31T09:14:04","modified_gmt":"2023-10-31T08:14:04","slug":"ae-android-kochbuch-exkurs-flags-die-sachen-mit-den-flaggen","status":"publish","type":"post","link":"https:\/\/www.art-events.de\/weblog\/ae-android-kochbuch-exkurs-flags-die-sachen-mit-den-flaggen\/","title":{"rendered":"AE Android Kochbuch Exkurs: Flags. Spass mit Flaggen."},"content":{"rendered":"<p>Dieser kleine Exkurs besch\u00e4ftigt sich mit Flags. Deutsch: Flaggen und warum sie f\u00fcr uns in der Programmierung n\u00fctzlich sind! Kurz gefasst: Mit Flags k\u00f6nnen Programmierer Spa\u00df haben.<\/p>\n<p>Schon in der bekannten Fernsehserie Big Bang Theorie wurde der Witz aufgenommen. Durch die deutsche \u00dcbersetzung Spa\u00df mit Flaggen ist aber wohl die Urspr\u00fcnglichkeit verloren gegangen. H\u00e4tte man das englische Original Fun with flags verwendet, h\u00e4tten Programmierer landein \/ landauf die Anspielung auf ihren Alltag verstanden. Das Thema flags ist auch nicht auf Android Programmierung beschr\u00e4nkt, sondern zieht sich durch (fast alle) Programmiersprachen!<\/p>\n<p>Wir kennen es aus dem Alltag. Am Strand ist eine rote Flagge aufgezogen, um zu zeigen, dass die Wellen heute \u00fcbel sind. Wenn der Eiswagen kommt und noch Eis zum Verkauf hat, h\u00e4ngt er eine Flagge raus. Dasselbe Konzept verfolgen wir in der EDV. Leider ohne Eis und ohne Strand zum Schwimmen.<\/p>\n<p>Flags in der Programmierung sind hier so etwas wie Markierungsfahnen. Mit ihnen signalisieren und merken wir uns bestimmte Zust\u00e4nde, die wir an anderer Stelle abfragen. Entscheidend ist das Abfragen an anderer Stelle. Wenn wir sofort ein Eis wollen, k\u00f6nnten wir auch zum Eiswagen sprinten, kaum dass er angekommen ist. Wollen wir sp\u00e4ter ein Eis, schauen wir nach, ob die Flagge noch weht und f\u00e4llen dann unsere Entscheidung: losgehen oder nicht. Kurz: wenn wir sofort etwas wollen, brauchen wir keine Flags. Dann k\u00f6nnen wir es auch machen. Daher verwenden wir Flags als Markierung f\u00fcr sp\u00e4ter.<\/p>\n<h4><strong>Fahnen mit drei Zust\u00e4nde<\/strong><\/h4>\n<p>Eine Fahne kann hoch oder runter sein oder gar nicht vorhanden. In der Programmierung nennen wir das true, false, undefiniert. Ein Flag in einem Programm wird mindestens 2x verwendet: an einer Stelle wird es gesetzt und an mindestens einer (anderen) Stelle abfragt.<\/p>\n<p>F\u00fcr den praktischen Ablauf sind true oder false die am h\u00e4ufigsten gebr\u00e4uchlichen Zust\u00e4nde. Ich verwende Flags h\u00e4ufig, um mir Marker \u00fcber Ereignisse zu setzen, die ich sp\u00e4ter an anderen Stellen im Programmcode ben\u00f6tige. So nach dem Motto: Wenn ich in zwei Stunden ein Eis will, schaue ich dann nach ob die Fahne vom Eiswagen noch weht. Ist das der Fall ist ist der Wagen noch da und hat noch Eis. Ist die Fahne unten gibt es kein Eis mehr.<\/p>\n<p>Der undefined Zustand wird zwar selten verwendet, ihr m\u00fcsst ihn aber im Hinterkopf behalten. Wenn ihr ein Flag nur deklariert aber nicht auf true oder false setzt, dann ist sein Zustand unbekannt. Dann k\u00f6nnt ihr auch keine Entscheidung f\u00e4llen, ob ihr zum Eiswagen geht. Also k\u00f6nnt ihr den undefined Zustand in der Regel nicht f\u00fcr sinnvolle Abfragen verwenden. (Ich schreibe das mal ganz vorsichtig. Es gibt immer wieder Experten, die auch diesen Zustand f\u00fcr ihre Programmierung ausnutzen. Was auch kein Problem ist, wenn man wei\u00df, was man tut.)<\/p>\n<h4><strong>Fahne setzen<\/strong><\/h4>\n<p>\u00dcbersetzt in Programmcode hei\u00dft das dann so etwas wie: if (flag == gesetzt) oder in anderer Schreibweise if (flag) dann tue irgend etwas. Sonst mache nichts oder etwas anderes.<\/p>\n<p>Das typische Konstrukt zum Setzen eines Flags sieht daher so aus:<\/p>\n<pre>boolean flagnewfile;    \/\/Hier wird es deklariert\r\nif (..irgendeine Bedingung existiert)\r\n   flagnewfile = true;\r\nelse\r\n   flagnewfile = false;<\/pre>\n<p>In der Programmierung von C oder Java l\u00e4sst sich das auf die Zeile verk\u00fcrzen<\/p>\n<pre>boolean flagnewfile = (irgendeine Bedingung existiert) ? true : false;<\/pre>\n<p>Die verk\u00fcrzte Schreibweise spart haufenweise Zeilen und l\u00e4sst euren Code gleich professioneller aussehen! Und sie erledigt das Gleiche wie die f\u00fcnf Zeilen oben dr\u00fcber. Es gilt: ist der Ausdruck links neben dem ? true &#8211; dann gilt der Wert rechts neben dem Fragezeichen, ansonsten der Werte nach dem : . Die Klammern sind technisch bei den meisten Sprachen nicht notwendig. Ich setze sie aber wg der besseren \u00dcbersichtlichkeit.<\/p>\n<p>In dem Beispiel verwenden wir das Flag flagnewfile, um zu markieren, ob eine Datei schon existiert (true) oder noch nicht (false).<\/p>\n<pre>boolean flagnewfile = (myFile.exist ()) ? true : false;\r\nboolean flagwasauchimmer = (1+1=2) ? true : false;<\/pre>\n<p>Eines haben wir noch nicht besprochen: die Lebensdauer! \u00dcber diese m\u00fcsst ihr euch im klaren sein. Wenn ihr euer Flag nur innerhalb einer Methode ben\u00f6tigt, reicht es aus, sie auch nur dort zu deklarieren und initialisieren. Sollen sie irgendwo in der Klasse in einer oder mehreren Methoden verwendet werden, solltet ihr sie am Anfang der Klasse als private static deklarieren und dann bei Bedarf dort initialisieren, wo es anf\u00e4llt.<\/p>\n<h4><strong>Flags abfragen<\/strong><\/h4>\n<p>Wenn ihr das Flag an anderer Stelle abfragen wollt kommt in der Regel aber nicht immer die if Abfrage ins spiel:<\/p>\n<pre>if (flag) {\r\n   \/\/jetzt tue etwas\r\n}<\/pre>\n<p>Ihr k\u00f6nnt nat\u00fcrlich auch eine while-Schleife mit einem Flag steuern. Beispiel:<\/p>\n<pre>boolean flag = true;\r\nwhile (flag) {\r\n  \u00a0tue jetzt was......\r\n  \u00a0und irgendwo: \r\n   flag = false; \/\/dann wird die Schleife verlassen\r\n}<\/pre>\n<p>Am Beispiel oben seht ihr auch, wie wichtig es ist, dass ihr sicherstellt, dass ein Flag nicht undefiniert ist. Sonst wird der ganze while Loop gar nicht durchgef\u00fchrt!<\/p>\n<p>F\u00fcr die Abfragen haben sich verschiedene Schreibweisen durchgesetzt, die ihr nach Belieben verwenden k\u00f6nnt:<\/p>\n<table>\n<tbody>\n<tr>\n<td>Bedingung<\/td>\n<td>Schreibweise<\/td>\n<td>kurze Alternative<\/td>\n<\/tr>\n<tr>\n<td>Wenn Flag gesetzt<\/td>\n<td>if (flag == true)<\/td>\n<td>if (flag)<\/td>\n<\/tr>\n<tr>\n<td>Wenn Flag nicht gesetzt<\/td>\n<td>if (flag == false)<\/td>\n<td>if (!flag)<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Flags werden euch oftmals das Programmierer-Leben erleichtern. Ihr k\u00f6nnt sie an beliebigen Stellen einbauen und nutzen. Aber Vorsicht: Ihr solltet sie auch immer ausreichend dokumentieren, damit auch eine andere Person versteht, was ihr mit einem Flag bezweckt!<\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<p><a href=\"https:\/\/www.art-events.de\/weblog\/wp-content\/uploads\/2021\/06\/20080607hjwx-204.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2104\" src=\"https:\/\/www.art-events.de\/weblog\/wp-content\/uploads\/2021\/06\/20080607hjwx-204.jpg\" alt=\"\" width=\"204\" height=\"153\" \/><\/a><\/p>\n<p>Text und Entwurf. (c)\u00a0<a href=\"https:\/\/www.terminal-systems.de\/\" target=\"_blank\" rel=\"noopener\">AE SYSTEME Testcenter<\/a>, Hans-J. Walter<br \/>\nHans-J. Walter ist Programmierer f\u00fcr Windows DOT.NET \/ C# und Android und als eingetragener, unabh\u00e4ngiger Journalist verantwortlich f\u00fcr Fachberichte und Schulungstexte \u00fcber Technik u. Entwicklung.\u00a0<a href=\"mailto:hjw@terminal-systems.de\">hjw@terminal-systems.de<\/a><\/p>\n<p><em>F\u00fcr diese und alle nachfolgenden Seiten gilt ebenso der obligatorische Hinweis: Alle Angaben ohne Gew\u00e4hr. Bilder und Codes zeigen Beispiele. Diese Beschreibung bezieht sich auf unsere Installation und stellt keine Bewertung der verwendeten Techniken da. Fehler und Irrt\u00fcmer vorbehalten!<\/em><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dieser kleine Exkurs besch\u00e4ftigt sich mit Flags. Deutsch: Flaggen und warum sie f\u00fcr uns in der Programmierung n\u00fctzlich sind! Kurz gefasst: Mit Flags k\u00f6nnen Programmierer Spa\u00df haben. Schon in der bekannten Fernsehserie Big Bang Theorie wurde der Witz aufgenommen. Durch die deutsche \u00dcbersetzung Spa\u00df mit Flaggen ist aber wohl die Urspr\u00fcnglichkeit verloren gegangen. H\u00e4tte man [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[33,34],"tags":[],"class_list":["post-2924","post","type-post","status-publish","format-standard","hentry","category-android","category-programmierung","entry"],"_links":{"self":[{"href":"https:\/\/www.art-events.de\/weblog\/wp-json\/wp\/v2\/posts\/2924","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.art-events.de\/weblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.art-events.de\/weblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.art-events.de\/weblog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.art-events.de\/weblog\/wp-json\/wp\/v2\/comments?post=2924"}],"version-history":[{"count":0,"href":"https:\/\/www.art-events.de\/weblog\/wp-json\/wp\/v2\/posts\/2924\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.art-events.de\/weblog\/wp-json\/wp\/v2\/media?parent=2924"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.art-events.de\/weblog\/wp-json\/wp\/v2\/categories?post=2924"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.art-events.de\/weblog\/wp-json\/wp\/v2\/tags?post=2924"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}