Alle Originalinhalte werden auf Ukrainisch erstellt. Noch nicht alle Inhalte wurden übersetzt. Einige Beiträge sind möglicherweise nur auf Ukrainisch verfügbar.Mehr erfahren

Was bedeutet .map(&:name) in Ruby?

Beitrags-Cover: Was bedeutet .map(&:name) in Ruby?
InhaltsverzeichnisKlicke auf den Link, um zur gewünschten Stelle zu navigieren
Dieser Inhalt wurde automatisch aus dem Ukrainischen übersetzt.
```html
In Ruby ist die Konstruktion map(&:name) eine Abkürzung für die Anwendung einer Methode auf jedes Element einer Sammlung. Diese Form wird verwendet, um den Code kürzer und lesbarer zu machen. Lassen Sie uns genauer betrachten, was dieser Ausdruck bedeutet.
Die Methode map wird verwendet, um jedes Element einer Sammlung zu durchlaufen (Iteration) und einen Codeblock für jedes Element auszuführen. Als Antwort wird ein neues Array mit den Ergebnissen der Ausführung des Blocks zurückgegeben.
[1, 2, 3].map { |n| n * 2 }
# => [2, 4, 6]

Was bedeutet &:name?

Dieser (&:name im Ausdruck array.map(&:name)) Teil wird verwendet, um den Block zu verkürzen, der die Methode name für jedes Element aufruft. Er ist äquivalent zu:
array.map { |item| item.name }
Das heißt:
# Das hier:
array.map { |item| item.name }
# Und das hier:
array.map(&:name)
# Führt die gleiche Aktion aus, aber die zweite Variante hat eine verkürzte Form

Beispiel

class User
  attr_accessor :name

  def initialize(name)
    @name = name
  end
end

users = [User.new('Alice'), User.new('Bob'), User.new('Charlie')]
names = users.map(&:name)
# => ["Alice", "Bob", "Charlie"]

# Versuchen wir die 'längere' Variante
names = users.map{ |user| user.name }
# => ["Alice", "Bob", "Charlie"]
Wie wir sehen, machen beide Varianten dasselbe. Und wie sieht es mit der Performance aus? Lassen Sie uns die Benchmarks überprüfen.

Benchmarks

require 'benchmark'

class User
  attr_accessor :name

  def initialize(name)
    @name = name
  end
end

# Generierung eines großen Arrays von Benutzern
users = Array.new(100_000) { |i| User.new("User#{i}") }

# Benchmarking
results = Benchmark.bm do |x|
  x.report('map(&:name)') do
    users.map(&:name)
  end

  x.report('map { |user| user.name }') do
    users.map { |user| user.name }
  end
end

puts results
Das Ergebnis auf meinem Rechner:
[#<Benchmark::Tms:0x000000010dd19ad0 @cstime=0.0, @cutime=0.0, @label="map(&:name)", @real=0.008466999977827072, @stime=0.00038199999999999346, @total=0.0077390000000007175, @utime=0.007357000000000724>,
 #<Benchmark::Tms:0x000000010dd19670 @cstime=0.0, @cutime=0.0, @label="map { |user| user.name }", @real=0.008027000352740288, @stime=0.0003069999999999462, @total=0.007962000000001468, @utime=0.007655000000001522>]
Insgesamt ist die verkürzte Variante optimierter und schneller. Aber in meinem Beispiel ist das Ergebnis ungefähr gleich. Man braucht einen größeren Datensatz, damit der Benchmark einen Unterschied zeigt. Daher sollten Sie standardmäßig die verkürzte (optimierte Version) des Aufrufs der Methode map verwenden. Vielleicht werde ich einen separaten Beitrag mit Benchmarks machen.
```

Dieser Beitrag hat noch keine Ergänzungen vom Autor.

[Fix] extconf.rb ist bei der Installation der Ruby-Bibliothek Gosu fehlgeschlagen
27. Jun, 16:38 Uhr

[Fix] extconf.rb ist bei der Installation der Ruby-Bibliothek Gosu fehlgeschlagen

meme code
meme code@memecode
Wie macht man einen leeren Git-Commit?
28. Jun, 08:33 Uhr

Wie macht man einen leeren Git-Commit?

meme code
meme code@memecode
Ruby-Bibliothek Gosu zur Erstellung von 2D-Spielen
29. Jun, 08:48 Uhr

Ruby-Bibliothek Gosu zur Erstellung von 2D-Spielen

meme code
meme code@memecode
Gosu Ruby Tutorial - пройдемось по офіційній документації
03. Jul, 11:50 Uhr

Gosu Ruby Tutorial - пройдемось по офіційній документації

meme code
meme code@memecode
Wir schreiben das Demospiel Drones vs Zombies (Gosu / Ruby)
12. Jul, 12:17 Uhr

Wir schreiben das Demospiel Drones vs Zombies (Gosu / Ruby)

meme code
meme code@memecode
Wie behebt man einen Windows-Absturz, der durch CrowdStrike verursacht wurde?
19. Jul, 13:53 Uhr

Wie behebt man einen Windows-Absturz, der durch CrowdStrike verursacht wurde?

meme code
meme code@memecode
Wie funktioniert die map-Methode in Ruby? Eine Übersicht über die Funktionsweise der Methode mit Beispielen
30. Jul, 07:33 Uhr

Wie funktioniert die map-Methode in Ruby? Eine Übersicht über die Funktionsweise der Methode mit Beispielen

meme code
meme code@memecode
Was bedeutet der Punkt am Anfang einer Datei (.gitignore, .DS_Store, .bashrc usw.)?
02. Aug, 13:15 Uhr

Was bedeutet der Punkt am Anfang einer Datei (.gitignore, .DS_Store, .bashrc usw.)?

meme code
meme code@memecode
Was ist .gitignore? Wozu dient es und wie verwendet man es?
02. Aug, 14:58 Uhr

Was ist .gitignore? Wozu dient es und wie verwendet man es?

meme code
meme code@memecode
Wie entfernt man die .DS_Store-Datei aus einem Git-Repository?
02. Aug, 19:34 Uhr

Wie entfernt man die .DS_Store-Datei aus einem Git-Repository?

meme code
meme code@memecode
Was ist eine idempotente Methode?
21. Aug, 20:57 Uhr

Was ist eine idempotente Methode?

meme code
meme code@memecode
Was ist ein Repository?
21. Aug, 21:25 Uhr

Was ist ein Repository?

meme code
meme code@memecode