[alg] Slechtste programmeervoorbeelden deel 2 Vorige deel Overzicht Volgende deel Laatste deel

Dit topic is onderdeel van een reeks. Ga naar het meest recente topic in deze reeks.

Pagina: 1 2 ... 11 Laatste
Acties:
  • 10.720 views sinds 30-01-2008

Acties:
  • 0 Henk 'm!

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 10:58

Cyphax

Moderator LNX
MTWZZ schreef op vrijdag 03 november 2006 @ 08:49:
Visual Basic:
1
2
3
4
5
adoRS.Open ...
Do Until adoRS.EOF
    ' code
    adoRS.MoveNext ' <- die vergeet ik dus nog wel eens
Loop

^^ nare shit dat :X
Herkenbaar... ik vergeet die ook soms, en maar wachten op die webpagina (okee hier is 't dan vbscript in asp)... :+

Saved by the buoyancy of citrus


Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Verwijderd schreef op maandag 30 oktober 2006 @ 17:02:
[...]


Ik vond het nogal lang duren vorodat iemand die code in google flikkerde...in plaats van in zijn compiler... gelukkig maar dat ik dan niet de slechtste programmeur van GoT ben. Zoals een goed programmeur betaamt kun je goede code beter 'lenen' dan proberen opnieuw uit te vinden...
Kopieer de code dan ook goed en ga geen nonsense-verhaal ophalen over verkeerd in de mail ge-paste oid ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Nu online

Robtimus

me Robtimus no like you

S2K schreef op vrijdag 03 november 2006 @ 10:19:
[...]


Ik vrees dat Edsger W. Dijkstra zich nu in zijn graf omdraait dat zijn naam zo verbasterd word.
*schaam*
Ik weet wel dat het Dijkstra is, ik had alleen even last van een thinko ;(

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Acties:
  • 0 Henk 'm!

Verwijderd

Toen ik 2 jaar geleden begon met het leren van PHP had ik zoals vele een leer projectje. Nu had ik voor mijn projectje een ban systeem. Maar mijn manier van een IP opzoeken was niet zo heel netjes :+

Zie hier mijn oplossing van het zoeken van een IP in de database:
code:
1
2
3
4
5
6
7
8
9
$ip=$_SERVER['REMOTE_ADDR'];
$sql3 = "SELECT * FROM zkshoutbanned";
 $resultaat = mysql_query($sql3);
  while($record = mysql_fetch_object($resultaat)){
 $banned = $record->banned;
          if($ip == $banned){          
            $banned2=1;
          }
          }

[ Voor 3% gewijzigd door Verwijderd op 04-11-2006 20:55 ]


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
IceManX schreef op vrijdag 03 november 2006 @ 20:48:
[...]
*schaam*
Ik weet wel dat het Dijkstra is, ik had alleen even last van een thinko ;(
Mweh, ik las er ook overheen hoor. ;)

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 10:58
EdwinG schreef op vrijdag 27 oktober 2006 @ 11:21:
Een typisch voorbeeld van hoe het dus NIET moet:
code:
1
2
3
4
5
6
7
8
9
switch ( aBool )
{
    case TRUE:
        do_dit();
    case FALSE:
        do_dat();
    default:
        doe_iets_anders();
}
in C/C++ zou dit ook een heel plausibele construcie zijn om bij een corrupte stack door een pointer fout oid te detecteren dat de waarde van aBool defect is. ( het wordt door de schrijvers van http://www.pragmaticprogrammer.com/ppbook/index.shtml aangeraden om te doen )

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

Verwijderd

Ik had in een pet-project laatst eens een haastige fout gemaakt. Het duurde alleen wel even voordat ik hem had opgespoort...
code:
1
2
3
4
if (LOG.isDebugEnabled()) {
   LOG.debug("doe belangrijke dingen");
   doeBelangrijkeDingen();
}

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Verwijderd schreef op woensdag 08 november 2006 @ 12:37:
Ik had in een pet-project laatst eens een haastige fout gemaakt. Het duurde alleen wel even voordat ik hem had opgespoort...
code:
1
2
3
4
if (LOG.isDebugEnabled()) {
   LOG.debug("doe belangrijke dingen");
   doeBelangrijkeDingen();
}
hehe, die is leuk ja.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-09 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Da's altijd zo mooi met asserts in C(++)

C++:
1
2
3
4
5
6
7
8
#include <cassert>

bool doeBelangrijkeDingen();  // returns true on success

int main()
{
    assert(doeBelangrijkeDingen());
}

8)7

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • schoene
  • Registratie: Maart 2003
  • Laatst online: 10:44
Verwijderd schreef op woensdag 08 november 2006 @ 12:37:
Ik had in een pet-project laatst eens een haastige fout gemaakt. Het duurde alleen wel even voordat ik hem had opgespoort...
code:
1
2
3
4
if (LOG.isDebugEnabled()) {
   LOG.debug("doe belangrijke dingen");
   doeBelangrijkeDingen();
}
Persoonlijk zou ik de test isDebugEnabled () in de debug-method zelf stoppen. Het lijkt me vrij logisch dat een debug-method niets doet als isDebugEnabled false is. En dan kan bovenstaande fout zich ook niet voordoen.

Acties:
  • 0 Henk 'm!

  • rrrandy
  • Registratie: Juli 2005
  • Laatst online: 27-06 13:00
schoene schreef op woensdag 08 november 2006 @ 13:12:
[...]


Persoonlijk zou ik de test isDebugEnabled () in de debug-method zelf stoppen. Het lijkt me vrij logisch dat een debug-method niets doet als isDebugEnabled false is. En dan kan bovenstaande fout zich ook niet voordoen.
Als dit java-code is en je met log4j logt dan los je dit in je log4j.properties of log4j.xml op :)

Acties:
  • 0 Henk 'm!

  • EdwinG
  • Registratie: Oktober 2002
  • Laatst online: 12-09 20:53
En wat nou als je over 30 jaar verder wilt werken? Geen probleem.
PHP:
1
2
3
4
5
if(!session_id()){
  session_start();
}
ini_set('session.gc_maxlifetime',3600000*24*30);
//lifetime a bit high, irritating otherwise.

Bezoek eens een willekeurige pagina


Acties:
  • 0 Henk 'm!

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 12-09 22:34
rrrandy schreef op woensdag 08 november 2006 @ 13:21:
[...]


Als dit java-code is en je met log4j logt dan los je dit in je log4j.properties of log4j.xml op :)
Als je in je log4j.properties of log4j.xml debug logging disbaled dan wordt de String "doe belangrijke dingen" nog steeds aangemaakt, ook al wordt er niets meegedaan. Nu is dat hier misschien niet zo schokkend, maar zodra je Strings gaat concateneren dan is het efficiënter om eerst te kijken of het Debug level enabled, danwel disabled is voor de logger, voordat je überhaupt verder gaat.

[ Voor 3% gewijzigd door Kwistnix op 08-11-2006 14:11 ]


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 12-09 17:37

TeeDee

CQB 241

.oisyn schreef op woensdag 08 november 2006 @ 12:55:
Da's altijd zo mooi met asserts in C(++)

C++:
1
2
3
4
5
6
7
8
#include <cassert>

bool doeBelangrijkeDingen();  // returns true on success

int main()
{
    assert(doeBelangrijkeDingen());
}

8)7
Mijn kennis van c++ is nihil, maar je zegt hier dus eigenlijk:
Kijk of 'doeBelangrijkeDingen()' true is, terwijl het een true oplevert?

Je kan dus eigenlijk ook 'if(doeBelangrijkeDingen())' neerzetten?

[ Voor 8% gewijzigd door TeeDee op 08-11-2006 15:48 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • PhysicsRules
  • Registratie: Februari 2002
  • Laatst online: 31-03 07:26

PhysicsRules

Dux: Linux voor Eenden

Ik heb jaren geleden een keer een stuk code geschreven in Access waarin in een tabel alle waardes geupdate werden. De tabel werd geladen in een Form met het volgende resultaat:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
'Het aanal records bepalen
    DoCmd.GoToRecord acDataForm, "Jaar Update", acLast
    Aant = Me.CurrentRecord

'Naar de eerste gaan
    DoCmd.GoToRecord acDataForm, "Jaar Update", acFirst
    
    For I = 1 To Aant - 1
        DoeWat()
        DoCmd.GoToRecord acDataForm, "Jaar Update", acNext
    Next


Voor de niet Access-Guru's onder ons: in deze code wordt dus steeds het event aangeroepen om de volgende record in het form te laten zien.

Ik had nog nooit van Recordsets, UPDATE statements en andere nuttige zaken gehoord :z

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 12-09 17:37

TeeDee

CQB 241

PhysicsRules schreef op woensdag 08 november 2006 @ 16:24:
Ik heb jaren geleden een keer een stuk code geschreven in Access waarin in een tabel alle waardes geupdate werden. De tabel werd geladen in een Form met het volgende resultaat:

[...]

Voor de niet Access-Guru's onder ons: in deze code wordt dus steeds het event aangeroepen om de volgende record in het form te laten zien.

Ik had nog nooit van Recordsets, UPDATE statements en andere nuttige zaken gehoord :z
Och, dan is het niet fout. Dan wist je alleen de veeeeeel handigere dingen niet ;) Qua code is het imo niet zo heel erg fout.
Verwijderd schreef op woensdag 08 november 2006 @ 16:44:
[...]
Nee, het volledige statement verdwijnt als je het zonder debug parameters compileert ;)

------------------------
en wat betreft de openstaande vragen: Wat FallenAngel666 zei...
Ah, had wel even gauw wat opgezocht over assert, wist alleen niet dat het zoveel te maken had met debugging ;)

[ Voor 42% gewijzigd door TeeDee op 08-11-2006 16:53 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

Verwijderd

TeeDee schreef op woensdag 08 november 2006 @ 15:46:
Je kan dus eigenlijk ook 'if(doeBelangrijkeDingen())' neerzetten?
Nee, het volledige statement verdwijnt als je het zonder debug parameters compileert ;)

------------------------
en wat betreft de openstaande vragen: Wat FallenAngel666 zei...

Acties:
  • 0 Henk 'm!

  • PhysicsRules
  • Registratie: Februari 2002
  • Laatst online: 31-03 07:26

PhysicsRules

Dux: Linux voor Eenden

TeeDee schreef op woensdag 08 november 2006 @ 16:36:
[...]


Och, dan is het niet fout. Dan wist je alleen de veeeeeel handigere dingen niet ;) Qua code is het imo niet zo heel erg fout.
[...]

Ah, had wel even gauw wat opgezocht over assert, wist alleen niet dat het zoveel te maken had met debugging ;)
De code is niet fout, nee :) Maar over slechte programmeervoorbeelden gesproken :P. Om over de performance maar te zwijgen :'(

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 12-09 17:37

TeeDee

CQB 241

PhysicsRules schreef op woensdag 08 november 2006 @ 16:54:
[...]

De code is niet fout, nee :) Maar over slechte programmeervoorbeelden gesproken :P. Om over de performance maar te zwijgen :'(
Dat is gewoon gebrek aan kennis. Op zich is het een mooi stuk code :P Performance inderdaad zal ver te zoeken zijn.

Zo heb ik er ook nog wel eentje. In een van mijn eerste .Net 1.1 projecten heel stoer aan de slag met een BasePage.cs.
C#:
1
2
3
4
public class BasePage
{
    ... // doe allemaal leuke dingen
}
En een default.aspx.cs
C#:
1
2
3
4
5
6
7
public class _default : System.Web.UI.Page
{
    ... // doe allemaal leuke dingen maar ook
    BasePage bp = new BasePage();
    literalPageTitle = bp.GetPageTitle;
    //etc. etc.
}
Terwijl je zoiets eigenlijk beter gewoon zo kan doen:
C#:
1
2
3
4
public class BasePage : System.Web.UI.Page
{
    ... // doe allemaal leuke dingen
}
En een default.aspx.cs
C#:
1
2
3
4
5
6
public class _default : BasePage
{
    ... // doe allemaal leuke dingen maar ook
    literalPageTitle = bp.GetPageTitle;
    //etc. etc.
}

Nadat ik daar achter was heb ik het e.e.a. herschreven. Scheelt performance EN regels code ;)
.oisyn schreef op woensdag 08 november 2006 @ 17:10:
Nou mis ik wat context, maar ik zou dat wat je daar doet nou niet echt per definitie beter noemen. Wat ik uit je code opmaak is dat EenWillekeurigeMethod een helper functie is en dus beter static had kunnen zijn. Gewoon maar van classes extenden zodat je hun methodes aan kunt roepen zonder een instantie te new'en is iig nooit een goed idee.
Slecht voorbeeld inderdaad. Maak anders van EenWillekeurigeMethod wat Propertie getters. Het is in ieder geval geen HelperMethod. Zal er straks nog eens induiken of ik het kan verduidelijken.

[ Voor 23% gewijzigd door TeeDee op 08-11-2006 17:17 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-09 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nou mis ik wat context, maar ik zou dat wat je daar doet nou niet echt per definitie beter noemen. Wat ik uit je code opmaak is dat EenWillekeurigeMethod een helper functie is en dus beter static had kunnen zijn. Gewoon maar van classes extenden zodat je hun methodes aan kunt roepen zonder een instantie te new'en is iig nooit een goed idee.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Punksmurf
  • Registratie: September 2002
  • Laatst online: 06-01-2024
therat10430 schreef op maandag 30 oktober 2006 @ 12:51:
code:
1
2
If Jeugdigen.Geslacht = True Then txt_Geslacht.ListIndex = 1
If Jeugdigen.Geslacht = False Then txt_Geslacht.ListIndex = 0


:P imho is dit het stuk gekste code dat ik in tijden heb geschreven! (:P een true boolean is een mannetje en een false een vrouwtje..)
Sowieso is het vrij inefficiënt, waarom zou je twee if statements gebruiken?
code:
1
2
3
4
5
If Jeugdigen.Geslacht = True Then
  txt_Geslacht.ListIndex = 1
Else
  txt_Geslacht.ListIndex = 0
EndIf

En als je iets van C hebt ofzo...
code:
1
txt_Geslacht.ListIndex = Jeugdigen.Geslacht ? 1 : 0;

Ook vind ik het vreemd dat je een listbox prefixed met txt_, neem dan lst_ ofzo :)

Laatst kwam ik het volgende tegen:
code:
1
2
3
4
5
6
7
if (anInt != 1) {
  foo();
} else {
  if (anInt == 1) {
    bar();
  }
}

Ook een lekkere zinloze if :P

Leuk topic :) zal eens zien of ik wat heb wat leuk genoeg is om hier te plaatsen maar niet zo erg dat ik me er hard voor schaam :+

[ Voor 6% gewijzigd door Punksmurf op 08-11-2006 19:45 ]

met een hamer past alles


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 08-09 11:33
@ Punksmurf

Klopt
Klopt
Klopt
:P maar het was dan ook een slecht programmeervoorbeeld :P het was VB btw

(doh, geloof het of niet, maar ik "programmeer" al enkele jaren een beetje met VB, en ik begin nu bas de handigheid van
code:
1
2
3
4
If blaat = true then
geengeblaat = false
nogmeer = true
end if

en
code:
1
2
3
4
5
6
7
8
Select Case iInteger

Case is 1
'code
Case is 2
'code

etc.

daarvoor gebruikte ik een bulk goto's en rijtjes if's :P maar het werkte wel! en heb er hele leuke programma's mee geschreven, laatst kwam ik een stukje programma tegen (te lange foute code om hier te plakken, dat vinden de modjes niet leuk denk ik) wat ik heb geschreven, wat geloof ik met 4 case selects zo gedaan had kunnen worden, maar waar ik echt 3 meter code voor nodig had :P

[ Voor 78% gewijzigd door roy-t op 12-11-2006 17:39 ]

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • EdwinG
  • Registratie: Oktober 2002
  • Laatst online: 12-09 20:53
therat10430 schreef op zondag 12 november 2006 @ 17:36:
[...]
daarvoor gebruikte ik een bulk goto's en rijtjes if's :P maar het werkte wel! en heb er hele leuke programma's mee geschreven, laatst kwam ik een stukje programma tegen (te lange foute code om hier te plakken, dat vinden de modjes niet leuk denk ik) wat ik heb geschreven, wat geloof ik met 4 case selects zo gedaan had kunnen worden, maar waar ik echt 3 meter code voor nodig had :P
Plaats dan een externe link, lijkt me een prima foute code. :)

Bezoek eens een willekeurige pagina


Acties:
  • 0 Henk 'm!

  • Paul
  • Registratie: September 2000
  • Laatst online: 12-09 20:09
Ik zit hier een programma te maken voor het .Net Compact Framework 1.nogwat
Daarin zitten nogal wat dingen die wel in .Net 1.1 zitten niet, .Net CF is pas vanaf 2.0 een beetje volwassen zeg maar :+

Om dat de ondervangen had ik een aantal kleine proceduretjes:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
namespace (bedrijfsnaam)
{
    public class GenericTools
    {
        public static string MD5HashString(string s)
        {
            // stukje code gecopy/pase van OpenNetCF-forums
        }

        public static string ReadINIString(string Section, string Key, string DefaultValue, string FileName)
        {
            // StreamReader / peek / readline. / if startswith("["+Section) etc etc)
        }
    }
}

Notice alle static-statements :+ Ik had namelijk vaak maar 1 ding eruit nodig, en er zit niet echt een samenhang tussen alle items, dus ik dacht het zo nog wel netjes opgelost te hebben.

Totdat ik me bedacht dat ik moest gaan multithreaden (met name om de UI rsponsive te houden) :(
Ik heb echter in veel klassen maar 1 aanroep uit de hele tools-collectie nodig. Nu staat er dus een aantal keer
C#:
1
2
3
4
5
6
7
// in CommunicationFactory:
(bedrijfsnaam).GenericTools tools = new (bedrijfsnaam).GenericTools();
string comm = tools.ReadINIString("Program", "Send", "TCP", tools.ApplicationDir + "\\TrackTrace.ini");

// in DatabaseFactory:
(bedrijfsnaam).GenericTools tools = new (bedrijfsnaam).GenericTools();
string database = tools.ReadINIString("Program", "Save", "SQLCE", tools.ApplicationDir + "\\TrackTrace.ini");
waarna tools al meteen opgeruimd kan worden :+

GenericTools omdat ik ook nog een SocketTools heb (voor TCP-communicatie met een Delphi/Indy TIdTCPServer) en er misschien nog wel meer komen.
ApplicationDir is een "Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName);" die in de constructor in een string met getter wordt gezet.

Ik weet zo alleen niet welke van de 2 ik het slechtste vind: procedureel programmeren door het allemaal static te maken, of steeds een klasse instantieren om er vervolgens 1 method uit te gebruiken :+

Ik moet trouwens nog eens een keer een C# coding-convention opsnorren want ik heb eigenlijk geen idee of ik het nu een beetje goed doe, wat dus ook een WTFje is ;( :P

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ik zie het probleem niet zo met allemaal static "Util" functies. Zolang die functies totaal geen context nodig hebben buiten de parameters die ze mee krijgen en ook totaal niet samenhangend zijn vindt ik het echt niet zo'n foute oplossing.

Ook voor multithreading moet het geen probleem zijn zolang je maar niet een hele rij static fields gaat gebruiken.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Moet je in C# een class instantieren voordat je een static method kan gebruiken?

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Paul
  • Registratie: September 2000
  • Laatst online: 12-09 20:09
Nee, je hoeft een class niet te instantieren voordat je de static dingen kunt gebruiken.

Ik kan het mis hebben hoor, en dan hoor ik het graag, maar een static method bestaat slechts 1x. Als ik in 2 threads tegelijk ReadINIString aanroep lijkt me dus de ene (verwijzing naar) StreamReader de andere te overschijven etc?

a: reader = new StreamReader(filename);
a: reader.ReadLine();
a: reader.ReadLine();

<suspend a>

b: reader = new StreamReader(filename);

<suspend b, ga verder met a>

a: reader.blabla <- cursor staat op de verkeerde regel, om het nog maar niet te hebben over de op te zoeken sectie en key?

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-09 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Michali schreef op maandag 13 november 2006 @ 12:11:
Moet je in C# een class instantieren voordat je een static method kan gebruiken?
Dat zou wel een beetje tegen het hele static gebeuren ingaan, vind je ook niet?

Hoe zou dit anders ooit werken? :)
C#:
1
2
3
4
5
6
class MyClass
{
    private MyClass() { /* ... */ }

    public MyClass Create() { return new MyClass(); }
}
Paul Nieuwkamp schreef op maandag 13 november 2006 @ 12:20:
Nee, je hoeft een class niet te instantieren voordat je de static dingen kunt gebruiken.

Ik kan het mis hebben hoor, en dan hoor ik het graag, maar een static method bestaat slechts 1x. Als ik in 2 threads tegelijk ReadINIString aanroep lijkt me dus de ene (verwijzing naar) StreamReader de andere te overschijven etc?
Natuurlijk niet, hoe werken recursieve functies anders goed? :) Elke functie heeft uiteraard z'n lokale context, en die variabelen bestaan per aanroep van de functie (op de stack). Elke functieaanroep creeert dus z'n eigen StreamReader.

[ Voor 43% gewijzigd door .oisyn op 13-11-2006 12:34 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Paul
  • Registratie: September 2000
  • Laatst online: 12-09 20:09
.oisyn schreef op maandag 13 november 2006 @ 12:32:
Natuurlijk niet, hoe werken recursieve functies anders goed? :) Elke functie heeft uiteraard z'n lokale context, en die variabelen bestaan per aanroep van de functie (op de stack). Elke functieaanroep creeert dus z'n eigen StreamReader.
Daar had ik nog niet aan gedacht eigenlijk, aan die recursieve functies.

Dan kan ik het dus weer ombouwen naar static functies, scheelt weer een klasse instantieren en is iets duidelijker.

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Het ligt er natuurlijk wel een beetje aan hoe je het doet. Als je het zo doet is het geen probleem
C#:
1
2
3
4
5
6
7
8
class Util
{
    public static void DoeIets()
    {
        Reader r = new Reader();
        r.Read();
    }
}

De reader wordt dan gewoon in zijn eigen scope aangemaakt en dat haalt niet uit met multi-threading.

Als je het zo doet gaat het natuurlijk wel fout
C#:
1
2
3
4
5
6
7
8
9
10
class Util
{
    private static Reader r;

    public static void DoeIets()
    {
        r = new Reader();
        r.Read();
    }
}

In dit geval kunnen meerdere threads tegelijk gebruik proberen te maken van "r" omdat het uit dezelfde context komt

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Paul
  • Registratie: September 2000
  • Laatst online: 12-09 20:09
Mijn denkfout was dat die 2 hetzelfde waren bij static dingen :) Ik heb (uiteraard) de StreamReader (en de bool "rightSection" en de string "line" en de andere dingen in andere methods) binnen de method :) Ik mag al veel te veel legacy-code onderhouden waarbij vrijwel alle variabelen in zo globaal mogelijk gedeclareerd zijn :X

Enige static class member wordt dan applicationDir, maar die heeft een initialization, geen assignment :)

[ Voor 4% gewijzigd door Paul op 13-11-2006 13:12 ]

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Het enige wat er zou kunnen gebeuren is dat je bestand gelocked wordt en dat je hem bij de 2de call niet kan lezen. Maar ik denk niet dat hij standaard locked.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Michali schreef op maandag 13 november 2006 @ 16:08:
Het enige wat er zou kunnen gebeuren is dat je bestand gelocked wordt en dat je hem bij de 2de call niet kan lezen. Maar ik denk niet dat hij standaard locked.
Maar dat probleem heb je net zo hard als de methode niet static is ;)

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Ben bezig met datastructuren, vond dit wel grappig van mezelf:
Dit:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// verwijder alles van otherList uit list
    public void removeAll(MyList otherList) {
        Object o = new Object();
        // fetch een object uit otherList
        // en sla deze op in een object
        for (int i = 0; i < otherList.size(); i++) {
            
            o = otherList.get(i);
            
            // loop het data-array langs voor overeenkomstige objecten
            for (int j = 0; j < data.length; j++) {
                
                // als het object overeenkomt met data[j]
                if(o.equals(data[j])) {
                    
                    // verwijder het object uit list
                    remove(o);
                   
                }
            }
        }
       
    }


Werd:
Java:
1
2
3
4
5
6
7
public void removeAll(MyList otherList) {
        for (int i = 0; i < otherList.size(); i++) {
            remove(otherList.get(i));
            
        }
       
    }

[ Voor 4% gewijzigd door Verwijderd op 23-11-2006 15:26 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-09 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Vooral regel 3 :X

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Verwijderd schreef op donderdag 23 november 2006 @ 15:24:
Java:
1
2
3
4
5
6
7
public void removeAll(MyList otherList) {
        for (int i = 0; i < otherList.size(); i++) {
            remove(otherList.get(i));
            
        }
       
    }
Misschien nog even gebruik maken van een Iterator? Een LinkedList implementatie wordt hier niet zo blij van.

Verwijderd

Tis een custom build collection aan de hand van wat oefeningen, zo fancy is het nog (lang) niet.
Tis overigens geen LinkedList implementatie maar een ArrayList, LinkedList is het volgende hoofdstuk ;)

  • Ivo
  • Registratie: Juni 2001
  • Laatst online: 14-01 18:01

Ivo

Het zou sowieso mis moeten gaan als MyList zich als een normale lijst zou gedragen. Stel je voert de procedure een lijst met twee elementen dan wordt eerst het eerste element verwijderd en vervolgens i met 1 verhoogd. i heeft dan de waarde 1 en otherList.size() ook. De test i < otherList.size() faalt dan en de lijst is niet leeg aan het einde van de aanroep.

  • Paul
  • Registratie: September 2000
  • Laatst online: 12-09 20:09
Volgens mij verwijdert hij sowieso maar de helft van de items :)
C#:
1
2
3
4
while (!otherList.IsEmpty)
{
    otherList.Remove(0);
}

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


Verwijderd

Ivo schreef op donderdag 23 november 2006 @ 16:47:
Het zou sowieso mis moeten gaan als MyList zich als een normale lijst zou gedragen. Stel je voert de procedure een lijst met twee elementen dan wordt eerst het eerste element verwijderd en vervolgens i met 1 verhoogd. i heeft dan de waarde 1 en otherList.size() ook. De test i < otherList.size() faalt dan en de lijst is niet leeg aan het einde van de aanroep.
hoezo zou een lijst met twee elementen size() == 1 returnen?

  • Theuno
  • Registratie: Juni 2001
  • Laatst online: 10:53

Theuno

Da Devil Crew

break, continues en returns halverwege de functie zijn gewoon niet netjes. Ze kunnen misschien prima voldoen, maar onderhoudbaar is het niet meer.

voorbeeld, programmeur maakt:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void iets::watanders() 
{
    zowat hBar = m_hMainFrm->GetHandle();
    if(hBar.HasObject())
    {
            if(hBar.HasFocus())
            {
                   // doe iets
        }
        else
        {
            // doe iets
            return;
        }
    }
    else if(m_hMainFrm->HasParent())
    {
        // je snapt het idee, hier kan ook wat gebeuren...
    }
}


Programmeur 2 krijgt de code, en moet deze uitbreiden... en maakt ervan:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void iets::watanders() 
{
    while(true)
    {
        zowat hBar = m_hMainFrm->GetHandle();
        if(hBar.HasObject())
        {
                if(hBar.HasFocus())
                {
                       // doe iets
            }
            else
            {
                // doe iets
                break;
            }
        }
        else if(m_hMainFrm->HasParent())
        {
            // je snapt het idee, hier kan ook wat gebeuren...
        }
        break;
    }
    // uitbreiding functie...
}



Okee, je raad het al... programmeur 3.

Dit komt gewoon voor, als je de returns netjes afvangt met if/else etc. dan hoeft de volgende programmeur niet alles om te coden, of om voor dit soort vieze dingen te kiezen.

Theuno - Da Devil Crew - Een programmeur is iemand die koffie omzet in software...
Nu nog betere koffie...


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-09 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ivo schreef op donderdag 23 november 2006 @ 16:47:
Het zou sowieso mis moeten gaan als MyList zich als een normale lijst zou gedragen. Stel je voert de procedure een lijst met twee elementen dan wordt eerst het eerste element verwijderd en vervolgens i met 1 verhoogd. i heeft dan de waarde 1 en otherList.size() ook. De test i < otherList.size() faalt dan en de lijst is niet leeg aan het einde van de aanroep.
Paul Nieuwkamp schreef op donderdag 23 november 2006 @ 16:53:
Volgens mij verwijdert hij sowieso maar de helft van de items :)
C#:
1
2
3
4
while (!otherList.IsEmpty)
{
    otherList.Remove(0);
}
Beter kijken, hij laat de originele lijst intact :)

[ Voor 33% gewijzigd door .oisyn op 23-11-2006 17:05 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • EnsconcE
  • Registratie: Oktober 2001
  • Laatst online: 19-06 00:07
Deze gaat toch een stuk sneller:
Java:
1
2
3
public void removeAll(MyList otherList) {
       otherList.clear();
}

  • Paul C
  • Registratie: Juni 2002
  • Laatst online: 09:58
EdwinG schreef op woensdag 08 november 2006 @ 14:04:
En wat nou als je over 30 jaar verder wilt werken? Geen probleem.
PHP:
1
2
3
4
5
if(!session_id()){
  session_start();
}
ini_set('session.gc_maxlifetime',3600000*24*30);
//lifetime a bit high, irritating otherwise.
Vindt ik dit nou als enigste raar, of is 3600sec * 24uur * 30dagen ineens 3650dagen?

Verwijderd

De functie removeAll(MyList otherList) verwijdert alleen de elementen die otherList voorkomen uit de originele MyList die, zoals .oisyn al aangaf, gewoon intact blijftt.

otherList.clear() zou dus de otherList leegmaken wat totaal niet de bedoeling is, sneller leeg ja, gewenst resultaat, nee :)

  • EdwinG
  • Registratie: Oktober 2002
  • Laatst online: 12-09 20:53
pcmadman schreef op donderdag 23 november 2006 @ 17:25:
[...]

Vindt ik dit nou als enigste raar, of is 3600sec * 24uur * 30dagen ineens 3650dagen?
Het zijn 3600000 secondes, dus 1.000 uur, dat * 24 * 30 levert 1.000 maanden op.
session.gc_maxlifetime integer

session.gc_maxlifetime specifies the number of seconds after which data will be seen as 'garbage' and cleaned up.

[ Voor 23% gewijzigd door EdwinG op 23-11-2006 17:33 ]

Bezoek eens een willekeurige pagina


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Theuno schreef op donderdag 23 november 2006 @ 17:01:
break, continues en returns halverwege de functie zijn gewoon niet netjes. Ze kunnen misschien prima voldoen, maar onderhoudbaar is het niet meer.

voorbeeld, programmeur maakt:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void iets::watanders() 
{
    zowat hBar = m_hMainFrm->GetHandle();
    if(hBar.HasObject())
    {
            if(hBar.HasFocus())
            {
                   // doe iets
        }
        else
        {
            // doe iets
            return;
        }
    }
    else if(m_hMainFrm->HasParent())
    {
        // je snapt het idee, hier kan ook wat gebeuren...
    }
}


Programmeur 2 krijgt de code, en moet deze uitbreiden... en maakt ervan:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void iets::watanders() 
{
    while(true)
    {
        zowat hBar = m_hMainFrm->GetHandle();
        if(hBar.HasObject())
        {
                if(hBar.HasFocus())
                {
                       // doe iets
            }
            else
            {
                // doe iets
                break;
            }
        }
        else if(m_hMainFrm->HasParent())
        {
            // je snapt het idee, hier kan ook wat gebeuren...
        }
        break;
    }
    // uitbreiding functie...
}



Okee, je raad het al... programmeur 3.

Dit komt gewoon voor, als je de returns netjes afvangt met if/else etc. dan hoeft de volgende programmeur niet alles om te coden, of om voor dit soort vieze dingen te kiezen.
Ik vindt returns in functies helemaal niet altijd slecht hoor. Je moet er idd wel erg mee oppassen maar in bijvoorbeeld het volgende voorbeeld is het wel een stuk netter als het alternatief met een grote if
C#:
1
2
3
4
5
6
7
public void DoSomething()
{
    if( !CheckSomething() )
        return;
    
    //Hier de rest van je functie
}

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Paul
  • Registratie: September 2000
  • Laatst online: 12-09 20:09
EnsconcE schreef op donderdag 23 november 2006 @ 17:11:
Deze gaat toch een stuk sneller:
Java:
1
2
3
public void removeAll(MyList otherList) {
       otherList.clear();
}
Ik ging er even vanuit dat removeAll (mede door de naam) de clear() _is_ :P
Verwijderd schreef op donderdag 23 november 2006 @ 17:27:
De functie removeAll(MyList otherList) verwijdert alleen de elementen die otherList voorkomen uit de originele MyList die, zoals .oisyn al aangaf, gewoon intact blijftt.

otherList.clear() zou dus de otherList leegmaken wat totaal niet de bedoeling is, sneller leeg ja, gewenst resultaat, nee :)
Ik vond het al een rare combinatie van procedureel en OO programmeren :P
Ik ben meer Delphi gewend, en daar is om te beginnen de functiedeclaratie (of eigenlijk, daar zou dit de implementatie zijn) een stuk duidelijker. Ook de losse "remove" is redelijk verwarrend :P Ik verwarde het even met C's "delete" zeg maar :+
Delphi:
1
2
3
4
5
6
procedure TMyList.RemoveAll(otherList: TMyList)
var i: integer;
begin
  for i := otherList.Size - 1 downto 0 do
    this.Remove(otherList[i]);
end;
De "this" is niet helemaal nodig, maar het maakt, zeker in procedures/functies die bewerkingen doen op een andere instantie van hetzelfde object dan waar ze zelf toe behoren, het verschill tussen beide objecten wat duidelijker :)

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

.oisyn schreef op maandag 13 november 2006 @ 12:32:
[...]

Dat zou wel een beetje tegen het hele static gebeuren ingaan, vind je ook niet?

Hoe zou dit anders ooit werken? :)
C#:
1
2
3
4
5
6
class MyClass
{
    private MyClass() { /* ... */ }

    public MyClass Create() { return new MyClass(); }
}
Het zal ook niet werken...

ASSUME makes an ASS out of U and ME


  • Robtimus
  • Registratie: November 2002
  • Nu online

Robtimus

me Robtimus no like you

Paul Nieuwkamp schreef op donderdag 23 november 2006 @ 19:16:
Ik ging er even vanuit dat removeAll (mede door de naam) de clear() _is_ :P
Ik gok even dat dit de Collection's removeAll is.

Er zijn 4 bulk operators, die met Sets het beste uitgelegd kunnen worden:
- set1.containsAll(set2) returned of set2 een subset is van set1
- set1.retainAll(set2) zorgt ervoor dat set1 de doorsnede is van set1 en set2
- set1.removeAll(set2) zorgt ervoor dat set1 het verschil is tussen set1 en set2, ook wel set1 - set2
- set1.addAll(set2) zorgt ervoor dat set2 de vereniging is van set1 en set2.

Ik had dat ook niet meteen door dat deze removeAll bedoeld werd, maar deze vier methods kunnen verdomd handig zijn.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Paul
  • Registratie: September 2000
  • Laatst online: 12-09 20:09
IceManX schreef op donderdag 23 november 2006 @ 20:55:
[...]
Ik gok even dat dit de Collection's removeAll is.
Ik was er al achter dat ik fout zat ja :P
- set1.addAll(set2) zorgt ervoor dat set2 de vereniging is van set1 en set2.
Dat is een typo?
Het lijkt me dat al dat soort bulk operators aan set2 niets veranderen, dat je dus in de functiedeclaratie set2 const kunt maken? Anders moet je per functie gaan kijken/onthouden welke set het nu precies aan gaat passen :)

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


Verwijderd

Als in Java "Object o = new Object();" net zo duur is als TObject.Create in Delphi, kost 't nauwelijks iets, al is 't wel volstrekt overbodig: een paar regels later wordt 'ie toch opnieuw geassigned...

Delphi:
1
2
3
constructor TObject.Create;
begin
end;

  • Robtimus
  • Registratie: November 2002
  • Nu online

Robtimus

me Robtimus no like you

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-09 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Waarom niet?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Depress
  • Registratie: Mei 2005
  • Laatst online: 25-08 14:07
Ik was voor school aan een project je bezig. Nu moest ik een lijst hebben. Maar wist niet hoelang die van te voren is. Dus ik maakt een hele grote array, en maakte toen een nieuwe array van de gewenste grote door de eerste array de gevulde items te tellen.

Dit was mijn baksel er voor:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
    public void Functie()
        {
            Random RandomGenerator = new Random();
            int BuildingWidth;
            int BuildingPadding;
            int Counter = 0;
            int SizeUsed = 0;
            Building[] BuildingsTemp = new Building[25];
            Boolean MaxBuildingsReached = false;

            int BuildingSpace = 300;

            //creating the buildings; Width of a building is 10 - 15; Space between buildings 5-8
            while (!MaxBuildingsReached)
            {
                
                BuildingWidth = RandomGenerator.Next(10, 15);
                BuildingPadding = RandomGenerator.Next(5, 8);

                if (SizeUsed + BuildingPadding + BuildingWidth > BuildingSpace)
                    MaxBuildingsReached = true;
                else
                    BuildingsTemp[Counter] = new Building(SizeUsed + BuildingPadding, 2, RandomGenerator.Next(30, 50), BuildingWidth);

                SizeUsed = SizeUsed + BuildingPadding + BuildingWidth; 

                Counter++;

            }

            //Dit is omdat er voor te zorgen dat er geen lege items in de array zitten. 
            //Je maakt een array van 25 met misschien maar 15 items, dit is niet netjes en moet dus even opgelost worden!
            this.Buildings = new Building[Counter];

            for (int I = 0; I < Counter; I++ )
            {

                this.Buildings[I] = BuildingsTemp[I];

            }
           
        }


Ernstig fout dus :') Ik heb toen maar gouw generics gebruikt :-)

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Het is een beetje een vreemde methode, maar ik snap alleen niet hoe generics bijdraagt aan een nettere. Een speciale collectie class (waarvan ik aanneem dat deze gewoon in het framework zit) welke zelf automatisch oprekt zou gewoon goed moeten werken.

Overigens vind ik die nietszeggende magic numbers ook erg lelijk. Ik hoop dat je die hebt vervangen door informatieve constanten.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
Ik weet niet of het al eerder langsgekomen is, maar het duurde even voordat ik deze fout gevonden had. Was iets als dit:

C#:
1
2
3
4
5
6
Queue<String> queue = new Queue<String>();

for(int i=0; i<queue.Count; i++) {
    String s = queue.Dequeue();
    // doe wat met s...
}

(hier zou het ook met een while kunnen idd :))

[ Voor 10% gewijzigd door user109731 op 24-11-2006 09:50 ]


Acties:
  • 0 Henk 'm!

  • EnsconcE
  • Registratie: Oktober 2001
  • Laatst online: 19-06 00:07
Depress schreef op donderdag 23 november 2006 @ 22:43:
Ik was voor school aan een project je bezig. Nu moest ik een lijst hebben. Maar wist niet hoelang die van te voren is. Dus ik maakt een hele grote array, en maakte toen een nieuwe array van de gewenste grote door de eerste array de gevulde items te tellen.

Dit was mijn baksel er voor:
C#:
1
    ...


Ernstig fout dus :') Ik heb toen maar gouw generics gebruikt :-)
Ik kan niet in c# programmeren, maar het lijkt me dat de array grootte van te voren niet vast gesteld hoeft te worden?

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 12-09 23:07
EnsconcE schreef op vrijdag 24 november 2006 @ 10:19:
[...]


Ik kan niet in c# programmeren, maar het lijkt me dat de array grootte van te voren niet vast gesteld hoeft te worden?
Als je je array grootte niet vaststeld, alloceer je ook geen geheugen, en dat gaat dus snel fout :)
Ernstig fout dus :') Ik heb toen maar gouw generics gebruikt :-)
Ik zie niet in wat generics hier mee te maken hebben. :) (Je kan het gebruiken, maar is niet noodzakelijk). De oplossing is hier gewoon om een collectie te gebruiken, en als die nu generic is of niet, doet niet ter zake.

[ Voor 30% gewijzigd door whoami op 24-11-2006 10:21 ]

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • EnsconcE
  • Registratie: Oktober 2001
  • Laatst online: 19-06 00:07
Wat ik nog wel eens vergeet is het controleren van een variabele of zijn waardes correct zijn:
PHP:
1
2
3
$var = $_GET['var'];

functie($var);

Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 25-08 14:07
whoami schreef op vrijdag 24 november 2006 @ 10:20:
[...]

Als je je array grootte niet vaststeld, alloceer je ook geen geheugen, en dat gaat dus snel fout :)


[...]

Ik zie niet in wat generics hier mee te maken hebben. :) (Je kan het gebruiken, maar is niet noodzakelijk). De oplossing is hier gewoon om een collectie te gebruiken, en als die nu generic is of niet, doet niet ter zake.
Het ging om het voorbeeld en generics zijn lijsten die gewoon aangevult kunnen worden. Ik had er net zogoed lijsten neer kunnen zetten.

Maar om in te gaan @ Hierboven dat arrays zonder lengte gemaakt kunnen worden is onzin. Voor elke variable reserveer je geheugen. Wanneer je dat niet doet is er geen geheugen om naar te schrijven en krijg je errors alla Error at 0x0000 (Delphi), VS vangt dit netjes af en zegt dat je het New statment ergens moet gebruiken met nog enkele andere tips.

De Niets zeggende numbers zijn ook idd weg, leraar vond het wat onduidelijk :)

Acties:
  • 0 Henk 'm!

  • bat266
  • Registratie: Februari 2004
  • Laatst online: 24-08 06:41
generics is toch het principe dat je een generieke lijst specifiek maakt voor een bepaald type ? Of zit ik nu fout

@ hieronder dat wist ik niet maar d8 dat ik iets niet helemaal begreep en verkeerd idee had uit bovenstaande post

[ Voor 34% gewijzigd door bat266 op 24-11-2006 11:58 ]

Better to remain silent and be thought a fool then to speak out and remove all doubt.


Acties:
  • 0 Henk 'm!

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 00:05
bat266 schreef op vrijdag 24 november 2006 @ 11:54:
generics is toch het principe dat je een generieke lijst specifiek maakt voor een bepaald type ? Of zit ik nu fout
Daar kun je generics voor gebruiken, maar generics zijn niet beperkt tot alleen gebruik in lijsten.

Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 25-08 14:07
En dat is de kracht van Generics :)

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Depress schreef op vrijdag 24 november 2006 @ 11:51:
Het ging om het voorbeeld en generics zijn lijsten die gewoon aangevult kunnen worden. Ik had er net zogoed lijsten neer kunnen zetten.
Hoe kom je daar bij? Generics is het principe waarbij je parameteriseerbare classes (en methods) kunt kunt maken, een soort van template classes dus. Dat houdt in dat je pas bij het gebruik van de class een of meer andere classes opgeeft welke binnen die class gebruikt worden. Dit is handig omdat je dan type safe kunt werken, ook als je van te voren het te gebruiken type niet weet. Dat heeft direct helemaal niets met lijsten te maken.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 12-09 23:07
^^ Wat Michali zegt, en hij zegt ook meteen wat de kracht is van Generics.
De kracht van generics is niet dat het niet beperkt is tot collections.
Het ging om het voorbeeld en generics zijn lijsten die gewoon aangevult kunnen worden. Ik had er net zogoed lijsten neer kunnen zetten.
Generics zijn dus geen Lijsten. Collections zijn 'lijsten', en Collections en Generics zijn nu ff net even heel iets anders.

[ Voor 49% gewijzigd door whoami op 24-11-2006 12:49 ]

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
whoami schreef op vrijdag 24 november 2006 @ 12:48:
^^ Wat Michali zegt, en hij zegt ook meteen wat de kracht is van Generics.
De kracht van generics is niet dat het niet beperkt is tot collections.


[...]

Generics zijn dus geen Lijsten. Collections zijn 'lijsten', en Collections en Generics zijn nu ff net even heel iets anders.
Collections zijn geen 'lijsten' :+. Collections zijn 'Verzamelingen'

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
rwb schreef op vrijdag 24 november 2006 @ 13:31:
[...]

Collections zijn geen 'lijsten' :+. Collections zijn 'Verzamelingen'
Ach, een verzameling is niet veel meer dan een ongeordende lijst hoor. ;)

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 01-09 22:18
Depress schreef op donderdag 23 november 2006 @ 22:43:

Ernstig fout dus :') Ik heb toen maar gouw generics gebruikt :-)
Ik snap niet hoe je kunt programmeren als je de Nederlandse syntaxis niet eens correct kunt noteren. Programmeersyntaxis is wel wat foutgevoeliger.

Maar even on-topic: Hoe zou je het doen in .NET 1.1?

[ Voor 29% gewijzigd door Mastermind op 25-11-2006 01:39 ]


Acties:
  • 0 Henk 'm!

  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 05-08 09:21

Not Pingu

Dumbass ex machina

Ik denk dat ie generic collections bedoelt en het woord generic verkeerd gebruikt.

Certified smart block developer op de agile darkchain stack. PM voor info.


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Grijze Vos schreef op vrijdag 24 november 2006 @ 13:35:
[...]

Ach, een verzameling is niet veel meer dan een ongeordende lijst hoor. ;)
In mijn ogen zijn boomstructuren en grafen geen lijsten, maar wel collecties.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Grijze Vos schreef op vrijdag 24 november 2006 @ 13:35:
[...]

Ach, een verzameling is niet veel meer dan een ongeordende lijst hoor. ;)
Een geordende lijst is ook een verzameling ;).

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • st0p
  • Registratie: April 2004
  • Laatst online: 19-07-2024
Mastermind schreef op zaterdag 25 november 2006 @ 01:38:
[...]

Ik snap niet hoe je kunt programmeren als je de Nederlandse syntaxis niet eens correct kunt noteren. Programmeersyntaxis is wel wat foutgevoeliger.

Maar even on-topic: Hoe zou je het doen in .NET 1.1?
ik zou een arraylist gebruiken

Acties:
  • 0 Henk 'm!

  • Pyrus
  • Registratie: November 2001
  • Laatst online: 12-09 20:54

Pyrus

Hardknock life

Eentje van mezelf uit de tijd dat ik net begon te klooien met php en mysql. De code ben ik inmiddels kwijt, maar weet wel nog wat ik fout deed. In plaats van auto_increment te gebruiken bij een id (en alleen een id te gebruiken op zinnige plaatsen) had ik er gewoon een int van gemaakt, eerst ophalen wat de MAX(id) was voordat ik ging invoegen, die met php +1 doen en dan daarmee inserten 8)7

LinkedIn


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Iets wat ik vrij vaak voorbij zie komen op dit forum :

PHP:
1
2
$string = "test";
echo "$string";


Het is sneller om single quotes te gebruiken omdat ie dan geen variabelen parsed... En als je enkel een string gaat echo-en nooit quotes gebruiken.

Acties:
  • 0 Henk 'm!

  • Suepahfly
  • Registratie: Juni 2001
  • Laatst online: 04-09 16:39
PHP:
1
2
3
4
5
6
$elements = "element1, element2, element3";
$array = explode(",", $elements);

$n =count($array);
for($i=0; $i < $n; $i++)
    $array[$i] = trim($array[$i]);

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Is dat letterlijke code of gewoon een voorbeeld van het algoritme? Als het er zo letterlijk staat is het een beetje vreemd natuurlijk, anders lijkt me er weinig mis mee, of ik moet er gewoon overheen lezen.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
je zou een foreach of array_map kunnen gebruiken natuurlijk...

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Eskimootje
  • Registratie: Maart 2002
  • Laatst online: 08:07
Volgens mij kun je gewoon de spatie extra meegeven in de eerste parameter van de explode functie dan hoef je niet nog een keer die te strippen.

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 11-09 13:55
Of
PHP:
1
$array = array("element1", "element2", "element3");
:?

Acties:
  • 0 Henk 'm!

  • EnsconcE
  • Registratie: Oktober 2001
  • Laatst online: 19-06 00:07
Dit:
frickY schreef op zondag 26 november 2006 @ 21:56:
Of
PHP:
1
$array = array("element1", "element2", "element3");
:?
Lijkt mij in het begin van deze code:
Suepahfly schreef op zondag 26 november 2006 @ 21:06:
PHP:
1
2
3
4
5
6
$elements = "element1, element2, element3";
$array = explode(",", $elements);

$n =count($array);
for($i=0; $i < $n; $i++)
    $array[$i] = trim($array[$i]);
niet overbodig. Het lijkt me zelfs efficienter, of zie ik hier wat over het hoofd?

Suepahfly, kun je misschien uitleggen wat er mis is met je code?

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Ik weet niet of dit valt onder slecht programeren, maar is een return verplicht ( niet op compiler level ) bij het schrijven van void's ?

Java:
1
2
3
4
5
6
7
....
public static void log_error(String error)
{
   System.out.println("Booo!! Fout:" + error);
   return;  //Is dit nodig bij een void?
}
....

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 11:25
Nee, dat is niet nodig (in java in elk geval niet, php ook niet)

Verbouwing


Acties:
  • 0 Henk 'm!

  • Paul
  • Registratie: September 2000
  • Laatst online: 12-09 20:09
Nodig niet, maar echt fout is is het ook niet echt. Je kunt het bijvoorbeeld gebruiken om bij foute input uit je procedure te springen (bij gebrek aan of ongewenst zijn van exceptions).

Als laatste statement in een procedure is het wel vrij loos ja :)

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Paul Nieuwkamp schreef op zondag 26 november 2006 @ 23:09:
...
uit je procedure te springen (bij gebrek aan of ongewenst zijn van exceptions).
...
Dit snap ik eigelijk niet echt?

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

Verwijderd

Snakiej schreef op zondag 26 november 2006 @ 23:11:
[...]

Dit snap ik eigelijk niet echt?
Stel dat je functie een bepaalde input heeft (bijvoorbeeld je error string) en die blijkt niet aan bepaalde eisen te voldoen, dan kan je je de uitvoer van je functie vroegtijdig afbreken ipv tot het einde te wachten:

Java:
1
2
3
4
5
6
7
8
9
10
.... 
public static void log_error(String error) 
{
   if(!goedeString(error)) return;
   
   // doe dingen
   System.out.println("Booo!! Fout:" + error); 
   return;  //Is dit nodig bij een void? - hier niet
} 
....

Acties:
  • 0 Henk 'm!

  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 11:25
Als je een exception vangt binnen een functie, bijvoorbeeld zo
Java:
1
2
3
4
5
6
7
//dit is al in de functie
try {
//iets
} catch(SomeError e) {
return;
}
//meer code

Als het je sommige fatale errors wilt negeren omdat dat niet uitmaakt kun je het gebruiken

Verbouwing


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Eskimootje schreef op zondag 26 november 2006 @ 21:54:
Volgens mij kun je gewoon de spatie extra meegeven in de eerste parameter van de explode functie dan hoef je niet nog een keer die te strippen.
Mwoah, als je die input ergens vandaan krijgt kunnen er wellicht ook tabs en newlines in zitten, dan ga ik liever voor de robuustere oplossing met trim erbij.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Suepahfly
  • Registratie: Juni 2001
  • Laatst online: 04-09 16:39
EnsconcE schreef op zondag 26 november 2006 @ 22:42:
Dit:

[...]


Lijkt mij in het begin van deze code:

[...]


niet overbodig. Het lijkt me zelfs efficienter, of zie ik hier wat over het hoofd?

Suepahfly, kun je misschien uitleggen wat er mis is met je code?
Zoals eerder opgemerkt is meteen een array maken het meest efficiente
Of
explode (", ", $elements);
Of
str_replace(" ", "", $elements);

Anyway ik kwam dit een keer tegen waar het werd gebruikt om een config var naar een array te zetten. Ik zat nog al te kijken naar de manier waarop de spaties werden verwijderd.

Acties:
  • 0 Henk 'm!

  • Tjeemp
  • Registratie: Januari 2005
  • Laatst online: 03-01-2015

Tjeemp

BEER N TEA

EnsconcE schreef op zondag 26 november 2006 @ 22:42:
Dit:

[...]


Lijkt mij in het begin van deze code:

[...]


niet overbodig. Het lijkt me zelfs efficienter, of zie ik hier wat over het hoofd?

Suepahfly, kun je misschien uitleggen wat er mis is met je code?
ik moet zeggen dat ik het toch wel eens gebruik... dat eerst van een string een array maken en dan een loop er doorheen (of iets dergelijks)... dit is omdat je een string niet kunt tellen, en als je nu in je database een string hebt met info die gescheiden moet worden... dit kan zijn omdat binnen een record er meerdere van een bepaald iets kunnen zijn, zo niet onbeperkt... in dit geval zou ik bij het uitlezen dan dit gebruiken...

www.timovanderzanden.nl | Beer 'n' Tea


