Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Cannot redeclare block-scoped variable

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Cannot redeclare block-scoped variable

    This topic has been deleted. Only users with topic management privileges can see it.
    • Codierknecht
      Codierknecht Developer Most Active @hub01 last edited by

      @hub01 sagte in Cannot redeclare block-scoped variable:

      Ich kennzeichne jede Konstante und Variable mit einem Kommentar.

      471acc6a-9668-422e-8c77-3eda64a7c7db-image.png
      Der Mann gilt als einer der Mitentwickler von C. Der sollte es wissen 😉

      Bei sowas wie

      const UEBERSCHUSS_1PHASIG_ANLAUF = 1200;
      const UEBERSCHUSS_1PHASIG_LADEN =  230;
      const UEBERSCHUSS_1PHASIG_HYSTERESE = 100;
      const UEBERSCHUSS_3PHASIG_ANLAUF = 4250;
      const UEBERSCHUSS_3PHASIG_LADEN =  690;
      const UEBERSCHUSS_3PHASIG_HYSTERESE = 150;
      const UEBERSCHUSS_UMSCHALTEN = 1150;
      

      spart man sich den Blick auf die Deklaration. Da weiß man in jeder Codezeile gleich, um was es geht.

      Zu meiner Zeit war Speicher knapp

      Zu meiner auch. Bei Microcontrollern ist er es z.T. immer noch.
      Aber hier braucht ja der Kommentar mehr Speicher als ein sinnvoller Name.
      Und im Compilat sind das eh nur Adressen. Die sind immer gleich lang - egal wie lang der Name einer Variablen oder Konstanten sein mag.

      Aber bitte nicht als Belehrung verstehen. Das macht jeder wie er meint.
      Ich selbst habe das auch Jahrzehnte lang eher knapp gehalten und beiße mir auch bei meinem Team die Zähne aus. Da komme ich mir ein bisschen vor wie Don Quichote 😉
      Irgendwann kommt man dann dahinter, dass sich Code bei klarer Benamsung einfach viel besser lesen lässt ... ohne jegliche Kommentare.

      Ich würde da aber nicht so weit gehen wie Uncle Bob:
      b93f439e-e4f5-422f-a051-792a05aaeed9-image.png

      OliverIO 1 Reply Last reply Reply Quote 0
      • OliverIO
        OliverIO @Codierknecht last edited by

        @codierknecht

        da gibt es schöne regeln zur code quality, die sich automatisiert messen lassen
        oder durch linting überprüfen lassen.

        • Markiere den Anfang und das Ende von Kontrollstrukturen mithilfe von Einrückungen und platziere den Code dazwischen.
        • Beschränke dich auf wenige Zeilen.
        • Vermeide lange Funktionen – ein professioneller Entwickler stimmt zu, dass eine Funktion jeweils nur eine einzelne Aufgabe erfüllen sollte.
        • Verwende präzise Namenskonventionen.
        • Halte Zeilen kurz – offensichtlich bevorzugen Menschen kürzere Zeilen, egal ob vertikal oder horizontal.
        • Nutze das DRY-Prinzip (Don’t Repeat Yourself). Du solltest denselben Code nicht im selben Skript wiederholt einsetzen, sondern wiederkehrende Aufgaben automatisieren.
        • Schreibe SQL-Schlüsselwörter und -Funktionen in Großbuchstaben, um sie von Spalten- und Tabellennamen zu unterscheiden.
        • Vermeide tiefe Verschachtelungen.
        • Hinterlasse Kommentare und setze Prioritäten bei der Dokumentation.
        H Codierknecht 2 Replies Last reply Reply Quote 1
        • H
          hub01 @OliverIO last edited by

          Ist vermutlich eine Umgewöhnungssache.

          Wie gesagt, tu ich mich mit Kommentaren leichter.
          Die kann ich kurz, aber verständlich halten, ohne die Syntax der Programmiersprache zu berücksichtigen.
          Wenn ich die Kommentare anschaue, weiß ich schnell, was der Code macht.

          if ((LadeAnsteuerung == VonVisu_Ansteuerung_EIN && Wallbox_Freigabe && Wallbox_Kommunikation_IO)) {
              if (VonVisu_3PhasenLaden_zulaessig && Ueberschuss_vorhanden_3Phasen_Anlauf>Ueberschuss_benoetigt_3Phasen_Anlauf) {
              ...
              }
          
              else if (VonVisu_1PhasenLaden_zulaessig && Ueberschuss_vorhanden_1Phasen_Anlauf>Ueberschuss_benoetigt_1Phasen_Anlauf) {
              ...
              }
          
          if ((iLAnst==cAnstEin && bWBFrg && bWBKommIO)) {        // Einschalten?  Freigabe?  WB-Kommunikation iO?
              if (b3PhZul && iUeVorh3PhAnl>cUeBe3PhAnl) {         // 3Phasen zulässig?  3Ph-Anlauf-Überschuss vorhanden?
              ...                                                 //   starte 3-phasig
              }                                                   //   usw.
          
              else if (b1PhZul && iUeVorh1PhAnl>cUeBe1PhAnl) {    // 1Phasen zulässig?  1Ph-Anlauf-Überschuss vorhanden?        
              ...                                                 //   starte 1-phasig
              }
          
          Codierknecht 1 Reply Last reply Reply Quote 0
          • Codierknecht
            Codierknecht Developer Most Active @hub01 last edited by

            @hub01 sagte in Cannot redeclare block-scoped variable:

            Ist vermutlich eine Umgewöhnungssache.

            Ist es! Das dauert möglicherweise Jahre.

            Hat man sich aber einmal daran gewöhnt, will man's nicht mehr anders haben.
            Als Einzelkämpfer dient das lediglich den eigenen Idealen (und der Lesbarkeit nach Monaten oder Jahren).
            Aber spätestens wenn's um Adapter-Code geht und Dir die Reviewer jede zweite Codezeile um die Ohren hauen, gewöhnt man sich ganz schnell daran 😁

            1 Reply Last reply Reply Quote 0
            • Codierknecht
              Codierknecht Developer Most Active @OliverIO last edited by

              @oliverio
              OT: Die Coding-Conventions in meinem Team umfassen einige Bildschirmseiten.
              Der größte Teil davon wird in der Continuous-Integration-Pipeline als allererstes automatisch geprüft.
              Wird gegen die Regeln verstoßen, bricht CI ab und das ganze Team erhält 'ne nette Mail. Das übt 😀

              OliverIO 1 Reply Last reply Reply Quote 0
              • OliverIO
                OliverIO @Codierknecht last edited by

                @codierknecht
                Sehr gut
                Wobei ich eher ein Fan davon wäre das das jeder einzelne sofort sieht und nicht erst aus einer Pipeline.

                Aus diesem Grund habe ich den repochecker auch erweitert das er auch lokal prüft.
                Seither ist die Anzahl der rebuilds und daraus resultierende folgefehler (versionsnummer kann nicht auf npm gefunden werden) gesunken.

                Codierknecht 1 Reply Last reply Reply Quote 0
                • Codierknecht
                  Codierknecht Developer Most Active @OliverIO last edited by

                  @oliverio sagte in Cannot redeclare block-scoped variable:

                  Wobei ich eher ein Fan davon wäre das das jeder einzelne sofort sieht und nicht erst aus einer Pipeline.

                  Wenn er das an seinem Code vorher testet, wird er natürlich darauf gestoßen.
                  Vergisst man aber gerne mal.

                  H 1 Reply Last reply Reply Quote 0
                  • H
                    hub01 @Codierknecht last edited by

                    lassen wir mal das Thema Programmierstil beiseite,

                    ich finde die beiden Files noch immer nicht (auch nicht als root),
                    und weiß noch nicht, warum die Meldungen manchmal angezeigt werden und manchmal nicht.

                    Codierknecht T 2 Replies Last reply Reply Quote 0
                    • Codierknecht
                      Codierknecht Developer Most Active @hub01 last edited by

                      @hub01
                      Du könntest mal versuchen, das ignorieren zu lassen.

                      // @ts-ignore
                      const cUeBe1PhAnl = 1200;
                      
                      OliverIO H 2 Replies Last reply Reply Quote 1
                      • OliverIO
                        OliverIO @Codierknecht last edited by

                        @codierknecht
                        Das schaltet nur die transpiler aber nicht runtime Meldungen aus.

                        Aber wie oben schon gesagt ist mir immer noch schleierhaft wo er die Meldungen herauskopiert hat. Aber nach seinem Post sind die wohl nicht von ihm und die hat irgendwer ergänzt.
                        Oder hab ich was falsch verstanden?

                        H 1 Reply Last reply Reply Quote 0
                        • T
                          ticaki Developer @hub01 last edited by

                          @hub01 sagte in Cannot redeclare block-scoped variable:

                          lassen wir mal das Thema Programmierstil beiseite,

                          ich finde die beiden Files noch immer nicht (auch nicht als root),
                          und weiß noch nicht, warum die Meldungen manchmal angezeigt werden und manchmal nicht.

                          Dann verrate doch mal wo genau die Meldungen herkommen.

                          1 Reply Last reply Reply Quote 1
                          • H
                            hub01 @Codierknecht last edited by

                            @codierknecht sagte in Cannot redeclare block-scoped variable:

                            @hub01
                            Du könntest mal versuchen, das ignorieren zu lassen.

                            // @ts-ignore
                            const cUeBe1PhAnl = 1200;
                            

                            Dies hilft erst mal, aber nur für die nachfolgende const-Anweisung.
                            Habe noch etliche const im Skript mit der gleichen Meldung.
                            Dort müsste ich überall ein @ts-ignore einfügen.

                            Kann man @ts-ignore einem Block oder dem ganzen Skript zuordnen?

                            1 Reply Last reply Reply Quote 0
                            • H
                              hub01 @OliverIO last edited by

                              @oliverio sagte in Cannot redeclare block-scoped variable:

                              @codierknecht
                              Das schaltet nur die transpiler aber nicht runtime Meldungen aus.

                              Aber wie oben schon gesagt ist mir immer noch schleierhaft wo er die Meldungen herauskopiert hat. Aber nach seinem Post sind die wohl nicht von ihm und die hat irgendwer ergänzt.
                              Oder hab ich was falsch verstanden?

                              iob00.png
                              iob01.png
                              hier klicken, dann kommt z.B.:

                              iob02.png
                              diese Meldung habe ich markiert, kopiert und in meinem Post eingefügt.
                              Irgendwer hat den eingefügten Text in Code-Tags gesetzt.
                              Steht ganz fett im 1. Post

                              T 1 Reply Last reply Reply Quote 0
                              • T
                                ticaki Developer @hub01 last edited by

                                @hub01
                                Ja und das hat jeder gelesen... weiß nicht wieso du wiederholst, das jemand dein Log in codetags gesetzt hast, damit man es besser lesen kann.
                                Du hast noch immer nicht gesagt das die Meldungen aus dem Editor im Javascript-Adapter, wenn man Problem anzeigen anklickt, stammen. Das kann man aber aus den Bildern ableiten.

                                Das sind false positiv, kommt vor. ts-ignore für einen ganzen File ist keine gute Idee, weil dann auch die echten Fehler nicht angezeigt werden. Ich selbst weiß auch nicht wie der Befehl dafür ist.

                                H 1 Reply Last reply Reply Quote 0
                                • H
                                  hub01 @ticaki last edited by

                                  @ticaki sagte in Cannot redeclare block-scoped variable:

                                  @hub01
                                  Ja und das hat jeder gelesen... weiß nicht wieso du wiederholst, das jemand dein Log in codetags gesetzt hast, damit man es besser lesen kann.

                                  weil anscheinend genau diese Aktion zu Verwirrung geführt hat.

                                  @oliverio sagte in Cannot redeclare block-scoped variable:

                                  @hub01

                                  wo hast du diese ausgaben herauskopiert? im javascriptadapter steht das so eigentlich nicht drin
                                  [ ... ]

                                  Aber wie oben schon gesagt ist mir immer noch schleierhaft wo er die Meldungen herauskopiert hat. Aber nach seinem Post sind die wohl nicht von ihm und die hat irgendwer ergänzt.
                                  Oder hab ich was falsch verstanden?

                                  ich denke, @OliverIO dürfte es jetzt schon verstanden haben

                                  @ticaki sagte in Cannot redeclare block-scoped variable:

                                  Du hast noch immer nicht gesagt das die Meldungen aus dem Editor im Javascript-Adapter, wenn man Problem anzeigen anklickt, stammen. Das kann man aber aus den Bildern ableiten.

                                  unter den Bildern steht es doch?

                                  Codierknecht 1 Reply Last reply Reply Quote 0
                                  • Codierknecht
                                    Codierknecht Developer Most Active @hub01 last edited by

                                    @hub01 sagte in Cannot redeclare block-scoped variable:

                                    unter den Bildern steht es doch?

                                    Ja - jetzt, seit Deinem letzten Post.

                                    Du hättest viel Verwirrung vermieden, wenn Du das gleich zu Beginn erwähnt hättest 😉

                                    Aber egal - jetzt weißt Du ja, dass solche "false-positives" immer wieder mal vorkommen.
                                    Das per @ts-ignore abzuschalten ist ja lediglich kosmetischer Natur.
                                    Der JS-Editor ist halt keine vollwertige IDE.
                                    Ich habe mir mittlerweile angewöhnt, mich nicht groß darum zu kümmern, solange die Scripte fehlerfrei laufen.
                                    Gibt's Probleme, kann ich die Kringel immer noch als "Schubs in die richtige Richtung" verwenden.

                                    H 1 Reply Last reply Reply Quote 1
                                    • B
                                      binarie last edited by

                                      @hub01 sagte in Cannot redeclare block-scoped variable:

                                      diese Meldung habe ich markiert, kopiert und in meinem Post eingefügt.

                                      Diese Meldungen habe ich auch sporadisch, ich drücke dann die F5 Taste und die Fehlermeldung ist verschwunden.

                                      1 Reply Last reply Reply Quote 1
                                      • H
                                        hub01 @Codierknecht last edited by

                                        Viel Durcheinander, weil auch ich 2 unterschiedliche Fragen hatte.
                                        Dazwischen noch Punkte zum Programmierstiel

                                        Aber ich bin auf jede Nachfrage eingegangen, in der Reihenfolge, wie sie waren.
                                        Deswegen sind nicht alle Post´s thematisch zusammenhängend.

                                        Für mich ist der Punkt mit den Meldungen soweit klar und abgehandelt.
                                        Danke an Codierknecht für die Erläuterungen,
                                        und an binarie für den einfachen schnellen Workaround.

                                        Bleibt eigentlich nur noch die Frage nach den ominösen „index_.js“ Dateien.

                                        OliverIO 1 Reply Last reply Reply Quote 0
                                        • OliverIO
                                          OliverIO @hub01 last edited by OliverIO

                                          @hub01 sagte in Cannot redeclare block-scoped variable:

                                          Bleibt eigentlich nur noch die Frage nach den ominösen „index_.js“ Dateien.

                                          also eigentlich stand das nirgends, woher du das kopiert hast.
                                          vscode sieht ähnlich aus und es hätte sein können, das du das vscode addon für die iobroker skripte verwendest.
                                          wenn jemand eine frage stellt, hat das meist einen grund, so das man evtl was nicht verstanden hat. so aus spass kommuniziere ich hier ja nicht nur um andere zu beschäftigen.

                                          auch zum zitierten satz könnte ich sagen, wurde schon beantwortet. mich wundert das du es nicht herausgelesen hast, aber ich fasse es nochmal zusammen.

                                          es gibt aktuell keine native engine die typescript direkt ausführt. alles muss erst nach javascript übersetzt werden.
                                          https://de.wikipedia.org/wiki/TypeScript
                                          Das macht der Skript-Adapter für dich und die index0.js index1.js ist das Ergebnis daraus.
                                          Klar könnte man die falsch-positiven ignorieren, wenn diese während der Code-Ausführung nicht auftauchen. Dennoch zeigen sie wahtscheinlich auf ein Problem mit dem Code hin.
                                          Auch das sie nur "sporadisch" auftauchen, denke ich kann nicht sein. wahrscheinlich tauchen sie dann zeitverzögert auf, weil die syntaxprüfung eine weile dauert, da zuerst alle bibliotheken geladen werden müssen, aber da kenne ich die Funktionsweise des Skript-ADapters nicht genau genug.

                                          H 1 Reply Last reply Reply Quote 0
                                          • H
                                            hub01 @OliverIO last edited by

                                            @oliverio
                                            ziemlich am Anfang stand, dass es JavaScripts sind.
                                            Und seit F5 ist erst mal Ruhe mit den Meldungen.

                                            OliverIO 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            738
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            7
                                            36
                                            1466
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo