Portmaster Δημοσ. 31 Μαρτίου 2016 Δημοσ. 31 Μαρτίου 2016 Γιατί όταν λες "Μια λίστα δέχεται μεθόδους" ο άλλος καταλαβαίνει ότι εννοείς αυτό: List<method> list1 = new List<method>() { EmptyMethod1(), EmptyMethod2()}; Το οποίο δεν γίνεται! Sorry για το off topic var list = new List<Action>() { () => Console.WriteLine("a"), () => Console.WriteLine("b") }; list.ForEach(x => x()); 1
Alithinos Δημοσ. 31 Μαρτίου 2016 Μέλος Δημοσ. 31 Μαρτίου 2016 Sorry για το off topic var list = new List<Action>() { () => Console.WriteLine("a"), () => Console.WriteLine("b") }; list.ForEach(x => x()); Άρα ο Μ2000 είχε δίκιο σε αυτό ε ? Ντάξει... όπως είπα σε προηγούμενο μήνυμα δεν έχω καλύψει τις δομές δεδομένων ακόμα, είναι το επόμενο κεφάλαιο του βιβλίου απ' όπου μαθαίνω, από κει που είμαι τώρα. Και θυμάμαι να έχω διαβάσει κάπου πως ξεκαθάριζαν ρητά ότι άλλο πράγμα τα δεδομένα (τα οποία απλά υπάρχουν παθητικά, χωρίς λειτουργικότητα, και δεν κάνουν κάτι ενεργητικά τα ίδια), και άλλο οι εκφράσεις / συναρτήσεις που δρουν ενεργητικά στα δεδομένα και έχουν λειτουργικότητα. Έτσι λοιπόν αφού μιλάμε για "δομή δεδομένων" θεώρησα πως μια δομή δεδομένων θα μπορεί να λάβει μόνο δεδομένα, δηλαδή μόνο παθητικές πληροφορίες, και όχι πχ συναρτήσεις.
defacer Δημοσ. 31 Μαρτίου 2016 Δημοσ. 31 Μαρτίου 2016 Offtopic συνέχεια... Και το τελείως empty επίσης γίνεται: var list = new List<Action>() { () => {}, () => {}, () => {}, }; αν και βέβαια δε μπορείς να κάνεις τίποτα ενδιαφέρον έτσι. Το ίδιο σε C++ vector<function<void(void)>> list { [](){}, [](){} }; αν και εδώ πλέον φτάνει να μοιάζει με trolling. That said, σε καμία από τις δύο γλώσσες δεν είναι "μέθοδοι" αυτό που βάζεις μέσα επειδή καμία από τις δύο δεν έχει first class functions. Αλλά υπάρχουν γλώσσες που έχουν (πχ JavaScript). 1
V.I.Smirnov Δημοσ. 31 Μαρτίου 2016 Δημοσ. 31 Μαρτίου 2016 Μια λάμβδα έκφραση δεν έχει τύπο, συνεπώς δεν μπορει να χρησιμοποιηθεί για να εξαχθεί ο τύπος μιας τοπικής μεταβλητής. Ως εκ τούτου, π.χ. το var v = x => x; θα δώσει σφάλμα. Ομοίως είναι λανθασμένο το var list = new List<Action>() ....κλπ που αναφέρθηκε παραπάνω. Τέλος, μπορεί να γραφεί χωρίς πρόβλημα κάτι σαν το ακόλουθο public static bool GreaterThan(int first,int second) { return first>second; } public static bool AlphabeticalGreaterThan(int first,int second) { return (first.ToString().CompareTo(second.ToString()))> ? 1 : 0; } List<Func<int,int,bool>> list = new List<Func<int,int,bool>> {GreaterThan, AlphabeticalGreaterThan }; ... bool q = list[0](5,3); - 1
DDevil Δημοσ. 31 Μαρτίου 2016 Δημοσ. 31 Μαρτίου 2016 No, please. Όσοι γράφουν τέτοια πράγματα πρέπει να τους ρίχνουν στην φωτιά (Γενικά μιλάω, όχι για σένα προσωπικά DDevil, καταλαβαίνω πως είναι παράδειγμα). Φιλε ετσι ειναι η C παρέχει ευελιξια και ελευθερια!!! Που να γράφαμε και για πολύπλοκες δηλώσεις -.-
anon667 Δημοσ. 31 Μαρτίου 2016 Δημοσ. 31 Μαρτίου 2016 Μια λάμβδα έκφραση δεν έχει τύπο, συνεπώς δεν μπορει να χρησιμοποιηθεί για να εξαχθεί ο τύπος μιας τοπικής μεταβλητής. Ως εκ τούτου, το var v = x => x; θα δώσει σφάλμα. Ομοίως είναι λανθασμένο το var list = new List<Action>() ....κλπ που αναφέρθηκε παραπάνω. Τέλος, μπορεί να γραφεί κάτι σαν το παρακάτω public static bool GreaterThan(int first,int second) { return first>second; } public static bool AlphabeticalGreaterThan(int first,int second) { return (first.ToString().CompareTo(second.ToString()))> ? 1 : 0; } List<Func<int,int,bool>> list = new List<Func<int,int,bool>> {GreaterThan, AlphabeticalGreaterThan }; ... bool q = list[0](5,3); - Λανθασμένο για ποιο λόγο; Περνάει κανονικά compile και το αποτέλεσμα είναι το expected. Φιλε ετσι ειναι η C παρέχει ευελιξια και ελευθερια!!! Που να γράφαμε και για πολύπλοκες δηλώσεις -.- Καλό είναι να αποφεύγονται τέτοιες πρακτικές αν πρόκειται κάποιος να δουλέψει σε ένα σοβαρό project (maintainability, κλπ.). Για την πάρτη μας everything goes, αλλά αν πρόκειται να μπλέξει και άλλος κόσμος -> KISS.
V.I.Smirnov Δημοσ. 31 Μαρτίου 2016 Δημοσ. 31 Μαρτίου 2016 Ναι, έχεις δίκιο, έγραψα απρόσεκτα. Το var list = new List<Action>().. κάνει compile διότι ο τύπος εξάγεται. Ωστόσο, το var v = x => x; θα "χτυπήσει" οπωσδήποτε. -
M2000 Δημοσ. 31 Μαρτίου 2016 Δημοσ. 31 Μαρτίου 2016 Ας γυρίσουμε στο κόσκινο του Όιλερ, να κάνει την άσκηση του ο Alithinos...
defacer Δημοσ. 31 Μαρτίου 2016 Δημοσ. 31 Μαρτίου 2016 Και η Μ2000 έχει first class functions... Φιλε ετσι ειναι η C παρέχει ευελιξια και ελευθερια!!! Που να γράφαμε και για πολύπλοκες δηλώσεις -.- Hold your horses cowboy, τέτοια ασχολίαστα for μπορείς να γράψεις σε οποιαδήποτε γλώσσα. Και στη M2000 μπορείς, γιατί εκεί τα for υλοποιούνται με συνάρτηση τραμπολίνο που μπορεί να επιστρέψει την εκτέλεση στο προηγούμενο σημείο του αντικειμένου.
Επισκέπτης Δημοσ. 31 Μαρτίου 2016 Δημοσ. 31 Μαρτίου 2016 List<method> list1 = new List<method>() { EmptyMethod1(), EmptyMethod2()}; Το οποίο δεν γίνεται! Για αυτό και σου κάνουν παρατηρήσεις και σε κράζουν. Γίνεται, αλλά με Reflection. Παράδειγμα: class Program { public Program() { } static void Main(string[] args) { List<string> methods = new List<string>() { "Method1", "Method2" }; foreach (string methodName in methods) { object tmpObj = new Program(); MethodInfo mi = tmpObj.GetType().GetMethod(methodName); object[] paramsArray = new object[] { }; mi.Invoke(tmpObj, paramsArray); } } public static void Method1() { Console.WriteLine("Executing method 1"); } public static void Method2() { Console.WriteLine("Executing method 2"); } }
M2000 Δημοσ. 1 Απριλίου 2016 Δημοσ. 1 Απριλίου 2016 Τώρα κάνουμε αστεία με τη Μ2000; Λοιπόν στη Μ2000,η For γίνεται τουλάχιστον μια φορά, γιατί ο έλεγχος γίνεται μετά την εκτέλεση του μπλοκ. Μπορεί μια Προς (Goto) όμως να βγάλει τη ροή από το μπλοκ σαν να μην υπήρχε For. Η Μ2000 έχει ανώνυμες συναρτήσεις. Και άλλα πολλά. 1
DDevil Δημοσ. 1 Απριλίου 2016 Δημοσ. 1 Απριλίου 2016 Τώρα κάνουμε αστεία με τη Μ2000; Λοιπόν στη Μ2000,η For γίνεται τουλάχιστον μια φορά, γιατί ο έλεγχος γίνεται μετά την εκτέλεση του μπλοκ. Μπορεί μια Προς (Goto) όμως να βγάλει τη ροή από το μπλοκ σαν να μην υπήρχε For. Η Μ2000 έχει ανώνυμες συναρτήσεις. Και άλλα πολλά. Ρε άστους να λένε τα δικά τους. Θα εξαπλωθεί η Μ2000 και θα την βλέπουνε παντού κα θα λυσάνε. Τι θα σου κάνουν??? θα σου κοψουν το μισθο? χαχαχα
M2000 Δημοσ. 1 Απριλίου 2016 Δημοσ. 1 Απριλίου 2016 (επεξεργασμένο) Όταν ξεκίνησα τη γλώσσα δεν είχα φανταστεί που θα έφτανε, σε ολοκλήρωση. Περίμενα να βρω άτομα που θα βοηθούσαν,θα εμπλούτιζαν, αλλά μάλλον ζητάω πολλά. Είναι βαρύ το θέμα. Παράδειγμα συναρτησιακού προγραμματισμού σε Μ2000. http://georgekarras.blogspot.gr/2015/09/2000_70.html Χρησιμοποιεί τις ανώνυμες συναρτήσεις. Επεξ/σία 1 Απριλίου 2016 από M2000
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα