this post was submitted on 01 Oct 2023
476 points (96.7% liked)

Programmer Humor

32464 readers
1101 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 5 years ago
MODERATORS
 

The audacity to do such a thing…

top 50 comments
sorted by: hot top controversial new old
[–] [email protected] 117 points 1 year ago (3 children)

The answer is a map or dictionary.

[–] [email protected] 32 points 1 year ago* (last edited 1 year ago)

Or sometimes even just an array. The first time I thought I wanted to do this was 2003 and I was writing a perl script, and I was trying to loop through some sort of array, and write the outputs of some calculations to $val0 $val1 and so on, and I was neck deep into some horrible dark constructs like ${"val" . $i} before I actually realized that I really just wanted an array, you know, like the one I was already using.

It took me forever to understand map (the metafunction).

[–] [email protected] 14 points 1 year ago

It depends. If the variable names are arbitrary, then a map is best. If the variable names are just x_1, x_2, x_3, ..., x_n, then a list or dynamic array would be more natural. If n is constant, then a vector or static array is even better.

[–] [email protected] 10 points 1 year ago (2 children)

I've just figured out linked lists and I want to call that the solution ¯_(ツ)_/¯

[–] [email protected] 20 points 1 year ago

When you get a new hammer...

[–] [email protected] 9 points 1 year ago

I mean, I wouldn’t recommend it, but seems like a data structure that could work.

[–] [email protected] 69 points 1 year ago (4 children)

In python, 'eval()' is your friend.

/maliciouscompliance

[–] [email protected] 38 points 1 year ago (1 children)
load more comments (1 replies)
[–] [email protected] 14 points 1 year ago

Nah, the locals() or globals() object is much better for this.

[–] [email protected] 8 points 1 year ago (3 children)

In c, nothing and nobody is your friend.

Source: me

load more comments (3 replies)
[–] [email protected] 7 points 1 year ago

In Perl, eval can do similar things, but symbolic references are "better" (I'm fairly sure it's where PHP got the idea, and the syntax, from.) e.g.

$foo = "bar";
$$foo = "potatoes"; # $$foo = access the variable named in $foo, i.e. $bar
print $bar; # prints potatoes

Reading other responses, it seems like Python's globals object is not entirely dissimilar, especially if you know how Perl deals with symbolic references under the hood.

But just because you can doesn't mean you should. If you use strict; in Perl, it will fail to compile most of this nonsense. Use a hash / associative array / dictionary / whatever your language (natural and/or programming) calls them instead.

