The snippets are under the CC-BY-SA license. # Programming-Idioms.org

• The snippets are under the CC-BY-SA license.
• Please consider keeping a bookmark
Obj-C
1
Print a literal string on standard output
``NSLog(@"Hello world\n");``
2
Loop to execute some code a constant number of times
``````for (NSInteger i=0;i<10;i++){
NSLog(@"Hello world");
}``````
3
Like a function which doesn't return any value, thus has only side effects (e.g. Print to standard output)
``````void foo(void) {
NSLog(@"My job here is done. Goodbye\n");
}``````
4
Create a function which returns the square of an integer
``````int square(int x) {
return x*x;
}``````
5
Declare a container type for two floating-point numbers x and y
``````typedef struct {
double x,y;
} NSPoint;``````
6
Do something with each item x of the list (or array) items, regardless indexes.
``for (id x in items) _doSomething(x);``
7
Print each index i with its value x from an array-like collection items
``````[items enumerateObjectsUsingBlock:^(id x, NSUInteger i, BOOL *stop) {
NSLog(@"Item %lu = %@",(u_long)i,x);
}];``````
8
Create a new map object x, and provide some (key, value) pairs as initial content.
``NSDictionary *x=@{@"one":@1, @"two":@2};``
9
The structure must be recursive because left child and right child are binary trees too. A node has access to children nodes, but not to its parent.
``````@interface Node:NSObject
@property id value; // id means any object value
@property Node *left,*right;
@end

// usage like
Node *n=[Node new];
n.value=@1;
n.left=otherNode;
n.right=anotherNode;

// somewhere needed also
@implementation Node @end
``````
10
Generate a random permutation of the elements of list x
``x.shuffledArray``
11
The list x must be non-empty.
``x[arc4random_uniform(x.count)]``
12
Check if the list contains the value x.
list is an iterable finite container.
``[list containsObject:x];``
13
Access each key k with its value x from an associative array mymap, and print them.
``````for (NSString *k in mymap)
NSLog(@"Key %@, value %@",k,mymap[k]);``````
14
Pick a random number greater than or equals to a, strictly inferior to b. Precondition : a < b.
``````float pick(float a,float b) {
id<GKRandom>  rnd=GKMersenneTwisterRandomSource.sharedRandom;
float ru;
while ((ru=rnd.nextUniform)==1);
return a+ru*(b-a);
}``````
15
Pick a random integer greater than or equals to a, inferior or equals to b. Precondition : a < b.
``a+arc4random_uniform(b+1)``
17
The structure must be recursive. A node may have zero or more children. A node has access to its children nodes, but not to its parent.
``````@interface Node:NSObject
@property id value; // id means any object value
@property NSMutableArray *children;
@end

// usage like
Node *n=[Node new];
n.value=@1;
[n.children removeLastObject];

