naampje voor functie
Ik zoek een (Engelse) naam voor een functie.
De functie kijkt of een directory bestaat. Zo niet, dan maakt hij de directory aan.
Dus eigelijk geef je die functie dus een directory als argument, en na het uitvoeren weet je zeker dat die directory bestaat.
Ik dacht zelf aan de namen "confirmDirectory" of "assureDirectory", maar misschien weet iemand iets beters?
directoryExists en createDirectory.
En als je het echt in 1 functie wilt: assureDirectoryExists
Ja klopt, ik moet deze controle in een paar verschillende functies implementeren en daar gebruik ik dan weer liever 1 functie voor :)
>> En als je het echt in 1 functie wilt: assureDirectoryExists
Oké... jij zou dus voor assure kiezen. Wordt wel een lang naampje, hmmm... misschien dan zonder Exists?
En vind je assureDirectoryExists echt al te lang? Dan kun je er assureDirExists ofzo van maken. Maar echt lang is ie nog niet...
Denk maar eens aan mysql_real_escape_string, data_interval_create_from_string, array_change_key_case en vele andere core functies...
Als ik je omschrijving goed begrijp, is het doel van de functie om een directory te maken. Het kijken of die directory al bestaat is daarin bijzaak.
Eventueel zou je met een return value kunnen aangeven of de aan te maken directory al bestond (dus bijvoorbeeld 0 = niet gelukt, 1 = aangemaakt, 2 = bestond al)
Ik ben er inmiddels achter dat assure eigenlijk ensure moet zijn, dus dan is het ensureDirectory. Maar waarom wil jij er exists bij?
Je garandeert een directory. Dan denk ik dat het duidelijk is dat je garandeert dat die directory bestaat. Veel meer dan dat kan een directory niet doen. Als ik tegen jou zeg "Wouter, ik garandeer jou een huis." dan gaat het om een huis dat bestaat. Ik kan ook zeggen "Wouter, ik garandeer jou een huis dat bestaat." Komt op hetzelfde neer alleen is wat langer.
Toevoeging op 01/01/2014 19:49:17:
>> Als ik je omschrijving goed begrijp, is het doel van de functie om een directory te maken. Het kijken of die directory al bestaat is daarin bijzaak.
Nee niet helemaal. Bij een makeDir functie maak je altijd een nieuwe directory. In mijn geval kan het zijn dat de directory al bestaat, dan moet er dus juist geen directory gemaakt worden.
Wouter J op 01/01/2014 18:55:43:
En vind je assureDirectoryExists echt al te lang? Dan kun je er assureDirExists ofzo van maken. Maar echt lang is ie nog niet...
Denk maar eens aan mysql_real_escape_string, data_interval_create_from_string, array_change_key_case en vele andere core functies...
Denk maar eens aan mysql_real_escape_string, data_interval_create_from_string, array_change_key_case en vele andere core functies...
Dat is een beetje een omgekeerde argumentatie: omdat er al zoveel lange functienamen zijn is het dus geen probleem om een lange functienaam aan te maken?
Een van de nadelen van PHP is juist dat de gemiddelde naam van de core-functies zo lang is...
En omdat je me anders niet geloofd :)
Quote:
Ensure means "to make sure or certain" and must be followed by a direct object.
Bron: http://www.elearnenglishlanguage.com/difficulties/assureensure.html
Bron: http://www.elearnenglishlanguage.com/difficulties/assureensure.html
Quote:
ensure
[with object]
make certain that (something) will occur or be the case: the client must ensure that accurate records are kept
[no object] (ensure against) make sure that (a problem) does not occur: only by researching stocks thoroughly can a client ensure against being misled
Bron: http://www.oxforddictionaries.com/definition/english/ensure
[with object]
make certain that (something) will occur or be the case: the client must ensure that accurate records are kept
[no object] (ensure against) make sure that (a problem) does not occur: only by researching stocks thoroughly can a client ensure against being misled
Bron: http://www.oxforddictionaries.com/definition/english/ensure
Offtopic:
Nee, willem. Ik wou alleen aangeven dat het wel mee viel met de lengte, aangezien je als PHP programmeur dat toch al gewent bent. PHP heeft immers geen functies als to_a (wat voor de meeste mensen compleet nikszeggends zal zijn).
Gewijzigd op 01/01/2014 19:54:25 door Wouter J
>> Ensure means "to make sure or certain" and must be followed by a direct object.
Een direcotry is toch een object?
In de link die jij geeft staat ook:
"His loyalty will ensure your safety."
In jouw optiek zou dit dan moeten zijn "His loyalty will ensure that your safety exists."
Ozzie PHP op 01/01/2014 19:47:31:
>> Als ik je omschrijving goed begrijp, is het doel van de functie om een directory te maken. Het kijken of die directory al bestaat is daarin bijzaak.
Nee niet helemaal. Bij een makeDir functie maak je altijd een nieuwe directory.
Nee niet helemaal. Bij een makeDir functie maak je altijd een nieuwe directory.
In welke wet staat dat beschreven? ;-)
Er zijn twee manieren om naar een functie te kijken: actiegericht en resultaatgericht. Jij kijkt er actiegericht naar. Maken is maken, en checken is checken. Ik kijk resultaatgericht: aan het eind van de procedure moet er een directory zijn. Bestaat 'ie al? Mooi zo, dan hoef ik niets te doen.
Je zou zelfs helemaal over the top kunnen gaan door een parameter mee te geven waarmee je bepaalt of het al bestaan van de target directory een fout oplevert of niet.
Wanneer je je functie ensureDir of zo gaat noemen, introduceer je naar mijn mening juist onzekerheid over wat de functie doet. De term "ensure" suggereert namelijk dat de functie ervoor zorgt dat de opgegeven target altijd een directory is. Stel nu dat je de functie aanroept met de naam van een al bestaande file: ensureDir('readme.txt'); dan zou dat suggereren dat aan het eind van de functie de file readme.txt is verwijderd en er een directory readme.txt is aangemaakt. Een naam als makeDir vind ik dan juist beter beschrijven wat de functie doet.
Nu is het vervelende dat die copy functie geen directories kan aanmaken. Oké. Dan kan ik gaan controleren of directory B bestaat, en zo niet maak dan eerst directory B aan. Dat vind ik niet handig.
Ik wil mijn copy functie dus zo maken dat ie, indien nodig, een directory kan aanmaken. Stel nu dat ik makeDir zou gebruiken, dan krijg je zoiets:
Code (php)
Als ik deze functie zou zien, dan zou ik dan interpreteren alsof er altijd een directory wordt aangemaakt, maar dat is niet zo, want dat is niet altijd nodig. Dit lijkt mij dan duidelijker:
Misschien kan het ook een richtlijn zijn waar je iets aan hebt.
Zelfgeschreven functies komen voor in (zelfgeschreven) modules.
Elk van die functie hoort met die module te beginnen.
Dan volgt meestal dit stramien:
een zelfstandig naamwoord, dan een werkwoord (wat je met dat zelfstandig naamwoord doet).
function module_noun_verb
Dus, bv. in de module shoutbox:
function shoutbox_form_alter
function shoutbox_comments_approve
...
Dus ja; in die geest zou ik misschien dit doen:
directoryExists en directoryCreate.
(camel caps / underscore is dan weer een discussie op zich)
Gewijzigd op 02/01/2014 11:25:05 door Kris Peeters
Kris Peeters op 02/01/2014 11:21:30:
Dat is een goede, Kris, want dezelfde noun/verb selection wordt gebruikt in de GUI-richtlijnen voor Windows én Mac OS: Bestand > Openen, File > Print, enzovoort.Dan volgt meestal dit stramien:
een zelfstandig naamwoord, dan een werkwoord (wat je met dat zelfstandig naamwoord doet).
een zelfstandig naamwoord, dan een werkwoord (wat je met dat zelfstandig naamwoord doet).
Ik zou verder ook eens ruimer kijken naar de gehele signature:
Code (php)
Je gebruikt hier namelijk een custom functie copy() die gedeeltelijk de PHP-functie copy() implementeert: dat is dubbelzinnig, want ze doen niet hetzelfde. Daarnaast gebruik je een parameter $file waar $filename meer op zijn plaats is.
Sterker nog, de huidige implementatie is een recursieve functie zonder doel en zonder eindpunt. Dat gaat resulteren in "Memory overflow", "Execution time exceeded" en "maximum function nesting level" errors.
>> Je gebruikt hier namelijk een custom functie copy() die gedeeltelijk de PHP-functie copy() implementeert: dat is dubbelzinnig,
Dat doe ik bewust. Ik voeg namelijk exceptions toe en maak het mogelijk dat mijn functie ook nieuwe directories kan aanmaken. Bovendien bouw ik een beveiliging in dat een bestaand bestand (by default) niet kan worden overschreven. Mijn versie is dus een verbeterde versie van de php functie.
@Wouter:
Da's een interessante. Ik heb (omdat een ander stukje van mijn code even uit elkaar ligt) het nog niet kunnen testen. Die copy binnen de functie zelf dat moet de native functie van php zijn. Maar hij verwijst daar nu toch ook naar? Anders had er toch $this->copy() moeten staan? Of zie ik dat verkeerd? Graag je reactie!
Toevoeging op 02/01/2014 14:36:05:
@Kris:
De functie staat in een class... dus lijkt het me niet nodig om de naam van de module/class er nog eens voor te zetten... In de praktijk zou je dus zoiets krijgen $this->filesystem->ensureDirectory($dir). Als ik dat zou doen volgens jouw voorbeeld zou je zoiets krijgen $this->filesystem->filesystem_directory_ensure($dir). Dan vind ik m'n eigen oplossing toch wat prettiger...
Binnen een class zit de noun meestal al in de claasnaam.
Offtopic:
De manier waarop je in drupal communiceert is met hook functies.
die functies zijn callbacks. Ze worden dus opgeroepen, door drupal core, op basis van events.
Een beetje zoals we gewoon zijn in javascript.
... Wat niet wegneemt dat het misschien, af en toe, toch nog handig kan zijn.
Uiteraard niet de classname herhalen in functienamen.
Gewijzigd op 02/01/2014 16:08:11 door Kris Peeters
Hook functies? Ik snap niet echt wat je daarmee bedoelt... :(
PS: Merk op dat Drupal8 heel erg van dat procedurele gaat afstappen.
Ah oke... kun je mijn vraag nog even beantwoorden wat betreft jouw opmerking over memory overflow?
dat was mijn fout, ik dacht dat je een functie copy had... Ben nog een beetje moe denk ik :)
okeej, no problemo ;)