Acties:
  • 0 Henk 'm!

  • EnsconcE
  • Registratie: Oktober 2001
  • Laatst online: 19-06 00:07
Tjeemp schreef op maandag 27 november 2006 @ 00:49:
[...]


ik moet zeggen dat ik het toch wel eens gebruik... dat eerst van een string een array maken en dan een loop er doorheen (of iets dergelijks)... dit is omdat je een string niet kunt tellen, en als je nu in je database een string hebt met info die gescheiden moet worden... dit kan zijn omdat binnen een record er meerdere van een bepaald iets kunnen zijn, zo niet onbeperkt... in dit geval zou ik bij het uitlezen dan dit gebruiken...
Ok, maar bij een voorgedefinieerde string kan je dan niet beter dit doen:
PHP:
1
$array = array(trim("element1"), trim("element2"), trim("element3"));

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Tjeemp schreef op maandag 27 november 2006 @ 00:49:
[...]


ik moet zeggen dat ik het toch wel eens gebruik... dat eerst van een string een array maken en dan een loop er doorheen (of iets dergelijks)... dit is omdat je een string niet kunt tellen, en als je nu in je database een string hebt met info die gescheiden moet worden... dit kan zijn omdat binnen een record er meerdere van een bepaald iets kunnen zijn, zo niet onbeperkt... in dit geval zou ik bij het uitlezen dan dit gebruiken...
Als je iets uit je database moet halen en dat moet je dan nog weer 'exploden' dan denk ik eerder dat er wat mis is met je database ontwerp

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
rwb schreef op maandag 27 november 2006 @ 09:49:
[...]

Als je iets uit je database moet halen en dat moet je dan nog weer 'exploden' dan denk ik eerder dat er wat mis is met je database ontwerp
Dat hoeft helemaal niet. Om peformance te sparen kun je in sommige gevallen best een lijstje met ID's comma separated opslaan in een veld. Niet dat dit vaak voorkomt, maar het kan, als het een bewuste overdachte keuze is, best een goede oplossing zijn.


De elementen direct in een array opslaan is natuurlijk de beste methode. Maar ik ga er vanuit dat $elements niet direct zo gevuld wordt. Of je dan een foreach, een for, array_map, preg_split, explode met een spatie, of wat dan ook gebruikt, is niet heel erg van belang. Ik zie het iig niet echt als een voorbeeld van slechte code, in geen enkele van de gevallen.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • EnsconcE
  • Registratie: Oktober 2001
  • Laatst online: 19-06 00:07
Michali schreef op maandag 27 november 2006 @ 10:51:
[...]

Dat hoeft helemaal niet. Om peformance te sparen kun je in sommige gevallen best een lijstje met ID's comma separated opslaan in een veld. Niet dat dit vaak voorkomt, maar het kan, als het een bewuste overdachte keuze is, best een goede oplossing zijn.


De elementen direct in een array opslaan is natuurlijk de beste methode. Maar ik ga er vanuit dat $elements niet direct zo gevuld wordt. Of je dan een foreach, een for, array_map, preg_split, explode met een spatie, of wat dan ook gebruikt, is niet heel erg van belang. Ik zie het iig niet echt als een voorbeeld van slechte code, in geen enkele van de gevallen.
Een database is er om dubbele data te voorkomen, niet dat je daar aan ontkomt maar je moet dat ten alle tijde voorkomen. Data die je vanuit een database in een database(lees lijst/array) moet stoppen, moet eigenlijk niet vanuit 1 cel komen. Dan ga je tegen het basisprincipe van een database in.

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Suepahfly schreef op maandag 27 november 2006 @ 00:38:
[...]


Zoals eerder opgemerkt is meteen een array maken het meest efficiente
Of
explode (", ", $elements);
Of
str_replace(" ", "", $elements);

Anyway ik kwam dit een keer tegen waar het werd gebruikt om een config var naar een array te zetten. Ik zat nog al te kijken naar de manier waarop de spaties werden verwijderd.
Ironisch genoeg, vond ik je eerste voorbeeld nette code, en bega je met de 'oplossing' een fout. Kijk eens naar de volgende mogelijk waarde:
PHP:
1
$element = "element 1, element2,element 3";

Ik vind de oplossing met trim dan nog het netste. Deze is namelijk het gemakkelijkst uit te breiden, en naar mijn idee het duidelijkst.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
EnsconcE schreef op maandag 27 november 2006 @ 10:55:
[...]


Een database is er om dubbele data te voorkomen, niet dat je daar aan ontkomt maar je moet dat ten alle tijde voorkomen. Data die je vanuit een database in een database(lees lijst/array) moet stoppen, moet eigenlijk niet vanuit 1 cel komen. Dan ga je tegen het basisprincipe van een database in.
Daar heb je ook gelijk in. Daarom zeg ik ook dat het niet vaak voorkomt en dat het alleen dient gebruikt te worden als het goed overdacht en een bewuste keuze is. In de meeste gevallen volstaat een associatie tabel beter, ook omdat je dan betere selects kunt doen.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • EnsconcE
  • Registratie: Oktober 2001
  • Laatst online: 19-06 00:07
Deze discussie brengt me overigens op een webapplicatie die ik kort geleden opgeleverd heb. In de database die erachterdraait heb ik de tijd en datum in 1 veld opgeslagen: uu:mm dd-mm-jjjj. Bij het in kaart brengen van de bezoekers en de tijdstippen heeft dat al tot de nodige problemen geleid. Als ik nu de bezoekers per dag wil zien dan moet ik hetvolgende doen:
PHP:
1
substr($stringUitDBmetTijdenDatum, 6, 2);


Aan de andere kant is natuurlijk de vraag, in hoeverre deel je de tijd op in tabellen?


de tijd en datum in ieder geval apart :Y)

[ Voor 5% gewijzigd door EnsconcE op 27-11-2006 11:40 ]


Acties:
  • 0 Henk 'm!

  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 11:25
EnsconcE > Je behoort je datum en tijd in een datum-en-tijd (date of time of datetime of wat je database daar ook voor ondersteunt) te zetten. Dan heeft je database daar functies voor om de juiste tijden uit te halen.

Verbouwing


Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

EnsconcE schreef op maandag 27 november 2006 @ 11:39:

de tijd en datum in ieder geval apart :Y)
Datum = tijd. Of is het na 24 uur opeens geen tijd meer? :)

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

  • EnsconcE
  • Registratie: Oktober 2001
  • Laatst online: 19-06 00:07
kenneth schreef op maandag 27 november 2006 @ 11:46:
[...]

Datum = tijd. Of is het na 24 uur opeens geen tijd meer? :)
da·tum (de ~ (m.), data/~s)
1 cijfers of woorden die dag, maand en jaar aangeven => dagtekening
2 dag, tijdstip
Met uitleg #1 wordt al duidelijk waar de datum niet overgaat, dat noemt men vervolgens de tijd.
Hoe laat is het?
De datum is 12:02. :+
@Mithrandir:
Je hebt gelijk, dat advies had ik idd al eerder gekregen. Vanwege problemen met een eerdere merge heb ik mij nog neit meer begeven op het gladde ijs wat ik complete dbase aanpassing noem. In de toekomst ga ik deze cellen misschien overzetten naar een meer geschikte datatype, op dit moment heb ik het vertrouwen neit en werkt het "prima" O-)

[ Voor 27% gewijzigd door EnsconcE op 27-11-2006 12:05 ]

Pagina: 1 2 ... 11 Laatste

Dit topic is gesloten.

Let op:
Uiteraard is het in dit topic niet de bedoeling dat andere users en/of topics aangehaald worden om ze voor gek te zetten. Lachen om je eigen code, of over dingen die je "wel eens tegengekomen bent" is prima, maar hou het onderling netjes. :)

Het is hier ook niet het "korte vraagjes" topic. Zie deze post