// somewhere needed also
@implementation Node
-(instancetype)init {
if (!(self=[super init])) return nil;
_children=[NSMutableArray array];
return self;
}
@end
``````
19
Reverse the order of the elements of the list x.
This may reverse "in-place" and destroy the original ordering.
``x.reverseObjectEnumerator.allObjects``
20
Implement a function search which looks for item x in a 2D matrix m.
Return indices i, j of the matching cell.
Think of the most idiomatic way in the language to return the two values at the same time.
``````NSIndexPath *search(NSArray *m,id x) {
NSUInteger j,i;
for (i=0;i<m.count;i++) {
if ((j=[m[i] indexOfObject:x])!=NSNotFound)
return [NSIndexPath indexPathWithIndexes:&i length:2];
}
return nil;
}
``````
21
Swap the values of the variables a and b
``__typeof(a) _temp=a; a=b; b=_temp;``
22
Extract the integer value i from its string representation s (in radix 10)
``int i=s.intValue``
24
Declare a new string s and initialize it with the literal value "ネコ" (which means "cat" in japanese)
``NSString *s=@"ネコ";``
26
Declare and initialize a matrix x having m rows and n columns, containing real numbers.
``````NSArray *x=@[
@[@0.1, @0.2, ... ], // n column values
... // m rows
];``````
27
Declare and initialize a 3D array x, having dimensions boundaries m, n, p, and containing real numbers.
``````NSArray *x=@[
@[
@[@0.1, @0.2, ... ], // p column values
... // n sub-rows
],
... // m rows
];
``````
28
Sort the elements of the list (or array-like collection) items in ascending order of x.p, where p is a field of the type Item of the objects in items.
``[items sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"p" ascending:YES]]]``
29
Remove i-th item from list items.
This will alter the original list or return a new list, depending on which is more idiomatic.
Note that in most languages, the smallest valid value for i is 0.
``[items removeObjectAtIndex:i];``
31
Create the recursive function f which returns the factorial of the non-negative integer i, calculated from f(i-1)
``````unsigned f(unsigned i) {
return i?i*f(i-1):1;
}``````
32
Create function exp which calculates (fast) the value x power n.
x and n are non-negative integers.
``````unsigned exp(unsigned x,unsigned n) {
switch (n) {
case 0: return 1;
case 1: return x;
}
if (n&1) return x*exp(x*x,(n-1)/2);
return exp(x*x,n/2);
}
``````
38
Find substring t consisting in characters i (included) to j (excluded) of string s.
Character indices start at 0 unless specified otherwise.
Make sure that multibyte characters are properly handled.
``t=[s substringWithRange:NSMakeRange(i,j-i)]``
39
Set the boolean ok to true if the string word is contained in string s as a substring, or to false otherwise.
``BOOL ok=[s containsString:word];``
41
Create string t containing the same characters as string s, in reverse order.
Original string s must remain unaltered. Each character must be handled correctly regardless its number of bytes in memory.
``````NSMutableString *t=[NSMutableString string];
[s enumerateSubstringsInRange:NSMakeRange(0,s.length)
options:NSStringEnumerationReverse|NSStringEnumerationByComposedCharacterSequences
usingBlock:^(NSString *part, NSRange r1, NSRange r2, BOOL *stop) {
[t appendString:part];
}];``````
43
Look for a negative value v in 2D integer matrix m. Print it and stop searching.
``````[m enumerateObjectsUsingBlock:^(NSArray *row, NSUInteger rn, BOOL *stopr) {
[row enumerateObjectsUsingBlock:^(NSNumber *v, NSUInteger cn, BOOL *stopc) {
if (v.intValue<0) {
NSLog(@"found %@ at row:%lu col:%lu",v,rn,cn);
*stopr=*stopc=YES;
return; // to quit the current block immediately
}
}];
}];
``````
45
Sleep for 5 seconds in current thread, before proceeding with the next instructions.
``[NSThread sleepForTimeInterval:5.0];``
46
Create string t consisting of the 5 first characters of string s.
Make sure that multibyte characters are properly handled.
``NSString *t=[s substringToIndex:5];``
47
Create string t consisting in the 5 last characters of string s.
Make sure that multibyte characters are properly handled.
``NSString *t=[s substringFromIndex:s.length-5];``
48
Assign to variable s a string literal consisting in several lines of text, including newlines.
``````NSString *s=@"Huey\n"
@"Dewey\n"
@"Louie";``````
49
Build list chunks consisting in substrings of the string s, separated by one or more space characters.
``NSArray *chunks=[s componentsSeparatedByString:@" "];``
50
Write a loop that has no end clause.
``for (;;);``
51
Determine whether the map m contains an entry for the key k
``if (m[k]) ...``
53
Concatenate elements of string list x joined by the separator ", " to create a single string y.
``NSString y=[x componentsJoinedByString:@", "];``
54
Calculate the sum s of the integer list or array x.
``id s=[x valueForKeyPath:@"@sum.self"];``
55
Create the string representation s (in radix 10) of the integer value i.
``NSString *s=@(i).description;``
57
Create the list y containing the items from the list x that satisfy the predicate p. Respect the original ordering. Don't modify x in-place.
``NSArray *y=[x filteredArrayUsingPredicate:p];``
58
Create string lines from the content of the file with filename f.
``````NSString *lines=[NSString stringWithContentsOfFile:f encoding:e error:NULL];
``````
59
Print the message "x is negative" to standard error (stderr), with integer x value substitution (e.g. "-2 is negative").
``NSLog(@"%d is negative",x)``
61
Assign to the variable d the current date/time value, in the most standard type.
``NSDate *d=NSDate.date;``
71
Basic implementation of the Echo program: Print all arguments except the program name, separated by space, followed by newline.
The idiom demonstrates how to skip the first argument if necessary, concatenate arguments as strings, append newline and print it to stdout.
``````int main(int argc, char *argv[])
{
while (*++argv) {
printf("%s", *argv);
if (argv) printf(" ");
}
printf("\n");
return EXIT_SUCCESS;
}``````
Alternative implementation:
``````int main() {
NSArray *all=NSProcessInfo.processInfo.arguments;
NSArray *args=[all subarrayWithRange:NSMakeRange(1,all.count-1)];
puts([args componentsJoinedByString:@" "].UTF8String);
return 0;
}``````
78
Execute a block once, then execute it again as long as boolean condition c is true.
``do ... while(c);``
96
Set boolean b to true if string s starts with prefix prefix, false otherwise.
``BOOL b=[s hasPrefix:prefix];``
99
Assign to the string x the value of the fields (year, month, day) of the date d, in format YYYY-MM-DD.
``````// once
static NSDateFormatter *df;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
df=[[NSDateFormatter alloc] init];
df.locale=[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
df.timeZone=[NSTimeZone timeZoneForSecondsFromGMT:0];
df.dateFormat=@"yyyy-MM-dd";
});
// then, wherever needed
NSString *x=[df stringFromDate:d];
``````
100
Sort elements of array-like collection items, using a comparator c.
``[items sortUsingComparator:c];``
110
Set the boolean blank to true if the string s is empty, or null, or contains only whitespace ; false otherwise.
``BOOL blank=![s stringByTrimmingCharactersInSet:NSCharacterSet.whitespaceCharacterSet].length;``
117
Set n to the number of elements of the list x.
``NSUInteger n=x.count;``
118
Create the set y from the list x.
x may contain duplicates. y is unordered and has no repeated values.
``NSSet *y=[NSSet setWithArray:x];``
119
Remove duplicates from the list x.
Explain if the original order is preserved.
``[NSSet setWithArray:x].allObjects``
120
Read an integer value from the standard input into the variable n
``scanf("%d",&n);``
122
Create an enumerated type Suit with 4 possible values SPADES, HEARTS, DIAMONDS, CLUBS.
``````typedef NS_ENUM(int, Suit) {
};``````
131
Execute f1 if condition c1 is true, or else f2 if condition c2 is true, or else f3 if condition c3 is true.
Don't evaluate a condition when a previous condition was true.
``````if (c1) f1();
else if (c2) f2();
else if (c3) f3();``````
134
Declare and initialize a new list items, containing 3 elements a, b, c.
``NSArray *items=@[a,b,c];``
137
Set the boolean b to true if the string s contains only characters in the range '0'..'9', false otherwise.
``````id nodigit=[[NSCharacterSet characterSetWithRange:NSMakeRange('0',10)].invertedSet copy];
BOOL b=![s rangeOfCharacterFromSet:nodigit].length;``````
157
Initialize a constant planet with string value "Earth".
``NSString * const Planet=@"Earth";``
165
Assign to the variable x the last element of the list items.
``x=items.lastObject;``
166
Create the list ab containing all the elements of the list a, followed by all the elements of the list b.
``NSArray *ab=[a arrayByAddingObjectsFromArray:b];``
169
Assign to the integer n the number of characters of the string s.
Make sure that multibyte characters are properly handled.
n can be different from the number of bytes of s.
``NSUInteger n=s.length;``