Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1326 Le 12/07/2012, à 19:22

Rolinh

Re : /* Topic des codeurs [7] */

Bah, on a déjà pas mal parlé des goto sur ce topic tongue

J'allais écrire pareil que grim7reaper ("Beaucoup de gens crachent dessus car c’est souvent utilisé à mauvais escient").
Je pense que la raison vient du fait que lorsque l'on parle des goto à un débutant, il a tendance à les utiliser de façon "naturelle" afin de faire des boucles ou autre alors que ce n'est pas la bonne manière de les utiliser.

J'utilise en général des goto quand j'ai un traitement d'erreurs à faire qui est répétitif pour plusieurs cas (exemple dans dotfile.c (fonction set_conf) ou encore dans dfc.c (fonction statfs_flags_to_str) de dfc).
C'est aussi très utile afin de sortir d'une double boucle (vu qu'avec un simple break on reste encore dans la première boucle).

Hors ligne

#1327 Le 12/07/2012, à 19:24

grim7reaper

Re : /* Topic des codeurs [7] */

:!pakman a écrit :

Pas bête... Mais j'imagines qu'on apprends pas ça à l'université, c'est... "officiel" comme manière de procéder ? C'est une bonne pratique alors ?

Thanks pour les liens, je regarde ça smile

En effet, je n’en ai pas entendu parler pendant mes cours.
Après, je ne sais pas ce que tu veux dire par « officiel », mais oui je vois ça plutôt comme une bonne pratique (on la retrouve dans le code de Linux et GMP, pour ne citer qu’eux).

Dernière modification par grim7reaper (Le 12/07/2012, à 19:25)

Hors ligne

#1328 Le 12/07/2012, à 20:48

tshirtman

Re : /* Topic des codeurs [7] */

C'est depuis "goto statement considered harmful" de dijkstra (le titre n'est pas de lui, mais de l'éditeur, et un peu plus fort que l'article), l'article pointe les dangers de son utilisation (code spaghetti), mais n'interdit pas non plus absolument son utilisation je crois (à part des langages de haut niveau, reste à voir ou on met le C, je considère qu'il n'est pas d'assez haut niveau pour s'en passer, et que c'est dommage).
http://www.u.arizona.edu/~rubinson/copy … rmful.html

grim7reaper a écrit :

Intéressant en effet.
Sauf que c’est pas du C, mais du GNU C (qui est presque un langage différent tellement il y a d’extensions…) donc ça limite l’intérêt.

C'est comme tout, il peut y avoir de bonnes choses à prendre, et de bons cas d'utilisations… 20% de perfs en plus, c'est quand même pas rien…

Dernière modification par tshirtman (Le 12/07/2012, à 20:50)

Hors ligne

#1329 Le 12/07/2012, à 23:33

The Uploader

Re : /* Topic des codeurs [7] */

OptionParser.new do |opts|
  opts.banner = "Usage: example.rb [options]"

  opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
    options[:verbose] = v
  end
end.parse!

Je m'habitue toujours pas sur ces appels de méthodes en fin de block de code.
Ça me bloque (ah ah). tongue


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#1330 Le 12/07/2012, à 23:41

Etoma

Re : /* Topic des codeurs [7] */

J'ai recommencé à lire le bouquin sur le programmation avec python.
Je ne comprends pas ce qu'apporte l'instruction "return" dans une fonction. C'est vachement abstrait de dire "ça retourne".
hmm


"un gars qui agit pour le bien des gens sans leur demander leur avis"
PirateBox

Hors ligne

#1331 Le 12/07/2012, à 23:53

The Uploader

Re : /* Topic des codeurs [7] */

Ben c'est typiquement le résultat de la fonction (et ce qui intéresse celui qui l'utilise).


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#1332 Le 12/07/2012, à 23:56

Pylades

Re : /* Topic des codeurs [7] */

Ça sert à terminer l’exécution du code dans la fonction courant et retourner dans la fonction appelante.
De plus, on peut retourner un objet qui sera adressable depuis la fonction appelante.

def caller():
    ret = called()
    print(ret)
def called():
    return 'plop'
caller()
plop

“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1333 Le 13/07/2012, à 00:07

Etoma

Re : /* Topic des codeurs [7] */

Donc en fait la différence avec "print", c'est qu'avec "print" j'affiche juste le résultat de la fonction, et qu'avec "return" je peux l’utiliser, genre comparer avec autre chose, enfin l'utiliser quoi?
Par exemple :

def prout()
    x = 2*3
    return x[
print (prout)
6

En fait mon exemple est complètement con.

Dernière modification par Etoma (Le 13/07/2012, à 00:13)


"un gars qui agit pour le bien des gens sans leur demander leur avis"
PirateBox

Hors ligne

#1334 Le 13/07/2012, à 00:15

Pylades

Re : /* Topic des codeurs [7] */

Euh… oui, en gros.

Mais surtout, print et return, c’est complètement différent. print c’est une fonction, qui écrit des données sur des flux (typiquement du texte sur la sortie standard), et peut être manipulée comme n’importe quelle fonction ; return c’est un statement, un élément de la syntaxe du langage.


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1335 Le 13/07/2012, à 00:24

Etoma

Re : /* Topic des codeurs [7] */

print j'ai bien saisi.
Mais return... pas trop.
Si je fait une fonction qui me donne, par exemple, un chiffre dans une string. Si je met return à la fin, ça fait que je peux juste mettre le nom de la fonction, et ça me permettra de traiter ce chiffre comme bon me semble?

(Bon sinon je mettrai l'exemple du bouquin, ce sera plus simple)


"un gars qui agit pour le bien des gens sans leur demander leur avis"
PirateBox

Hors ligne

#1336 Le 13/07/2012, à 00:31

The Uploader

Re : /* Topic des codeurs [7] */

Etoma a écrit :

Si je fait une fonction qui me donne, par exemple, un chiffre dans une string. Si je met return à la fin, ça fait que je peux juste mettre le nom de la fonction, et ça me permettra de traiter ce chiffre comme bon me semble?

Tu pourras utiliser le String comme bon te semble, oui.

Exemple Ruby (bon c'est quasiment pareil en Python pour cet exemple) :

#fonction qui prend un chiffre en entrée, et le retourne dans un String
def to_s(number)
  return number.to_s
end

# utilisation de la fonction :
to_s(1)

Résultat :

"1"

Bon dans le cas de Ruby on peut directement faire :

1.to_s

Vu que Ruby a des fonctions intégrés au langage du type "to_s" (pour convertir en String), etc...

Voire (pour en faire un string "1", puis de nouveau un chiffre 1) :

1.to_s.to_i

Résultat:

1

Dernière modification par The Uploader (Le 13/07/2012, à 00:32)


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#1337 Le 13/07/2012, à 00:32

Etoma

Re : /* Topic des codeurs [7] */

import urllib.request
def preis_abrufen
    seite = urllib.request.urlopen(http://www.beans-t-us.biz/prices-loyalty.html")
    text = seite.read().decode("utf8")
    wo = text.find(">$)
    preisanfang = wo + 2
    preisende = preisanfang + 4
    return (text[preisanfang:preisende])

Et je fais quoi avec ce return?


"un gars qui agit pour le bien des gens sans leur demander leur avis"
PirateBox

Hors ligne

#1338 Le 13/07/2012, à 00:33

Etoma

Re : /* Topic des codeurs [7] */

Bon, merci The Uploader, je viens de saisir.


"un gars qui agit pour le bien des gens sans leur demander leur avis"
PirateBox

Hors ligne

#1339 Le 13/07/2012, à 00:36

maxpoulin64

Re : /* Topic des codeurs [7] */

Etoma a écrit :

print j'ai bien saisi.
Mais return... pas trop.
Si je fait une fonction qui me donne, par exemple, un chiffre dans une string. Si je met return à la fin, ça fait que je peux juste mettre le nom de la fonction, et ça me permettra de traiter ce chiffre comme bon me semble?

(Bon sinon je mettrai l'exemple du bouquin, ce sera plus simple)

La valeur de retour d'une fonction, c'est en gros le résultat de la fonction. C'est plus facile à comprendre quand on a des fonctions à plusieurs arguments, pour l'exemple une fonction "Addition" qui fait la somme de deux chiffres:

def Addition(val1, val2):
    return val1 + val1

retour = Addition(2, 3)
print(retour)

La valeur de retour c'est vraiment le résultat d'une fonction. Ici, le résultat de l'addition. C'est un peu bête de faire l'addition comme ça, mais c'est pour l'exemple, éventuellement les fonctions vont calculer quelque chose de plus complexe.

L'atout majeur, c'est que tu peux récupérer le résultat au lieu de l'afficher directement. La valeur est conservée dans "retour".


EDIT: Grillé

Ta fonction ouvre une URL, charge le contenu, le convertis en UTF-8, fait une recherche dedans et te renvoit le résultat (je suppose, les données demandées extraites du reste du document.

Hors ligne

#1340 Le 13/07/2012, à 00:36

The Uploader

Re : /* Topic des codeurs [7] */

De rien. smile

N'hésite pas à jouer avec la console Python.


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#1341 Le 13/07/2012, à 00:41

Etoma

Re : /* Topic des codeurs [7] */

smile
C'est diabolique la programmation.  On peut faire plein de trucs!


"un gars qui agit pour le bien des gens sans leur demander leur avis"
PirateBox

Hors ligne

#1342 Le 13/07/2012, à 00:47

The Uploader

Re : /* Topic des codeurs [7] */

\o/
On peut même faire de la métaprogrammation ! (des programmes qui écrivent des programmes, en gros)
http://en.wikipedia.org/wiki/Metaprogramming


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#1343 Le 13/07/2012, à 01:01

Etoma

Re : /* Topic des codeurs [7] */

Ouais, j'ai vu ça, d'ailleurs les auteurs du bouquin disent que c'est un truc très dégueulasse, les codes qui se touchent eux-mêmes, et qu'ils faut avoir du cran pour les écrire.


"un gars qui agit pour le bien des gens sans leur demander leur avis"
PirateBox

Hors ligne

#1344 Le 13/07/2012, à 01:04

Dr Le Rouge

Re : /* Topic des codeurs [7] */

J'avais écrit des scripts python m'écrivant du prolog pour résoudre des exos quand j'étais encore à Centrale. Que de souvenirs :')


C'est deux suites de Cauchy qui veulent aller à la soirée 'no limit'. Hélas, à l'entrée le videur leur dit : "désolé, c'est complet !".
mon site perso (π²/6.fr) et mon blog

Hors ligne

#1345 Le 13/07/2012, à 01:06

Etoma

Re : /* Topic des codeurs [7] */

Grand dégoûtant!


"un gars qui agit pour le bien des gens sans leur demander leur avis"
PirateBox

Hors ligne

#1346 Le 13/07/2012, à 01:16

The Uploader

Re : /* Topic des codeurs [7] */

Etoma a écrit :

Ouais, j'ai vu ça, d'ailleurs les auteurs du bouquin disent que c'est un truc très dégueulasse, les codes qui se touchent eux-mêmes, et qu'ils faut avoir du cran pour les écrire.

Ça peut être 'dégeulasse' (et plus lent à l'exécution), mais c'est très puissant.

Un exemple basique :

code = "print 'prout!'"
eval a

Résultat:

prout!

- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#1347 Le 13/07/2012, à 01:18

david96

Re : /* Topic des codeurs [7] */

Etoma a écrit :

smile
C'est diabolique la programmation.  On peut faire plein de trucs!

On peut tout faire, même le café wink

Hors ligne

#1348 Le 13/07/2012, à 01:22

maxpoulin64

Re : /* Topic des codeurs [7] */

The Uploader a écrit :
Etoma a écrit :

Ouais, j'ai vu ça, d'ailleurs les auteurs du bouquin disent que c'est un truc très dégueulasse, les codes qui se touchent eux-mêmes, et qu'ils faut avoir du cran pour les écrire.

Ça peut être 'dégeulasse' (et plus lent à l'exécution), mais c'est très puissant.

Un exemple basique :

code = "print 'prout!'"
eval a

Résultat:

prout!

Sans faire de eval, ça sert aussi à générer du code intermédiaire. Qt s'en sert beaucoup pour ajouter des fonctionnalités au code C++, pour leur système de signaux. qmake est (il me semble) outil écrit en C++ qui pond un Makefile, qui lui lance un programme C++ (automoc je crois mais pas sur), qui prend les fichiers cpp contenant des "slots:", et pond un autre fichier .cpp qui lui est donné à manger à GCC pour le compiler.

Vala fait de même, sauf que ça génère du C avant de le compiler.

Mais ça reste pas terrible niveau propreté à mon avis, on est à je ne sais plus combien de codes intermédiaires avant d'avoir un binaire final, quand-même.

Hors ligne

#1349 Le 13/07/2012, à 02:26

grim7reaper

Re : /* Topic des codeurs [7] */

Yep, et le code généré est à vomir niveau lisibilité.
Et pour Vala, du moins quand je l’avais testé, il te génère même pas du code valide (du moins qui compile sans warn avec mon mode parano) donc pas utilisable pour moi.



tshirtman a écrit :
grim7reaper a écrit :

Intéressant en effet.
Sauf que c’est pas du C, mais du GNU C (qui est presque un langage différent tellement il y a d’extensions…) donc ça limite l’intérêt.

C'est comme tout, il peut y avoir de bonnes choses à prendre, et de bons cas d'utilisations… 20% de perfs en plus, c'est quand même pas rien…

Bah oui, mais c’est plus du C.
Quand on en arrive à des trucs du genre, c’est peut-être qu’il faudrait laisser tomber le C (pour ce bout au moins) et prendre un langage un peu plus adapté.

Dernière modification par grim7reaper (Le 13/07/2012, à 02:29)

Hors ligne

#1350 Le 13/07/2012, à 02:56

:!pakman

Re : /* Topic des codeurs [7] */

david96 a écrit :
Etoma a écrit :

smile
C'est diabolique la programmation.  On peut faire plein de trucs!

On peut tout faire, même le café wink

java


...

Hors ligne