And I'm pretty sure that even without strict, local variables can't be accessed at all the symbolic way, which is probably for the best. (NB: local is a subtle thing in Perl. By "local" here, I mean the so-called my variables that aren't accessible outside their scope. local variables are actually localised globals. Enjoy that thought.)

[–] [email protected] 63 points 1 year ago (4 children)

I distinctly remember asking this question during a 100 level programming class but I just can not remember why I'd ever want to do this?

What problem could I have possibly have been trying to solve where this would seem like the answer.

[–] [email protected] 34 points 1 year ago (2 children)

A common problem (before learning it is impossible/fraught with danger) is categorisation, like sorting of strings.

Say you have a text, and need to count words of different lengths.

One intuitive approach is to pass through it once and add each word to a list for the corresponding length, as well as making lists as needed. No 7 letter words, no 7-letter-word-list, even though there are longer words.

As humans we're good at sorting things into an unknown number of categories, and we have to unlearn that for programming

[–] [email protected] 30 points 1 year ago (5 children)

Would one not just use a dict/hashmap with int keys labelling lengths and the list of strings as the values?

[–] [email protected] 29 points 1 year ago* (last edited 1 year ago) (1 children)

A programmer might, as trained/conditioned by the limits of programming languages.

A human would intuitively not, these are meaningless and/or convoluted concepts to the untrained human.

[–] [email protected] 16 points 1 year ago

I like the implication that programmers aren't humans, but a sort of alien being naturally apt at algorithmic thinking, while puny humans are an irrational species that needs to undergo training from the mighty race of programmers if they hope to get into the field brought us here by the aliens

load more comments (4 replies)
[–] [email protected] 6 points 1 year ago (1 children)

This makes a ton of sense and I think you probably solved this mystery for me.

"Oh I need to iterate over something, and keep track of new information as I do it, therefore I should be able to create 'dynamic variables' as I progress."

load more comments (1 replies)
[–] [email protected] 14 points 1 year ago

I remember wondering this when I was first trying to self learn. It's because I needed a map (or list + struct or something) and was such a noob I didn't know what maps were. Whatever material I was learning from wasn't good enough, especially for winging things. Plus I was trying to learn C++ and maps aren't quite so built into the language as they are with a better first language like Python.

[–] [email protected] 13 points 1 year ago

In lower level languages like C/C++ the reason becomes much more apparent when you learn about memory allocation and management (as a bonus it also really helps to understand how OS's handle memory). Dynamically declaring variables in a loop would mean you need to allocate a chunk of memory for each variable that's generated on the fly, most of, if not all of the dynamically declared variables would not even use most of their allocated memory resulting in a ton of extra overhead and wasted space within memory. An array is usually the answer when someone asks how to dynamically define variables. With an array you allocate the space needed in memory and can iterate across it block by block resulting in more control and efficiency within your reserved memory block. Linked lists are also a fun thing to look into when you aren't sure how big your array needs to be. It's a hard question to answer in a 100 level class because the answer actually goes pretty deep into low level programming, operating system and hardware principles.

load more comments (1 replies)
[–] [email protected] 50 points 1 year ago (3 children)
[–] [email protected] 12 points 1 year ago

Piiiitchforks! Getcher pitchforks heeeere!

[–] [email protected] 5 points 1 year ago

Every time we see this in our legacy code we yell out: dolla-dolla bills 'yall!

[–] [email protected] 45 points 1 year ago (1 children)

The answer is writing a program that writes the variables dynamically to a file and including that file into the source file that uses them.

No need to thank me folks I'm just trying to make the world a better place.

[–] [email protected] 10 points 1 year ago (1 children)

Or just use a dictionary/hashmap if it's all in the same program

[–] [email protected] 14 points 1 year ago (2 children)

Or in JavaScript you can build a string that creates the name of a variable in a sub loop by concatenating ""variable"+$i" and passing that value into a variable that is then read as the name of an incremental variable that a value is then passed to.

This has the advantage of being both extremely unwieldy and highly inscrutable, and there's a small chance it will make your coworkers send you death threats in slack.

load more comments (2 replies)
[–] [email protected] 34 points 1 year ago (1 children)

I see you're not ready for the ways of the JavaScript.

[–] lowleveldata 11 points 1 year ago

Is anyone really?

[–] [email protected] 29 points 1 year ago* (last edited 1 year ago) (1 children)

I think it should work in Clojure

(doseq [i (range 10)]
  `(def ~(str "var-" i) i))
[–] [email protected] 22 points 1 year ago (1 children)

Everything goes with macros :D

[–] avonarret1 8 points 1 year ago

That rhymes! :D

[–] [email protected] 23 points 1 year ago (1 children)

It would probably be way easier than expected to do so in javascript. It would also be awful.

[–] [email protected] 16 points 1 year ago* (last edited 1 year ago) (1 children)
for(var i=0; i \< numLoops; i++){
    globalThis['example'+i] = doStuff(i);
}
[–] [email protected] 12 points 1 year ago* (last edited 1 year ago) (1 children)
for(var i = 0; i < numLoops; i++) {
    eval("var_" + i + " = " + i + ";");
}
[–] [email protected] 10 points 1 year ago (2 children)

eval is a path to powers many would consider to be... unnatural

load more comments (2 replies)
[–] [email protected] 23 points 1 year ago (2 children)

The reason I hate HTML: I've seen smart, reasonable people do this with IDs, and I'm not 100% sure they're wrong.

[–] jvisick 33 points 1 year ago (1 children)

That’s because it makes sense when dynamically creating HTML. HTML is not a programming language, it’s simply markup - so if you want to generate some block of HTML in a loop and later access that block of HTML in JS (e.g. to interact with the UI separate from creating it in the first place), it’s a completely reasonable thing to do.

load more comments (1 replies)
load more comments (1 replies)
[–] [email protected] 18 points 1 year ago (1 children)

I remember being new to programming and wondering that and then getting introduced to arrays. Matrixes blew my mind

load more comments (1 replies)
[–] [email protected] 17 points 1 year ago (1 children)
[–] [email protected] 11 points 1 year ago* (last edited 1 year ago) (1 children)

Within a loop could be:

for(i in 1:10){
     assign(paste0("listNum", i), list(i, someStringVector[i], i:(i+20), i*value))
}```

And you can also use get() in the same way to dynamically retrieve a variable. 

I've gone so far into coding debauchery that I've dynamically assigned variables from dynamically retrieved ones, and I've done so fairly frequently.
[–] [email protected] 7 points 1 year ago

Legit thank you.

I've wondered on the right way to do this in R.... Too many times.

[–] [email protected] 13 points 1 year ago

PHP variable variables

[–] [email protected] 13 points 1 year ago (1 children)

USE ASSOCIATIVE ARRAY, OR SOME KIND OF MAPPING DATA STRUCTURE

load more comments (1 replies)
[–] [email protected] 12 points 1 year ago* (last edited 1 year ago)

Also known as "my programming language doesn't allow that therefore what you're trying to do is a stupid idea"

(could just be a stupid idea too, though)

[–] [email protected] 12 points 1 year ago

I recently saw a SO answer suggesting to use PHP as an alternative to the c preprocessor.

[–] [email protected] 9 points 1 year ago

Array, and put the names or hash or id in either another array or the same array as a tuple.

[–] [email protected] 6 points 1 year ago

Just use lisp

load more comments
view more: next ›