De functie sprintf kom je tegen in meerdere programmeertalen, een functie waarmee je variabelen in een tekst plaatst. Er zijn veel mogelijkheden om deze te formatteren. bijvoorbeeld uitlijnen of het aantal decimalen instellen. In veel gevallen heb je die niet nodig, en is een simpele functie die slechts de variabelen op de juiste plaats zet een betere keus. Zeker in JavaScript, waar je de code kort wilt houden om sneller te laden. In dit voorbeeld zie je hoe sprintf gebruikt wordt:
// Simple string concatenation var html1 = '<a href="' + url + '">' + link + '</a>'; // Using sprintf var html2 = sprintf( '<a href="%s">%s</a>', url, link );
In dit artikel beschrijf ik een simpele functie die precies dat doet–tekst op de juiste plek invoegen. Voor uitgebreidere versies van sprintf, zoek je op Google naar ‘javascript sprintf’, en vind je verschillende goede versies. Als je die niet nodig hebt, lees dan verder.
De functie hieronder vervangt ‘%s’ in de format string door de verdere argumenten.
function sprintf( format ) { for( var i=1; i < arguments.length; i++ ) { format = format.replace( /%s/, arguments[i] ); } return format; }
De functie gebruikt twee mogelijkheden van JavaScript waar ik dieper op in wil gaan.
Variabel aantal argumenten
Ondanks de definitie ‘function sprintf( format )‘, kun je meerdere argumenten meegeven aan de functie. Ze hebben dan geen naam, maar je kunt ze gebruiken door het array arguments uit te lezen.
Vervangen met regular expressions
De replace methode can gebruikt worden met strings en met regular expressions als eerste argument. Als we een string ‘”%s”‘ gebruiken, zou tijdens de eerste loop iedere ‘%s’ al vervangen worden door het eerstvolgende argument. Door de regular expression ‘/%s/’, te gebruiken, wordt alleen de eerste ‘%s’ vervangen (als de global option was gegeven, zoals in ‘/%s/g’, zouden meteen alle ‘%s’ vervangen zijn). In de volgende loop, wordt de volgende ‘%s’ vervangen door het volgende argument, tot alle argumenten geweest zijn.
Opmerkingen
In deze simpele uitvoering is het niet mogelijk om een uitzondering te maken met bijv. ‘%%s’, of ‘\%s’, dus je kunt de letterlijke tekst ‘%s’ niet in de uiteindelijke tekst krijgen–tenzij deze vaker voorkomt dan het aantal argumenten.
Het aantal keren dat ‘%s’ in het format voorkomt, zou gelijk moeten zijn aan het aantal argumenten. Als dit niet het geval is, komt er echter geen foutmelding. Als ‘%s’ minder vaak voorkomt, worden de resterende argumenten niet gebruikt, als er onvoldoende argumenten zijn blijven de resterende ‘%s’ in de tekst staan.
This post is also available in: Engels