C # 4 δυναμική λέξη-κλειδί - γιατί όχι;

ψήφοι
6

Μετά την ανάγνωση πολλές από τις απαντήσεις σε αυτό το νήμα , βλέπω ότι πολλοί από εκείνους που αρέσει αναφέρουν το ενδεχόμενο κατάχρησης των νέων λέξεων-κλειδιών. Η ερώτησή μου είναι, τι είδους κακοποίηση; Πώς θα μπορούσε αυτό να γίνει κατάχρηση τόσο πολύ ώστε να κάνει τους ανθρώπους αρέσει κατηγορηματικά; Είναι ακριβώς για καθαρολογία; Ή είναι μια πραγματική παγίδα που είμαι απλά δεν βλέπουμε εκεί;

Δημοσιεύθηκε 29/10/2008 στις 00:57
πηγή χρήστη
Σε άλλες γλώσσες...                            


8 απαντήσεις

ψήφοι
17

Νομίζω ότι ένα μεγάλο μέρος της αποστροφής που οι άνθρωποι εκφράζουν σε αυτό το χαρακτηριστικό σημαίνει ότι πρέπει να «αυτό είναι ένα χαρακτηριστικό κακή γλώσσα, διότι θα επιτρέψει κακό προγραμματιστές να γράφουν κακό κώδικα.» Αν το σκεφτείτε, με αυτή τη λογική όλα τα χαρακτηριστικά γλώσσα είναι κακό.

Όταν τρέχω σε ένα μπλοκ του κώδικα VB που κάποια μεγαλοφυία έχει πρόθεμα On Error Resume Next, δεν είναι VB που βρίζουν. Ίσως θα πρέπει, υποθέτω. Αλλά από την εμπειρία μου ένα άτομο που είναι αποφασισμένη να βάλει μια δεκάρα στην ασφαλειοθήκη θα βρούμε έναν τρόπο. Ακόμα κι αν αδειάσει τις τσέπες του, θα διαμορφώσει τη δική πένες του.

Εγώ, ανυπομονώ σε μια πιο χρήσιμος τρόπος είναι διαλειτουργικά μεταξύ C # και Python. Γράφω όλο και περισσότερο κώδικα που το κάνει αυτό. Η dynamicλέξη-κλειδί δεν μπορεί να έρθει αρκετά σύντομα για τη συγκεκριμένη περίπτωση χρήσης, επειδή η σημερινή τρόπος για να γίνει αυτό με κάνει να αισθάνομαι σαν να είμαι ένα σοβιετικό ακαδημαϊκό τη δεκαετία του 1950 που ταξιδεύει προς τη Δύση για το συνέδριο: υπάρχει ένα τεράστιο ποσό των κανόνων και χαρτιά πριν πάρω να φύγει, είμαι πολύ σίγουρος ότι κάποιος πρόκειται να με παρακολουθούν όλη την ώρα είμαι εκεί, και τα περισσότερα από ό, τι έχω πάρει, ενώ είμαι εκεί, θα πρέπει να λαμβάνονται μακριά από μένα στα σύνορα όταν επιστρέψω.

Απαντήθηκε 29/10/2008 στις 03:44
πηγή χρήστη

ψήφοι
16

Μερικοί το βλέπουν ως ένα εργαλείο που θα πρέπει να γίνεται κατάχρηση. Όπως το «Επιλογή Αυστηρή Off» και «On Error Resume Next» σε VB που «καθαρή» γλώσσες όπως η C # και Java ποτέ δεν είχε.

Πολλοί είπαν το ίδιο για τη λέξη-κλειδί «var», αλλά δεν βλέπω να γίνεται κατάχρηση, τη στιγμή που έγινε κατανοητό ότι δεν ήταν το ίδιο με VB είναι «παραλλαγή»

Θα μπορούσε να γίνει κατάχρηση σε μέρη που τεμπέληδες προγραμματιστές δεν θέλουν τύπου έλεγχο σχετικά με τις κατηγορίες και προσπαθήστε απλώς αλιευμάτων δυναμική κλήσεις, αντί της γραφής «αν μπλα μπλα είναι ...».

Προσωπικά, πιστεύω ότι θα μπορούσε να χρησιμοποιηθεί σωστά σε καταστάσεις σαν αυτή την πρόσφατη ερώτηση που απάντησα.

Νομίζω ότι αυτοί κατανόηση πραγματικά της εξουσίας είναι αυτά που σε μεγάλο βαθμό στις δυναμικές .NET γλώσσες.

Απαντήθηκε 29/10/2008 στις 01:01
πηγή χρήστη

ψήφοι
7

δυναμικό είναι κακό, διότι κώδικα όπως αυτό θα εμφανιστεί σε όλη τη χώρα:

public dynamic Foo(dynamic other) {
  dynamic clone = other.Clone();
  clone.AssignData(this.Data);
  return clone ;
}

αντί:

public T Foo<T>(T other) where T: ICloneable, IAssignData{
    T clone = (T)other.Clone();
    clone.AssignData(this.Data);
    return clone;
}

Το πρώτο, δεν έχει στατική πληροφορίες του τύπου, δεν μεταγλώττιση τον έλεγχο του χρόνου, δεν είναι μόνος τεκμηρίωση, δεν συμπέρασμα τύπο, ώστε οι άνθρωποι θα αναγκαστούν να χρησιμοποιήσετε μια δυναμική αναφορά στη θέση κλήσης για να αποθηκεύσετε το αποτέλεσμα, που οδηγεί σε μεγαλύτερη απώλεια τύπο, και όλα αυτό κινείται σπειροειδώς προς τα κάτω.

Είμαι ήδη αρχίσει να φοβούνται δυναμική .

Επεξεργασία : Ο κίνδυνος έχει περάσει (φτου!) ... και δυναμική δεν έχουν κακοποιηθεί μετά από όλα, δεν χρειάζεται να ψηφίσει με κάτω μετά από 3 χρόνια :)

Απαντήθηκε 29/10/2008 στις 02:47
πηγή χρήστη

ψήφοι
6

Η πραγματική παγίδα; Σοβαρή έλλειψη τεκμηρίωσης. Η αρχιτεκτονική του ολόκληρη την εφαρμογή του υπάρχει στο μυαλό του προσώπου (ή προσώπων) που το έγραψε. Τουλάχιστον με ισχυρή-πληκτρολόγηση, μπορείτε να πάω να δω τι κάνει το αντικείμενο μέσω του ορισμού της κατηγορίας του. Με τη δυναμική, την πληκτρολόγηση, θα πρέπει να συμπεράνουμε την έννοια από αυτό είναι η χρήση, στην καλύτερη περίπτωση. Στη χειρότερη περίπτωση, δεν έχετε ιδέα τι το αντικείμενο είναι. Είναι σαν να προγραμματίσετε τα πάντα σε JavaScript. ACK!

Απαντήθηκε 29/10/2008 στις 01:02
πηγή χρήστη

ψήφοι
2

Όταν οι άνθρωποι συνειδητοποιούν ότι δεν έχουμε καλή IntelliSense με dynamic, θα επιστρέψετε από το να είναι dynamic-happy να dynamic-όταν-απαραίτητο-and- var-σε-όλα-άλλες φορές.

Οι σκοποί της dynamicπεριλαμβάνουν: τη διαλειτουργικότητα με δυναμικές γλώσσες και πλατφόρμες, όπως COM / C ++ και DLR / IronPython / IronRuby? καθώς και μεταμορφούμενος C # σε IronSmalltalkWithBraces με τα πάντα εφαρμογή IDynamicObject.

Καλές εποχές θα είχε από όλα. (Εκτός αν πρέπει να διατηρηθεί κώδικα κάποιος άλλος έγραψε.)

Απαντήθηκε 29/10/2008 στις 03:04
πηγή χρήστη

ψήφοι
1

Αυτό είναι κάτι σαν συζητούν δημόσια κάμερες, βεβαιωθείτε ότι μπορεί και θα γίνει κατάχρηση, αλλά υπάρχουν οφέλη στην κατοχή τους, καθώς και.

Δεν υπάρχει κανένας λόγος για τον οποίο δεν θα μπορούσε να τεθεί εκτός νόμου η «δυναμική» λέξη-κλειδί στη δική σας κωδικοποίηση κατευθυντήρια γραμμή, αν δεν τα χρειάζεστε. Ποιο ειναι το πρόβλημα? Θέλω να πω, αν θέλετε να κάνετε τρελά πράγματα με την «δυναμική» λέξη-κλειδί και να υποκρινόμαστε C # είναι η κάποια μετάλλαξη ξάδελφος της JavaScript, είναι καλεσμένος μου. Απλά να έχετε αυτά τα πειράματα έξω από βάση κώδικα μου. ?)

Απαντήθηκε 19/12/2008 στις 11:55
πηγή χρήστη

ψήφοι
-1

FUD. Θα μπορούσε να είναι το καλύτερο πράγμα από το ψωμί σε φέτες, αλλά όλη η εμπειρία που είχα με VB, JavaScript, κλπ, μου φέρνει τα ρίγη να γνωρίζουμε ότι η C # θα έχει δυναμική δεσμευτική. Ξέρω ότι θα είναι σε θέση να το δει κανείς ορθολογικά στο εγγύς μέλλον και να δούμε πόσο καλή είναι η νέα δυνατότητα θα ήταν να επιτρέψει τη διαλειτουργικότητα με δυναμικές γλώσσες. Αλλά αυτό θα πάρει κάποιο χρόνο. Είμαι άνθρωπος, εντάξει; :-)

Απαντήθηκε 17/07/2009 στις 15:16
πηγή χρήστη

ψήφοι
-2

Δεν βλέπω το λόγο για τον οποίο ο σημερινός τρόπος επίκληση μεθόδων dynamicly είναι εσφαλμένη:

Χρειάζονται τρεις γραμμές για να το κάνει, ή μπορείτε να προσθέσετε μια μέθοδο επέκτασης για System.Object να το κάνει για εσάς:

class Program
{
    static void Main(string[] args)
    {
        var foo = new Foo();            
        Console.WriteLine(foo.Invoke("Hello","Jonathan"));
    }        
}

static class DynamicDispatchHelper
{
    static public object Invoke(this object ot, string methodName, params object[] args)
    {
        var t = ot.GetType();
        var m = t.GetMethod(methodName);
        return m.Invoke(ot, args);
    }
}

class Foo
{
    public string Hello(string name)
    {
        return ("Hello World, " + name);
    }
}
Απαντήθηκε 29/10/2008 στις 03:47
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more