generateRandomId()

Wie erzeugt man in einem kompjuterprogramm eine „zufällige“ ID? Man könnte ja einfach einen kryptografischen zufallsgenerator nehmen, aber das ist doch immer ein gewisser aufwand. Wenn der anspruch etwas kleiner ist, könnte man auch einen ganz gewöhnlichen zufallsgenerator verwenden, nachdem man ihn mit der systemzeit initialisiert hat, so ein MT 19937 ist im zweifelsfall auch schnell selbst gekohdet. Das hier ist jedenfalls keine so gute vorgehensweise, die werte sind doch etwas vorhersagbar:

export function generateRandomId(): string {
    counter++;
    return 'id' + counter;
}

Wenn ich so etwas sehe, frage ich mich ja immer, wieviel derartiger schrottkohd in großen programmen und vor allem in schnell gemachten, billigen smartdingern drinstecken wird. 😦

5 Antworten zu “generateRandomId()

  1. Mal dumm gefragt. Irre ich, oder wird da immer die gleiche ‚id‘ zurück gegeben, Nämlich 1?

    Welche Sprache ist das denn, die NULL++ erlaubt?

    • Das kommt ein bisschen auf den kontext an.

      Wenn es eine funkzjon ist, kann counter eine nicht exportierte variable (ich denke mal in C) in der übersetzungseinheit sein, die bei der definizjon initialisiert wurde, also zum beispiel als static unsigned counter = 0.

      Wenn es eine metode ist, kann counter eine instanzvariable sein, die im konstruktor initiaisiert wird, oder aber auch eine klassenvariable, die bei der definizjon initialisiert wurde.

      Und die sprache, die im prinzip so etwas wie NULL++ erlauben würde, ist zum beispiel perl, die dann automagisch bei der ersten nutzung mit aritmetischem operator eine undefinierte variable mit 0 initialisiert. Außer natürlich, man ist vernünftig und schreibt use strict in sein gehäcksel rein, um solche einladungen für schwer zu findende fehler zu vermeiden und stattdessen jede variable deklarieren zu müssen. Aber perl hat eine sehr andere syntax. Eine vorsätzlich körperverletzende syntax.

      Nicht einmal in javascript kann man mit undefined rechnen, aber perl ist nun einmal eine krankheit für sich… 😀

      • Dank Dir für die kurze Auffrischung!
        Mir fehlte dazu eben dieser Kontext. An Statische Variablen dachte ich z.B. gar nicht und an die Klasseneigenschaften auch nicht. Ich sah das nur als lokal und uninitialisiert.
        Ich schreibe z.B. in PHP immer $this-> für die Klasseneigenschaften und für statische Variablen self:: zur besseren Lesbarkeit davor, aber auch wegen der Codevervollständigung.

        Aber da hab ich doch noch eine kleine Frage zu dem ‚id‘ beim Return. Warum ist das in Anführungszeichen, bzw. was hat das zu bedeuten? Ich würde ja auf einen String tippen und da wird dann der counter mit angehängt, also z.B. return 'id1234'; – aber ich kann mich nicht daran erinnern, dass C so etwas erlaubt ohne implizit zu casten.

        Puh. Da merk ich erst wieder, wie lange das schon her ist, als ich darin noch fitter war. 😉

        • Das ist nicht C und auch nicht C++, und ich kenne die sprache nicht. In C und C++ wäre es "id", und 'id' wäre ein syntaxfehler. (Die einfachen anführungszeichen sind für char, also einzelne zeichen, die doppelten für einen impliziten const char*, nullterminiert, passend zu den funkzjonen in string.h.) Einmal ganz davon abgesehen, dass der typ des rückgabewertes anstelle des wortes function stünde.

          Es gibt aber eine menge sprachen, die keinen eigenen operator für string-verkettung haben und gemischte ausdrücke in dieser form erlauben und einfach implizit zurechtcasten, gern auch mal mit überraschendem ergebnis, wenn die zeichenkette führende nullen hatte. Javascript zum beispiel. 😉

          • THX!

            Ja, an JavaScript dachte ich auch und da wären die einfachen Anführungszeichen gleichbedeutend mit den doppelten, wenn ich nicht irre. Auch dass der Rückgabetyp rechts steht, weist auf ’ne (ECMA)Scriptsprache hin, wie z.B. ActionScript, oder TypeScript. Dann würde ich auf TypeScript tippen, da das imo recht populär, ActionScript dagegen mit Flash / Flex verteufelt wurde.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.